Bun test vs Vitest: 速度 vs Vite ネイティブなテスト
Bun test は Bun ランタイムに組み込まれた非常に高速な runner で、Vitest は Vite ネイティブで Jest 互換の、豊富な機能セットを備えたフレームワークです。
Bun test は Bun に組み込まれており、Bun を使うときに別途インストールなしで、極めて高速な起動と Jest ライクな API を提供します。Vitest は Vite で動く test フレームワークで、Jest 互換の API、ESM ファーストの設計、watch mode、そして Vite ベースのプロジェクトとの密接な統合を備え、Node 上で動作します。
| Bun test | Vitest | |
|---|---|---|
| ランタイム | Bun(組み込み) | Node(Vite で動く) |
| 速度 | 非常に高速 | 高速 |
| API | Jest ライク | Jest 互換 |
| Vite との統合 | なし | ネイティブ |
| 最適な用途 | Bun プロジェクト、生の速度 | Vite アプリ、豊富な機能 |
CI では
Bun test は、すでに Bun を使っていて、最小限のツールで可能な限り速いテスト実行が欲しいときに魅力的です。Vitest は Vite ベースのアプリにとって自然な選択です - 共有された config、transform、そして成熟した Jest 互換の機能セット。Vite を使っているなら Vitest はシームレスに適合し、Bun を使っていて速度が欲しいなら Bun test は打ち負かすのが難しいです。大規模なスイートを移行する前に機能の同等性を確認しましょう。
高速化
lockfile をキーに依存関係を cache して、テストが温まった状態で始まるようにしましょう。テストは CI runner 上で実行され、より高速なマネージド runner はテストステップを短縮します。
The switching cost is mostly in the parts nobody lists
- Assertions and mocks usually port mechanically when the target implements a compatible API; custom transformers and framework plugins do not.
- Snapshot formats differ between runners, so plan to regenerate and review rather than port.
- Run both suites in parallel in CI for a period and diff the results. A migration that changes which tests fail is not a migration, it is a regression you have not found yet.
- Coverage numbers move on a runner change even when the tests do not, because instrumentation differs. Re-baseline any coverage gate deliberately.
結論
すでに Bun を使っていて最大の速度が欲しいなら Bun test。Vite ベースのアプリでネイティブな統合と豊富な機能が欲しいなら Vitest。どちらも高速で Jest ライクです - ランタイムと build tool で選びましょう。