概要
JavaScript/TypeScript向けテストフレームワークVitestは9月3日、メジャーバージョン5.0を正式リリースした。今回のリリースはパフォーマンスの底上げに主眼が置かれており、大規模な独立実行スイートで最大19%、ブラウザモードでのコンポーネントテストで最大18%、全体では最大53%の実行速度向上を達成したとしている。コアチームおよび790名を超えるコントリビューターによる共同作業の成果であり、VladimirとHiroshiの両氏はVoidZeroでVitestの開発にフルタイムで従事し、Ari氏はChromaticの支援を受けているという。開発資金はGitHub SponsorsとOpen Collectiveを通じて集められている。
パフォーマンス改善の内訳
高速化は複数の施策の組み合わせで実現された。vmThreadsやvmForksといったVMプールはコンテキスト間でコンパイル済みコードを再利用し、モジュールグラフを事前にウォームアップするようになった。同一のVite設定を使うインラインプロジェクトは単一のViteサーバーを共有するようになり、新設されたfsModuleCacheオプションはトランスパイル済みモジュールをディスク上に永続化して再実行間で使い回せるようにする。ブラウザモードについてもプリバンドルされたランタイム、アダプティブなブラウザセッションの起動、ファイルごとのラウンドトリップ削減などにより高速化した。加えて、バンドルする依存関係を絞り込むことでnode_modulesのサイズと解決時間を縮小したほか、カバレッジ計測に使うv8プロバイダーもメモリ使用量に上限を設けたマージ処理と事前コンパイル済みのglobパターンにより改善されている。
新機能
ブラウザモード向けには、テスト中のあらゆる操作・アサーション・DOMスナップショットを記録してステップごとに再生できる「トレースビュー」が追加され、ブラウザUI・Vitest UI・HTMLレポーターのいずれからも参照できる。条件付きモックを簡潔に書けるvi.when APIも新設され、引数は深い等価比較で照合されるほか、expect.any()のような非対称マッチャーもサポートする。ベンチマーク機能も刷新され、benchはトップレベルのインポートからテストコンテキストのフィクスチャへと移行し、フィクスチャやフック、リトライ、アサーションをベンチマークファイル内で利用できるようになった。このほか、ネストしたプロジェクトと設定の継承、expect.pollのタイムアウト時の失敗化などアサーションの厳格化、ロケーター失敗時にHTMLと並べてARIAスナップショットを表示するブラウザモードのエラー改善、Fakeタイマーによる Temporal API のモック対応なども盛り込まれた。
開発体験の向上と破壊的変更
開発体験面では、テストの実行順序への依存を防ぐためclearMocksがデフォルトで有効化されたほか、HTMLレポートやJSON、JUnit、添付ファイル、トレースなどの出力を.vitestディレクトリに統一。単一ファイルで完結するHTMLレポートを生成するsingleFileオプション、フレーキーテストを検出するための--repeats CLIオプション、パフォーマンス最適化を提案するvitest doctorコマンドなども追加された。一方でVite 6.4.0以上、Node.js 22.12.0以上が必須となり、ロケーターはデフォルトで厳格モードになるなど複数の破壊的変更が含まれるため、移行にあたっては公式のMigration Guideの確認が推奨されている。