vitest-architecture について
vitest-architectureは、モノレポと単一パッケージ向けにVitest 5のテスト規約を定める独立したスキルです。設定、テスト配置、レビューを導き、APIの詳細はVitestのドキュメントに委ねます。
主な機能
- 01Vitest 5の設定規約
- 02パッケージ単位の設定とプロジェクト
- 03ユニットテストと統合テストの分離
- 04テスト配置と有効性の指針
- 05足場作成・適用・レビューの各モード
活用シーン
- 01パッケージにVitestを導入
- 02適切なプロジェクトへのテスト配置
- 03テスト構成とカバレッジ方針のレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dobroslavradosavljevic/ skills --skill vitest-architectureインストール後、Claude Code で/vitest-architectureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/checklist.mdexamples.mdrules.mdtest-signal.mdtree.mdwith-coverage.mdwith-effect-testing.mdwith-elysia-eden.mdwith-live-harness.mdwith-react-happy-dom.mdwith-storybook-browser.mdwith-testcontainers.mdwith-typecheck-project.md詳細
Vitest アーキテクチャ
モノレポ(および単一パッケージ)における Vitest 5 のポータブルなテスト規約です。 このスキルだけで使えます。他のスキルには依存しません。
役割: テストの配置場所、プロジェクトとスクリプトの分割方法、単体テストと統合テストの使い分け、そもそも書く価値のあるテスト (test-signal.md)。
このスキルの対象外: Vitest API の詳細、モック、スナップショット、最新ドキュメントです。これらについては、最新の Vitest ドキュメントを優先してください。
対象のリポジトリにすでにテスト方法の記載(例:AGENTS.md)があり、内容が矛盾する場合は、ユーザーからこのスキルに移行するよう求められていない限り、リポジトリの記載を優先します。
スタックのデフォルト(コア)
| 項目 | デフォルト |
|---|---|
| ランナー | Vitest 5 — Bun の bun test / bun:test は使用しません |
| 設定 | ワークスペースごとに vitest.config.ts と単体テスト/統合テストのプロジェクトを設定します(モノレポのルートに Vitest ワークスペースを置きません) |
| レイアウト | tests/unit/**、tests/integration/**(統合テストのセットアップがある場合のみ) |
| デフォルトのゲート | ローカルでは単体テストのみ(test / test:watch)。存在する場合、CI では test:integration も実行します |
| 空のパッケージ | Turbo/CI が成功するように passWithNoTests を設定します |
モード
- スキャフォールド — checklist.md と tree.md に沿って、パッケージに Vitest を追加します。パッケージに実際の依存関係を使ったテストがすでにある場合、またはユーザーから求められた場合のみ、
integrationプロジェクトを追加します。 - 適用 — 新しいテストを適切なプロジェクトとフォルダーに配置します。既存のうち最も上位のセットアップを優先してください。test-signal.md を参照してください。
- レビュー — rules.md と test-signal.md に照らして確認し、移動を提案し、シグナルの弱い単体テストを指摘します。
厳守ルール(コア)
import { … } from "vitest"を使います(オーバーレイが該当する場合は@effect/vitest)。bun:testは使用しません。- Vitest の設定はパッケージ/アプリごとに管理します —
vitest.config.tsにプロジェクトを列挙します。ルートに集約用の設定があるとは限りません。 - 両方のセットアップがある場合は、2 つのプロジェクトを用意します:
unitとintegrationを--projectで選択します。独自の判断で統合テスト用のセットアップ(Testcontainers、テスト DB、compose スタック)やブラウザー用のセットアップを追加しないでください。提案し、承認を待ちます。 - デフォルトのローカルゲートは単体テストです。 統合テストは別のスクリプト(
test:integration)にします。主要なシグナルを担うため、CI では存在する場合に必ず実行します。 - テストは
tests/配下に置きます(すべてのsrc/ファイルの隣には置きません)。package-status.test.tsのような名前ではなく、側面に応じてstatus.test.tsのように命名します。 - 単体テストは高速でシグナルが強いものにします — 純粋なロジックとメモリー内で完結するテストを対象にし、Docker を必須としません。コードを書いた後に単体テストを書くことは禁止です。まず失敗モードの一覧を書き、次に一覧内の失敗ごとにテストを 1 つ書いてから、コードを書きます。呼び出しの確認だけを行う、何でもモックするテストは禁止です。
- 統合テストでは実際の依存関係を使用できます — タイムアウトを長めに設定します。コンテナー/DB を共有する場合は、多くの場合
fileParallelism: falseを設定します。 - 実行スクリプト(通常は
defineConfigも)にpassWithNoTestsを設定し、空のワークスペースがオーケストレーションで失敗しないようにします。 vitestと@vitest/*のバージョンを揃えます(モノレポでカタログを使用している場合は、カタログでバージョンを固定します)。
詳細:rules.md、tree.md、examples.md。
段階的な情報開示
| 必要な情報 | 参照先 |
|---|---|
| 標準のツリー構成 | references/tree.md |
| ルールとアンチパターン | references/rules.md |
| 書く、削除する、または移動するテストの判断 | references/test-signal.md |
| スキャフォールド/レビューチェックリスト | references/checklist.md |
| 良いレイアウトと悪いレイアウト | references/examples.md |
| オプションのオーバーレイ | 以下の拡張機能 |
拡張機能
該当するスタックが存在する場合(またはユーザーから依頼された場合)にのみ読み込みます。独自の判断でスタックを導入するためにオーバーレイを読み込まないでください。
| 条件 | 拡張機能 |
|---|---|
| 統合テストでの Testcontainers / Docker | with-testcontainers.md |
テストでの @effect/vitest / Layers | with-effect-testing.md |
Elysia Eden treaty(app) | with-elysia-eden.md |
| React + happy-dom / Testing Library | with-react-happy-dom.md |
*.test-d.ts 型プロジェクト | with-typecheck-project.md |
| Storybook + Vitest ブラウザー | with-storybook-browser.md |
ヘルスプローブ + skipIf を使ったライブテスト | with-live-harness.md |
| パッケージ単位のカバレッジしきい値 | with-coverage.md |
モノレポに関する注意
Turbo(または同様のツール)がリポジトリのルートからスクリプトを実行する場合、ルートの test /
test:integration では、単一のルート Vitest プロジェクトリストではなく、各パッケージの Vitest スクリプトを呼び出す必要があります。タスクグラフ / transit の詳細は、そのリポジトリのモノレポアーキテクチャドキュメントに記載してください。