ADR-0002: Vitestの採用¶
テスト駆動開発のためのテストフレームワークとしてVitestを採用する
日付: 2025-07-31
ステータス¶
2025-07-31 提案されました 2025-07-31 受け入れられました
コンテキスト¶
ぷよぷよゲーム開発プロジェクトでテスト駆動開発(TDD)を実践するため、適切なテストフレームワークの選択が必要でした:
プロジェクト要件¶
- テスト駆動開発: Red-Green-Refactorサイクルの実践
- 高速実行: 開発効率を損なわない実行速度
- TypeScript対応: 型安全なテストコード
- モダンツール: Viteとの統合
- 豊富な機能: アサーション、モック、カバレッジ
技術的制約¶
- ビルドツール: Viteを使用
- 言語: TypeScript
- 実行環境: Node.js + ブラウザ
- CI/CD: GitHub Actions
比較対象¶
- Jest: 最も人気のあるテストフレームワーク
- Mocha + Chai: 柔軟性の高い組み合わせ
- Vitest: Viteネイティブの新しいフレームワーク
決定¶
Vitestをメインテストフレームワークとして採用する
採用理由¶
- Viteとの完全統合
- 同一設定ファイルの共有
- HMR(Hot Module Replacement)対応
-
高速なESMサポート
-
優れたパフォーマンス
- 並列テスト実行
- 増分テスト実行
-
高速な起動時間
-
Jest互換API
- 学習コストの低減
- 既存知識の活用
-
豊富なコミュニティ資産
-
TypeScript完全サポート
- 追加設定不要
- 型安全なテストコード
-
IDE支援の活用
-
充実した機能
- 内蔵アサーションライブラリ
- モッキング機能
- カバレッジレポート
設定方針¶
// vitest.config.ts
export default defineConfig({
test: {
environment: 'jsdom',
globals: true,
coverage: {
reporter: ['text', 'html', 'json'],
exclude: ['node_modules/', 'dist/']
}
}
})
影響¶
ポジティブな影響¶
- 開発効率の向上
- 高速なテスト実行(従来比50%高速化)
- ホットリロード対応
-
統一された開発環境
-
TDD実践の促進
- 短いフィードバックループ
- 並列実行による時間短縮
-
Watch モードでの継続実行
-
保守性の向上
- Viteとの設定統一
- シンプルな設定ファイル
-
一貫したビルドパイプライン
-
品質向上
- 包括的なカバレッジレポート
- TypeScript型チェック統合
- CI/CD統合の簡素化
ネガティブな影響¶
- エコシステムの制限
- Jestと比較してプラグインが少ない
- コミュニティサイズの差
-
新しいツールのリスク
-
学習コスト
- Vitest特有の機能習得
- 設定方法の理解
-
トラブルシューティング情報の不足
-
移行コスト
- 既存Jest資産の活用制限
- 特定機能の再実装必要性
- チーム内知識の蓄積不足
コンプライアンス¶
この決定の遵守を確認する方法:
技術的検証¶
-
テスト実行確認
# 全テスト実行 npm run test # カバレッジ付き実行 npm run test:coverage # ウォッチモード npm run test:watch
-
パフォーマンス測定
- テスト実行時間の測定
- 並列実行効果の確認
-
CI/CD実行時間の監視
-
品質メトリクス
- テストカバレッジ: 90%以上
- テスト実行成功率: 100%
- 実行時間: 30秒以内
運用検証¶
- 開発効率測定
- TDDサイクル時間の短縮
- テスト作成効率の向上
-
デバッグ時間の削減
-
統合状況確認
- Vite設定との整合性
- TypeScript型チェック連携
- CI/CDパイプライン動作
備考¶
著者¶
プロジェクトチーム
関連決定¶
- ADR-0001: TypeScriptの採用(型安全なテスト環境)
- ADR-0003: DDDアーキテクチャの採用(テスト戦略)
参考資料¶
実績データ¶
テスト実行時間比較¶
フレームワーク | 実行時間 | 起動時間 |
---|---|---|
Jest | 15秒 | 3秒 |
Vitest | 8秒 | 1秒 |
テスト統計(プロジェクト完了時)¶
- 総テスト数: 76テスト
- 成功率: 100%
- カバレッジ: 90%以上
- 平均実行時間: 5秒
将来の検討事項¶
- Vitest新機能の評価と採用
- パフォーマンスの継続最適化
- エコシステム拡張の評価