最終更新:
VitestとJestの違いは?設定・モック・移行の注意点を比較
TypeScriptなら設定なしで大丈夫?
VitestはTypeScriptの変換を扱えるけれど、通常のテスト実行だけで型エラーをすべて検査するわけではないよ。型チェックも別に実行しよう。ブラウザーのDOMを使うテストには、jsdomなどの環境やBrowser Modeの設定も必要になるんだ。
jestをviに書き換えれば移行できる?
Vitestの方が必ず速いの?
テストの内容や設定によるよ。ファイル変更時の再実行と、CIで全件を実行する場面では条件も違う。隔離・並列数・カバレッジをそろえて、自分のテストで比べるのが確実だね。
V8のカバレッジは精度が低いって聞いたよ?
安全に試すにはどうしたらいい?
何を重視して選ぶか
| 観点 | Jest | Vitest |
|---|---|---|
| 設定の出発点 | Jestの設定・変換・既存preset | Viteの設定・プラグインを利用可能 |
| テストAPI | test、expect、jest.fnなど | test、expect、vi.fnなど。完全互換ではない |
| グローバルAPI | 標準で有効 | 標準で無効。importまたは設定が必要 |
| TypeScript | Babel等の変換設定を確認 | 変換を扱えるが、型検査は別に確認 |
| カバレッジ | babelまたはv8 | v8またはistanbul |
| 判断の中心 | 既存テスト・presetとの適合 | Viteとの共有と移行時の動作差 |
JestのcoverageProviderの既定値はbabelです。Vitestのカバレッジはプロバイダーに対応する追加パッケージを使用します。「V8だから必ず速い」「Istanbulだけが正確」といった固定的な選び方は避けましょう。
Jestから移すときのチェックリスト
- Node.js・Viteの対応版を確認する。 導入するVitestのメジャー版に合う公式ガイドを使います。
- APIのimportを明示する。 既存テストが暗黙のグローバルに依存していないかを確認します。
- モックの意味を確認する。
mockResetの動作、モジュールのモック、default exportを返す形、タイマーなどを点検します。単純な名前の置換で済むと決めつけません。 - DOMと後片付けを確認する。 環境・setupファイル・Testing Libraryのcleanupを確認します。グローバル設定の変更で自動cleanupの前提が変わることがあります。
- CIの終了条件を確認する。
vitest runで全件を1回実行し、失敗を非ゼロ終了として検知できることを確かめます。カバレッジの対象・除外・しきい値も引き継ぎます。
最小のテスト例
Vitestが導入済みのプロジェクトで、sum.test.tsに次を置く例です。DOMやアプリ固有の設定は不要な、関数だけのテストです。
import { expect, test } from 'vitest';
const sum = (a: number, b: number) => a + b;
test('2と3を足すと5になる', () => {
expect(sum(2, 3)).toBe(5);
});
vitest runで成功し、期待値を6に変えれば失敗するのが想定動作です。itはtestの別名なので、この例で入れ替えてもテストの意味は変わりません。型チェックの確認は、プロジェクトのtsc --noEmitなどで別途行います。
移行を急がなくてよいケース
Jest固有のpreset・独自transform・モックに依存するテストが多く、現状の開発速度に問題がなければ、維持する選択も妥当です。Viteを使っているかだけで決めず、設定の共有による利点と互換性確認の費用を比較してください。本記事には、両者の実行速度を同条件で測ったベンチマークは掲載していません。
参考資料
確認日:2026年9月26日。
- Vitest — Getting Started:Viteとの関係、導入、テスト実行。
- Vitest — Migrating from Jest:globals、モック、cleanupなどの相違点。
- Vitest — Coverage:V8・Istanbul、3.2.0以降のレポート精度。
- Vitest — Test API:testとitの関係。
- Jest — Configuration:カバレッジプロバイダーの設定。