vitest-testing-expert について
テスト設定、Jest からの移行、ブラウザモードやパフォーマンスの問題に取り組む開発者向けの Vitest 専門スキルです。Vite 連携、モダン JavaScript のテスト、ワークスペース設定を扱います。
主な機能
- 01Vitest と Vite の設定ガイダンス
- 02Jest 移行パターン
- 03ブラウザモードのテスト設定
- 04テスト性能のトラブルシューティング
- 05ワークスペースとモノレポの設定
- 06ESM と TypeScript のテスト指針
活用シーン
- 01Vite プロジェクトでの Vitest 設定
- 02Jest テストの Vitest への移行
- 03ブラウザベースのコンポーネントテスト設定
- 04テストの遅延やメモリ使用量増加の診断
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ duck4nh/ antigravity-kit --skill vitest-testing-expertインストール後、Claude Code で/vitest-testing-expertを入力して読み込まれたか確認します。
詳細
Vitest テストのエキスパート
Vitest テストフレームワークに特化したエキスパートです。モダンなテストパターン、Vite との統合、Jest からの移行戦略、ブラウザモードのテスト、パフォーマンス最適化を専門としています。
主な専門分野
Vite との統合と設定
Vite で Vitest を設定するための包括的なガイダンスを提供します。内容は以下のとおりです。
- 基本および高度な設定パターン
- プール設定の最適化(threads、forks、vmThreads)
- テストパフォーマンスを向上させる依存関係のバンドル
- SSR 環境とブラウザ環境での変換モード設定
- テスト開発における HMR(Hot Module Replacement)の統合
Jest からの移行と API 互換性
Jest から Vitest への移行を専門とし、以下の課題に対応します。
- API の互換性に関する違いと移行パターン
- モックの動作の違い(mockReset は元の関数を復元するのに対し、空の関数にはしません)
- 型のインポートの更新(Jest の名前空間から Vitest のインポートへ)
- タイムアウト設定の変更
- モジュールのモックパターンの更新
- Jest との互換性を保つスナップショット形式の設定
ブラウザモードのテスト
ブラウザベースのテストの設定と最適化を得意としています。
- Playwright/WebDriver を使ったマルチブラウザテスト
- フレームワークとの統合(React、Vue、Angular、Solid)
- カスタムブラウザコマンドと自動化
- ブラウザ固有のマッチャーとアサーション
- 実際の DOM を使ったテストと jsdom の代替手段
パフォーマンスの最適化
パフォーマンスのボトルネックを特定し、解消します。
- プール設定の最適化
- 分離と並列処理の調整
- 依存関係の最適化戦略
- メモリ使用量の最適化
- ファイル変換の最適化
ワークスペースとモノレポのサポート
複雑なテスト環境を設定します。
- マルチプロジェクト設定
- ワークスペースファイルの構成
- プロジェクト固有の環境と設定
- 共有 Vite サーバーの最適化
モダンな JavaScript と ESM のサポート
Vitest のモダンな機能を活用します。
- 変換なしでのネイティブ ESM サポート
- インソーステスト用の import.meta.vitest
- TypeScript の設定と型安全性
- 動的インポートとモジュール解決
診断機能
以下を調べて、Vitest の環境や問題をすばやく特定できます。
環境の検出:
- vitest の依存関係とバージョンを確認する Package.json
- Vite/Vitest の設定ファイル(vite.config.js/ts、vitest.config.js/ts)
- ブラウザモードの設定(browser.enabled)
- テスト環境の設定(node、jsdom、happy-dom)
- フレームワークプラグインとの統合
- TypeScript の設定と型
使用する主な診断コマンド:
# Environment analysis
vitest --version
vitest --reporter=verbose --run
# Browser mode validation
vitest --browser=chromium --browser.headless=false
# Performance profiling
DEBUG=vite-node:* vitest --run
vitest --pool=threads --no-file-parallelism
# Configuration validation
vitest --config vitest.config.ts --reporter=verbose
よくある問題の解決
Vitest 固有の 21 以上のカテゴリの問題を解決します。
設定とセットアップの問題
- Cannot find module 'vitest/config':インストールされていないか、インポートパスが間違っています
- テストが検出されない:include 設定の glob パターンが正しくありません
- テストファイルで型エラーが発生する:TypeScript の設定に Vitest の型定義がありません
Jest からの移行に関する問題
- jest.mock is not a function:vi.mock に置き換え、'vitest' から vi をインポートする必要があります
- mockReset で実装がクリアされない:Vitest は元の関数を復元しますが、Jest は空の関数にします
- スナップショット形式の違い:Jest との互換性を保つには snapshotFormat.printBasicPrototype を設定します
ブラウザモードの問題
- ブラウザプロバイダーが見つからない:@vitest/browser と playwright/webdriverio パッケージがありません
- Page が定義されていない:'@vitest/browser/context' からブラウザコンテキストをインポートする必要があります
- ブラウザでモジュールのモックが機能しない:spy: true オプションと適切な server.deps.inline 設定が必要です
パフォーマンスの問題
- テストの実行が遅い:プール設定が適切でないか、不要な分離が有効になっています
- メモリ使用量が多い:同時実行プロセスが多すぎます。maxConcurrency を調整する必要があります
- 変換に失敗する:依存関係の変換に問題があり、deps.optimizer の設定が必要です
- コーディングエージェントで出力が多すぎる:dot レポーターとサイレントモードを使用して、コンテキストのノイズを最小限に抑えます
フレームワーク統合における課題
- React コンポーネントがレンダリングされない:@vitejs/plugin-react または @testing-library/react の設定がありません
- Vue コンポーネントのテストが失敗する:Vue プラグインの設定が正しくないか、@vue/test-utils がありません
- DOM メソッドが利用できない:テスト環境が適切ではありません。jsdom/happy-dom またはブラウザモードが必要です
活用している Vitest 固有の機能
ネイティブ ESM サポート
- モダンな JavaScript で変換処理のオーバーヘッドがありません
- ES モジュールを直接インポートおよびエクスポートできます
- 条件付き読み込みに対応した動的インポートをサポートします
高度なテスト API
- expect.poll():非同期処理に対する再試行付きアサーション
- expect.element:ブラウザ固有の DOM マッチャー
- import.meta.vitest:ソース内テスト機能
- vi.hoisted():ホイストされたモックの初期化
ブラウザモードの機能
- jsdom によるシミュレーションと実際のブラウザ環境
- 複数ブラウザでのテスト(Chromium、Firefox、WebKit)
- ブラウザの自動化とカスタムコマンド
- フレームワーク固有のコンポーネントテスト
パフォーマンス機能
- テストの並行実行:並列度を制御できます
- c8 によるカバレッジ機能を内蔵:個別の計測処理は不要です
- 依存関係の最適化:スマートなバンドルにより実行を高速化します
- プールシステム:最適な実行環境を選択できます
高度な設定パターン
複数環境のセットアップ
export default defineConfig({
test: {
projects: [
{
test: {
include: ['tests/unit/**/*.{test,spec}.ts'],
name: 'unit',
environment: 'node',
},
},
{
test: {
include: ['tests/browser/**/*.{test,spec}.ts'],
name: 'browser',
browser: {
enabled: true,
instances: [{ browser: 'chromium' }],
},
},
},
],
}
})
パフォーマンスを最適化した設定
export default defineConfig({
test: {
pool: 'threads',
isolate: false, // If tests don't have side effects
fileParallelism: false, // For CPU profiling
deps: {
optimizer: {
web: { enabled: true },
ssr: { enabled: true },
},
},
poolOptions: {
threads: { singleThread: true }, // For debugging
},
},
})
コーディングエージェント向けの最小限の出力設定
// Configuration to reduce output verbosity in Claude Code or other coding agents
export default defineConfig({
test: {
// Use dynamic reporter based on environment
reporters: ((): Array<string | [string, Record<string, unknown>]> => {
if (process.env['CI'] !== undefined) {
return ['default', 'junit'];
}
if (process.env['VERBOSE_TESTS'] === 'true') {
return ['verbose'];
}
// Minimal output - dot reporter shows only dots for progress
return ['dot'];
})(),
// Suppress stdout from passing tests
silent: process.env['VERBOSE_TESTS'] === 'true' ? false : 'passed-only',
passWithNoTests: true,
hideSkippedTests: process.env['VERBOSE_TESTS'] !== 'true'
},
})
// Note: Avoid using onConsoleLog handler as it can cause test timeouts
// The 'silent' option provides sufficient output control
移行戦略
Jest からの移行
- 互換モードを有効にする:移行を簡単にするため、globals: true を設定します
- インポートを更新する:Jest の型から Vitest のインポートに切り替えます
- モックを変換する:jest.mock パターンを vi.mock 相当のパターンに置き換えます
- スナップショットを修正する:必要に応じて printBasicPrototype を設定します
- パフォーマンスを最適化する:Vite の速度面での利点を活用します
フレームワーク固有のパターン
- React:コンポーネントテストには、ブラウザモードで @testing-library/react を使用します
- Vue:スナップショットの互換性のために jest-serializer-vue を設定します
- Angular:Vitest 環境で TestBed をセットアップします
- Solid:要素ロケーターとともに @testing-library/solid を使用します
おすすめのベストプラクティス
- 設定の整理:ユニットテスト、統合テスト、ブラウザテストで設定を分けます
- パフォーマンスの最適化:まずプロファイリングを行い、その後ボトルネックに基づいて最適化します
- ブラウザテスト:包括的なカバレッジを得るため、複数ブラウザのインスタンスを使用します
- 型安全性:適切な Vitest の型を使い、厳格な TypeScript 設定を維持します
- デバッグ:開発ワークフローに適したデバッグモードを設定します
- 出力の最小化:ドットレポーターとサイレントモードを使用し、コーディングエージェントのコンテキストの混雑を抑えます
引き継ぎの推奨事項
他の専門家と効果的に連携します:
- Vite の専門家:複雑なビルド最適化やプラグイン設定について
- Jest の専門家:慎重な変換が必要な複雑な Jest パターンについて
- テストの専門家:一般的なテストアーキテクチャや CI/CD 統合について
- フレームワークの専門家:React/Vue/Angular 固有のテストパターンについて
- パフォーマンスの専門家:詳細なパフォーマンス分析と最適化について
主な強み
- モダンなテスト:Vite の速度とモダンな JavaScript の機能を活用します
- 移行の専門知識:互換性に関するガイダンスを通じて、Jest からスムーズに移行できます
- ブラウザテスト:コンポーネントテストや統合テストに実際のブラウザ環境を使用します
- パフォーマンス重視:テスト実行速度とリソース使用量を最適化します
- 開発者エクスペリエンス:ホットリロード、分かりやすいエラーメッセージ、デバッグサポートを提供します
モダンなテストのベストプラクティスを維持しながら、Vitest の導入、移行時の課題、最適化の機会に対して、実践的で実行可能なソリューションを提供します。
コードレビューのチェックリスト
Vitest のテストコードをレビューする際は、以下を確認してください:
設定とセットアップ
- Vitest の設定がプロジェクトの構成と要件に沿っている
- テスト環境(node、jsdom、happy-dom)がテストの種類に適している
- プールの設定(threads、forks、vmThreads)がパフォーマンス向けに最適化されている
- include/exclude パターンでテストファイルを正しく指定できている
- TypeScript との連携が適切に設定され、正しい型が使用されている
- ブラウザモードのセットアップ(使用する場合)に必要なプロバイダーの依存関係が含まれている
Jest からの移行に関する互換性
- Jest との API の違い(vi.mock と jest.mock)が正しく処理されている
- モックの動作の違い(mockReset の動作)が考慮されている
- 型のインポートには Jest の名前空間ではなく Vitest の型を使用している
- タイムアウトの設定には Vitest 固有の API を使用している
- スナップショットのフォーマットが期待される出力と一致している
- モジュールのインポートパターンが Vitest の ESM サポートで動作する
最新のテストパターン
- テストスイート全体で ESM のインポートとエクスポートが正しく動作する
- ソースコード内テストに import.meta.vitest を適切に使用している
- テスト環境で動的インポートが適切に処理されている
- 有効な場合はトップレベルの await を使用している
- テストの依存関係に対してツリーシェイキングが正しく動作する
- モジュール解決が最新の JavaScript パターンに沿っている
パフォーマンスの最適化
- プロジェクトの規模に対してテストの実行時間が妥当である
- 有効な場合、分離設定(isolate: false)を安全に使用している
- 依存関係の最適化によってテストの起動時間が短縮されている
- ファイルの並列実行設定が CI 環境に合っている
- テスト実行中のメモリ使用量が安定している
- キャッシュ設定によってテストの再実行が高速化されている
ブラウザモードでのテスト
- ブラウザプロバイダー(playwright/webdriverio)が正しく設定されている
- フレームワークプラグイン(React、Vue)がブラウザモードと互換性を持つ
- カスタムブラウザコマンドが期待どおりに動作する
- DOM 操作でブラウザコンテキストを適切に使用している
- ブラウザ環境でネットワークのモックが正しく動作する
- 複数ブラウザのテストで必要なブラウザの組み合わせを網羅している
フレームワークとの連携
- フレームワーク固有のテストユーティリティが Vitest で動作する
- コンポーネントのマウントとアンマウントが適切に処理されている
- 状態管理のテストがフレームワークのパターンに沿っている
- ルーターとナビゲーションのテストが正しく動作する
- フレームワークプラグインが Vitest の設定と競合しない
- テスト開発中にホットモジュール置換が動作する
ワークスペースとモノレポ
- マルチプロジェクト設定で関心事が適切に分離されている
- プロジェクトの依存関係が正しく解決されている
- 共有設定が一貫して維持されている
- ビルドツールとの連携がプロジェクト間で動作する
- テストの分離によってプロジェクト間の干渉が防止されている
- プロジェクト数に応じてパフォーマンスが適切に拡張する
コメント
Markdown 対応