プログラミング ソフトウェア 公開日 2026.05.15 更新日 2026.05.15

Vitest とは何か?Vite ベースの高速テストランナーと Jest からの移行ポイント

Vitest は Vite ベースの JavaScript / TypeScript テストランナーで、Jest 互換 API を持ちつつ ESM ネイティブで高速に動きます。`Jest を使っていたが ESM / TypeScript の設定が辛い』 案件で第一候補として急速に広まりました。Jest との違い、移行手順、ブラウザモードや UI モード等の特徴を整理します。

先に要点

  • Vitest` Vite ベースの JavaScript / TypeScript テストランナー』。`Jest と非常に近い API』 を持ちつつ、`ESM 標準』 `TypeScript / JSX 直接実行』 `Vite 設定の流用』 で、Jest の `重い設定地獄』 を解消する。
  • ` it / describe / expect / vi.fn() / vi.mock()』 など、Jest 経験者がほぼそのまま書ける API。`Jest からの移行コストは小さい』 のが普及の最大要因。
  • 強みは 速度。ESM + Vite のキャッシュ機構で、`Jest より数倍速い』 体感が普通。さらに ` UI モード(ブラウザで結果可視化)』 `ブラウザモード(本物のブラウザで実行)』 も組み込み。
  • 本命用途は ` Vite / Next.js / SvelteKit / Astro / Nuxt 系のモダンな TS プロジェクト』。Jest が標準だった頃の `CRA / 古めの Webpack 案件』 では Jest 続行で十分なケースもある。

Vitest ってよく聞くけど、Jest と何が違うの? ESM のテストで Jest がエラー吐くのに困っている』 TypeScript の設定が複雑になりすぎた』 ── モダンな TS / ESM 環境で開発する人にとって、Vitest は事実上のテストランナーのデファクトです。

ざっくり言うと、Vitest は Vite の上に乗った、Jest 互換 API のテストランナー』</strong> です。Jest をそのまま置き換えられる感覚で書ける』 のに、ESM / TypeScript / JSX をネイティブで扱える』 Vite と設定を共有できる』 という、Jest が苦手としていた領域を一気に解消したのが急成長の理由です。

この記事では、2026 年 5 月時点の Vitest v3 系をベースに、仕組み・Jest との違い・移行手順・採用判断軸 を整理します。 仕様は活発に変化しているので、最終確認は 公式ドキュメント を見るのが安全です。

なぜ Vitest が必要になったか

`Jest で何が辛いのか』 から見ると、Vitest の存在意義が分かります。

①ESM / TypeScript の設定が複雑

Jest は CommonJS 前提 で生まれたため、`ESM プロジェクトでテストだけ CJS に変換』 のような設定が必要。`Babel / ts-jest / SWC』 の組み合わせで設定が長くなる。

② Vite と設定が二重化

` Vite の resolve / alias / plugin』 を Jest 側でも書き直す必要があった。`tsconfig.paths』 や `Vite alias』 の同期で消耗。

③ 速度

` 大規模プロジェクトで Jest が遅い』 体感。Vite の ` モジュールキャッシュ と並列実行が、テスト時間を大きく短縮する。

④ Vite エコシステムの統合

` Vite の `vite.config.ts』 をテストでも使える』 ことで、`コンポーネント開発 = テスト』 が同じ前提で動く。

Jest を捨てる』 のではなく、<strong> Jest の良い API を維持しつつ、Vite ベースで速度と互換性を改善する』 のが Vitest の発想です。

基本の書き方

最小例で雰囲気をつかみます。

// math.ts
export const add = (a: number, b: number) => a + b;
// math.test.ts
import { describe, it, expect } from 'vitest';
import { add } from './math';

describe('add', () => {
  it('returns sum', () => {
    expect(add(1, 2)).toBe(3);
  });

  it('handles negatives', () => {
    expect(add(-1, 1)).toBe(0);
  });
});
# 実行
npx vitest

# UI モード(ブラウザで結果を見る)
npx vitest --ui

# カバレッジ
npx vitest --coverage

Jest 互換 API

`describe』 `it』 `test』 `expect』 `beforeEach』 `afterAll』 など、Jest 経験者がそのまま書ける。` Jest からの移行コストが非常に小さい』

設定ファイル

`vite.config.ts』 の `test』 セクションに書ける。`Vite と Vitest で同じ config を共有』 する設計が標準。

UI モード

`--ui』 で立ち上がる Web UI。`どのテストが失敗したか』 `差分の可視化』 `スナップショットの確認』 をブラウザで操作できる。

グローバル変数 / モック

`vi.fn()』 `vi.mock('モジュール名')』 `vi.spyOn』 など、Jest の `jest.fn / jest.mock』 と同じ感覚。`命名が `vi』 に変わるだけ』 で他はほぼそのまま。

`Jest を書ける人なら、ほぼ追加学習なしで Vitest が書ける』 のが体験を一言で表します。

Jest との比較

`Jest と Vitest、何が違う?』 を表で並べます。

Jest Vitest
登場時期 2014 2021
ベース CommonJS ESM(Vite)
TypeScript / JSX 外部設定が必要(ts-jest / babel) ネイティブサポート
速度 普通 速い(Vite のキャッシュ)
UI モード ×(別ツール) 標準(`--ui』)
ブラウザモード × 標準(本物のブラウザで実行)
watch モード ○(やや遅い) ◎(ESM のキャッシュ効果)
カバレッジ 標準 標準(`@vitest/coverage-v8』)
エコシステム 圧倒的に豊富 急成長中
主な選び所 既存 Jest 案件 / Webpack ベース 新規 / Vite 系 / ESM 重視

要点は 新規プロジェクトはほぼ無条件で Vitest、既存 Jest は無理に移行しない』</strong> です。Jest で困っていなければそのまま』、`Jest の設定が辛くなった』 段階で Vitest 移行を検討、というのが現実的な流れです。

Jest から Vitest への移行

`Jest で動いている既存テストを Vitest に移す』 手順を整理します。

読み込み中...

`数百テストのプロジェクトでも、半日程度で移行できる』 のが現実的な感触です。

ブラウザモード — 本物のブラウザで実行

Vitest の特徴のひとつが ` ブラウザモード(Browser Mode)』 です。

jsdom との違い

Jest / Vitest 標準では `jsdom』(Node 上の DOM エミュレータ)で実行する。` 実ブラウザの挙動とは微妙に違う』。ブラウザモードは Playwright / WebdriverIO ベースで 本物の Chromium / Firefox / Safari で実行

利点

` 本物の `IntersectionObserver』 `ResizeObserver』 `Web Animation API』 が動く』。jsdom で `動くはずが動かない』 系のテストで真価を発揮。

使い分け

` 普通の単体テストは jsdom / Node』、`ブラウザ依存の挙動が混ざるテストはブラウザモード』 という棲み分け。`遅さと信頼性のトレードオフ』 を意識して選ぶ。

E2E との関係

` Vitest ブラウザモードは `単体テストをブラウザで』 という位置づけ、Playwright / Cypress は `画面操作シナリオの E2E』 と棲み分け。両方使うチームも多い。

単体テストとは別世界』 だった ブラウザ実行』 が、Vitest なら同じ設定の上に乗る、というのが革新的な部分です。

採用判断のチェックリスト

`Vitest を選ぶか Jest 続行か』 の判断材料を整理します。

向いている(Vitest)

① 新規 Vite / Next.js / SvelteKit / Astro プロジェクト、② ESM ネイティブで書く案件、③ Jest 設定で消耗している既存プロジェクト、④ Storybook + テストの統合を狙う案件。

Jest を選ぶ理由が残る

① 既存の大規模 Jest テストが大量にあり移行コストが高い、② Jest 専用プラグインに強く依存、③ CRA / 古い Webpack ベース。

React Native の場合

` Expo / React Native』 は2026年現在も Jest がデファクト。`Vitest は Web 中心』 と考えるのが安全。

既存 Jest からの移行コスト

` jest → vi』 の置換と config 作成で 数時間〜半日。`スナップショットも互換』 で大半そのまま動く。

`迷ったら新規 Vitest、既存は段階移行』 が現実的な指針です。

どこで詰まりやすいか

便利な反面、現場で踏みやすい注意点もあります。

①ESM 専用ライブラリの罠

` ESM-only のライブラリ』 をモック化したいときに、`vi.mock』 の書き方が Jest と微妙に異なる場面がある。`pnpm の workspace』 と組み合わせると特に複雑化。

② vi.mock のホイスト

` vi.mock』 もホイストされるが、`変数キャプチャ』 の挙動が Jest と少し違う。`vi.hoisted』 を使うと明示的に巻き上げを制御できる。

③ 並列実行とグローバル状態

` テストファイルは並列実行』 がデフォルト。`グローバル状態に依存するテスト』 を書くと、別ファイル間の干渉でフレイクが起きやすい。

④ カバレッジツール

`@vitest/coverage-v8』 と `@vitest/coverage-istanbul』 の2系統がある。`v8』 が速いが `istanbul』 のほうが既存資産との互換性が高い。

`Jest からの移行で本当に困るところは vi.mock 周辺』 が、現場で繰り返し見るパターンです。

AI 時代の Vitest

AI 連携の文脈で Vitest の価値も上がっています。

速いフィードバックループ

AI でコードを書く → `vitest --watch』 で即フィードバック。`Jest よりさらに短い』 反復時間が、`AI が書いたコードを試して改善する』 速度を底上げする。

AI 生成テストの実行

` AI が生成したテストコード』 をプロジェクトに貼って即実行。`設定の壁』 が低いので、AI 出力をそのまま試しやすい。

CI のコスト圧縮

AI 駆動で `CI 実行頻度』 が増える時代、`テストが速い』 は `Vercel の請求』 や CI 課金にダイレクトに効く。

プロンプトに含めやすい

` describe / it / expect』 という共通言語なので、AI に `Vitest で書いて』 と頼むだけで、`Jest と同じ』 様式の出力が返ってくる。

`AI 時代の TypeScript 開発の足回り』 として、Vitest は不可欠なツールに位置づけられています。

Vitest に関するよくある質問

Q. Jest と Vitest、どちらを学ぶべきですか?

A. 新規プロジェクトに参加する人は Vitest を中心に学ぶ』のが2026年現在の最適解です。API は Jest 互換なので、`Jest の解説記事』 もほぼ Vitest にそのまま当てはまります。両方知っている必要はありません。

Q. Vitest は React Native でも使えますか?

A. ` 限定的に可能ですが、推奨はされていません』React Native は Metro バンドラと Jest がデファクトの組み合わせで、Vitest の良さ(Vite との統合)が活きづらいです。Expo 経由でも Jest が標準です。

Q. Storybook と Vitest はどう連携できますか?

A. Storybook の Stories をテストとして実行できる』</strong>のが Vitest と Storybook の連携の真価です。storybook test』 や `@storybook/test』 を通して、Story を Vitest のテストケースとして扱えます。

Q. Mock がうまく書けません。

A. vi.mock の場所と書き方』 がカギです。<strong> ファイルトップで vi.mock を呼ぶ』のが基本で、変数キャプチャが必要なら vi.hoisted』 を使います。Jest と完全互換ではない部分』 の代表で、Vitest のドキュメントを必ず参照する価値があります。

Q. SSR / Edge 環境のテストはどうしますか?

A. environment』 設定で node』 / jsdom』 / happy-dom』 / edge-runtime』 を選べます。<strong> Edge ランタイムのコード(Cloudflare WorkersVercel Edge)もテスト可能です。

Q. Vitest の学習コストは?

A. Jest 経験者なら数時間で書き始められる』</strong>レベルです。API はほぼ同じ』 設定が短い』 ので、難所は vi.mock の細部』 と `ESM の挙動』 くらいです。

Q. Vitest と Playwright の関係は?

A. Vitest = 単体テスト / 統合テスト』</strong>、<strong> Playwright = E2E テスト(ブラウザ操作シナリオ)』です。両方を `単体は Vitest、E2E は Playwright』 のように併用するのが2026年の標準的なテスト戦略です。

参考リンク

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。