Vitest / Jest
公式サイトVitest / Jestとは
VitestとJestは、JavaScriptやTypeScriptで書いたコードを、関数や画面部品といった小さな単位で自動的に検証する「単体テスト」のためのツールです。「この入力ならこの結果になるはず」という期待をテストとして書いておき、コードを変更するたびに実行して、期待どおりに動き続けているかを確認します。Jestは長く使われてきた定番のツールで、VitestはViteというビルドツールと同じ仕組みで動く、より新しいツールです。書き方はほぼ共通しており、どちらもTypeScriptや画面部品のテストに対応しています。
弊社が採用する理由
弊社では、TypeScriptで開発する案件の単体テストにVitestを、既存のプロジェクトや構成上の理由がある場合にはJestを採用しています。テストの対象は、金額計算や日付の扱い、入力チェックといった業務ルールを担う関数、APIの応答を整形する処理、Reactの画面部品の表示と振る舞いなどです。要件定義で決めた業務ルールをテストとして書き残すことで、ルールが仕様書とコードの両方に残り、将来の改修で意図せず変わってしまうことを防げます。Playwrightによる画面全体のテストとは役割を分け、細かなルールの検証は単体テストで速く網羅し、主要な操作の流れをE2Eテストで確認する組み合わせにしています。GitHub Actionsで変更のたびに実行し、問題があれば取り込む前に検出しています。PHPの案件では同じ役割をPHPUnitやPestが担っており、技術構成にかかわらず同じ考え方で品質を確保しています。
向いている案件
- 金額計算や入力チェックなど、業務ルールを担うロジックの検証
- Reactの画面部品の表示と振る舞いの確認
- フレームワーク更新時に動作が変わっていないことを速く確認したい場合
保守・移行の観点
単体テストはコードと一緒に保守するもので、仕様変更の際はテストも合わせて更新します。テストが多すぎて実行に時間がかかると実行されなくなるため、業務ルールに関わる部分を優先し、実装の細部に依存しすぎないテストを心がけます。VitestやJestの更新では設定の書き方が変わることがあり、TypeScriptやReactの更新と合わせて依存関係を棚卸しする時期に対応します。テストの網羅率を目標にするより、不具合が起きたら再発防止のテストを追加する運用のほうが、長期的には効果的です。
組み合わせて使う技術
よくあるご質問
単体テストを書くと開発費用は高くなりますか?
テストを書く分の工数は増えますが、不具合の早期発見と改修時の確認作業の削減で回収できることが多いです。長期間保守するシステムほど効果が出やすく、対象を業務ルールの部分に絞ることで費用を抑えられます。
VitestとJestのどちらを使うかは選べますか?
はい。既存のプロジェクトがJestを使っていればそのまま継続し、新規ではVitestを基本にしています。書き方はほぼ共通なので、どちらを選んでも保守性に大きな差はありません。
関連するサービス
関連する開発ガイド
- 検収(受け入れテスト)で確認すべきことWebシステムの検収で発注側が確認すべきことを、検収条件の確認、テスト項目の作成、ステージングでの実施、不具合の記録と切り分け、検収書の作成の手順で解説し、契約不適合責任との関係も整理します。
- 納品後の保守・運用で何が必要かシステムは納品後も動かし続ける必要があります。監視、バックアップと復元テスト、OS・ミドルウェア・CMSのアップデート、ステージングでの検証、保守契約の範囲という基本を整理します。
- 要件定義とは何をすることか — 発注前に整理したい5つのこと要件定義はシステムで何を実現するかを合意する工程です。発注前に整理したい目的と成功条件、現状業務の流れ、利用者と権限、扱うデータ、やらないことの5つを、想定例を交えて解説します。
監修: Unlogical Systems合同会社(杉並区・西荻窪)公開