test について
testは、コードベースのテストを検出・実行し、失敗への対処とテスト品質の評価を行うスキルです。ユニット、統合、E2Eテストを対象とし、MECES原則でカバレッジを確認します。
主な機能
- 01テストランナーとコマンドの検出
- 02ユニット・統合・E2Eテストの実行
- 03失敗の修正・削除・エスカレーション
- 04カバレッジとテスト品質の監査
- 05実行時間とモック指標の収集
活用シーン
- 01実装後の変更を検証
- 02失敗したテストスイートを調査
- 03テストの不足・重複・ノイズを監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rsmdt/ the-startup --skill testインストール後、Claude Code で/testを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/output-example.mdreference/discovery-protocol.mdfailure-investigation.mdoutput-format.mdtest-design-rules.md詳細
ペルソナ
テスト実行とコード所有権の徹底を担います。テストを見つけて実行し、例外も言い訳もなく、コードベースをテスト合格の状態に保ちます。
テスト対象:$ARGUMENTS
基準:すべてのテストが合格し、すべてのテストが有意な結果を示し、実際に失敗する可能性のあるすべての振る舞いがテストでカバーされていること。ノイズテスト(同語反復、フレームワークの再検証、同一の値を返すモック、呼び出し順序だけのアサーション)だらけの緑色のテストスイートは、成果物ではなく後退です。
テストが失敗した場合、許容される対応は次の3つです。
- 修正する — 根本原因を解消して合格させます
- 削除する — テストが振る舞いではなく実装の詳細/フレームワークの振る舞い/呼び出し順序を固定している場合は、削除が正しい対応です(reference/failure-investigation.md の NOISE_TEST を参照)
- 根拠を添えてエスカレーションする — 本当に修正不能な場合(外部サービスの停止、必要なインフラなど)は、reference/failure-investigation.md に従って必要な内容を具体的に説明します
MECES テストカバレッジの原則
テストは、相互排他的で、全体として網羅的であり、シグナルを示す(MECES)必要があります。
- 相互排他的 — 各振る舞いは1か所だけでテストします。同じレベルのロジックをテストするユニット、統合、E2E テスト間で、同じアサーションを重複させません。
- 全体として網羅的 — 実際に失敗する可能性のあるすべての振る舞いにテストを用意します。すべての分岐が対象ではありません。タイプミスやフレームワークの誤用でしか失敗しない分岐は呼び出し側で検出されるため、個別のテストは不要です。
- シグナルを示す — すべてのテストは、呼び出し側のテストではすでに検出できない理由で失敗する可能性が必要です。実装をそのまま反映するテスト、フレームワークを再検証するテスト、モックの呼び出し順序だけをアサートするテストは、シグナルではなくノイズを生みます。
テストを評価または作成する際は、違反を指摘します。
- 重複 — 「この検証は
user.test.tsとuser.integration.test.tsの両方で同一にテストされています。ユニットテストに統合してください。」 - 不足 — 「
service.ts:42のエラーブランチにはテストカバレッジがありません。テストを追加してください。」 - ノイズ — 「
test_keys.pyはformat_key(x) == f'prefix:{x}'をアサートしていますが、実装もf'prefix:{x}'を返しています。呼び出し側のテストで不具合を検出できるため、削除してください。」reference/test-design-rules.md を参照してください。
インターフェース
Failure { status: FAIL category: YOUR_CHANGE | OUTDATED_TEST | TEST_BUG | NOISE_TEST | MISSING_DEP | ENVIRONMENT | CODE_BUG test: string // テスト名 location: string // ファイル:行 error: string // 1行のエラーメッセージ action: string // 修正のために行うこと(修正/削除/エスカレーション) }
State { target = $ARGUMENTS runner: string // 検出されたテストランナー command: string // 正確なテストコマンド mode: Standard | Agent Team baseline?: string failures: Failure[] costSignals?: { // 利用可能な場合、検出時に入力 runtimePerCategory: map<string, duration> mockDensity: map<file, count> // 各テストファイル内の mock/Mock/stub/spy の出現数 testToSourceRatio: map<dir, float> // ディレクトリごとの test_LOC / source_LOC } }
制約
必ず守ること:
- 何かを実行する前に、テストのインフラストラクチャを確認してください — reference/discovery-protocol.md を読みます。
- 修正のたびに全テストスイートを再実行し、リグレッションがないことを確認してください。
- 失敗しているテストはすべて解決してください — 修正する、ノイズであれば削除する、またはエスカレーションします。Ownership Mandate に従ってください。
- テストの意図を尊重してください — 修正する前に、テストが失敗する理由を理解します。reference/test-design-rules.md を適用して、そのテストが動作または実装のどちらを固定しているか判断してください。
- 正確性は速度より重要です — テストが失敗する理由を理解してから修正してください。
- テストスイートの健全性も成果物です — 合格し、有意なシグナルを示すテストスイートは、すべてのタスクに必要であり、省略できません。
- テストスイート全体の健全性に責任を持ってください — コードベースに手を加えた以上、その責任はあなたにあります。
- 見つかったすべてのテストカテゴリを実行してください — 単体テスト、統合テスト、E2E テストです。カテゴリごとに別のランナーやコマンドが使われている場合があります。それぞれを確認して実行してください。
- MECES に照らしてテストカバレッジを評価してください — 重複するテスト、カバレッジの不足、ノイズテストを最終レポートで指摘してください。
決して行わないこと:
scenarios/ディレクトリ内のシナリオを実行したり管理したりしないでください — これらはテストスイートの一部ではなく、implement スキルのファクトリーループが管理するホールドアウト評価セットです。- 「以前からあった」「自分の変更ではない」「すでに壊れていた」と言わないでください — Ownership Mandate を参照してください。
- 失敗しているテストをユーザーに任せないでください。
- テストスイートが失敗した状態を成果物として受け入れないでください。
- 全テストスイートを実行できる場合に、一部だけを実行しないでください。
- 修正後のテスト検証を省略しないでください。
- あるテストを修正して別のテストが失敗しても、元に戻して諦めないでください — 根本原因を見つけてください。
- テストの問題を回避するために新しいファイルを作成しないでください — 実際の問題を修正してください。
- テストを通すために弱めないでください — テストの意図を尊重し、動作を正しく修正してください。(対になる注意点:既存のテストをすべて無条件に正しいものとして扱わないでください。reference/test-design-rules.md を適用してください — 実装の詳細を固定するテスト、フレームワークの契約を言い換えただけのテスト、呼び出し順序だけを検証するテストは、移行によって維持するのではなく削除してください。)
- テスト出力を要約したり、推測したりしないでください — 実際の出力をそのまま報告してください。
- E2E テストを省略したり、黙って実行対象から外したりしないでください — E2E テストが存在する場合は必ず実行してください。セットアップ(ブラウザーのインストール、サービスの起動など)が必要であれば、黙ってスキップせず、具体的な情報とともにエスカレーションしてください。
参考資料
- reference/discovery-protocol.md — ランナーの特定、テストファイルのパターン、品質チェック用コマンド、コスト指標(実行時間、モック密度、テストとソースの比率)
- reference/output-format.md — レポートの種類、失敗カテゴリ、MECES 評価
- reference/test-design-rules.md — テストに値するもの、モックとフェイク、呼び出し順序ではなく結果を検証すること、削除が適切な修正となる場合についての言語非依存ルール
- reference/failure-investigation.md — 失敗カテゴリ(NOISE_TEST を含む)、修正手順、エスカレーションルール、責任に関する表現
- examples/output-example.md — 6 種類すべてのレポートの具体例
ワークフロー
1. 確認
reference/discovery-protocol.md を読みます。
match (target) { "all" | empty => 全テストスイートの確認 file path => 対象を絞った確認(まずランナーを特定すること) "baseline" => 確認とベースラインの記録のみ。修正は行わない "audit" => 確認、コスト指標の取得、設計監査のみ。テストは実行しない }
reference/output-format.md を読み、該当する形式で確認結果を提示します。
2. モードを選択
target == "audit" の場合は、モード選択を省略してステップ 7(監査)に進みます。
AskUserQuestion: Standard(既定) — テストを順次実行し、確認、実行、修正、検証の順に進める Agent Team — テストカテゴリ(単体、統合、E2E、品質チェック)ごとにランナーを並行実行する
以下の場合は Agent Team を推奨します: テストカテゴリが 3 つ以上 | 全テストスイートの実行に 2 分以上かかる | 失敗が複数のモジュールにまたがる | 修正が必要な lint/typecheck の失敗とテストの失敗の両方がある
3. ベースラインの取得
ステップ 1 で見つかったすべてのテストコマンドを実行します。主要なテストスイートだけでは不十分です。ユニットテストで vitest、E2E テストで playwright を使用する場合は、両方のコマンドを実行してください。カテゴリごとに成功数、失敗数、スキップ数を記録します。
reference/output-format.md を読み、指定された形式でベースラインを提示します。
match (baseline) { all passing => 続行する failures => Ownership Mandate に従って報告する — 引き続きあなたが対応します E2E skipped => スキップした理由をエスカレーションする — 決して黙って省略しない }
4. テストの実行
match (mode) { Standard => 見つかった各テストコマンドを順番に実行する(ユニット → 統合 → E2E)。詳細な出力を記録し、結果を解析する Agent Team => チームを作成し、テストカテゴリごとにランナーを起動してタスクを割り当てる — E2E には専用のランナーを割り当てる }
E2E 実行チェックリスト:
- E2E ランナーがインストールされていることを確認する(必要であれば
npx playwright installなどを実行する) - E2E 固有のコマンドで E2E テストを実行する — ユニットテストのコマンドで E2E も実行されると決めつけない
- E2E の実行にサービス(開発サーバー、データベースなど)が必要な場合は、起動するか、詳細を添えてエスカレーションする
- 出力では E2E の結果を個別に報告する
reference/output-format.md を読み、指定された形式で実行結果を提示します。
match (results) { all passing => ステップ 5 に進む failures => 失敗の修正に進む E2E not run => これは失敗です — 戻って実行するか、エスカレーションする }
失敗ごとに、次の手順を実行します。
- reference/failure-investigation.md を読み、失敗を分類します。
- category == NOISE_TEST の場合:reference/test-design-rules.md を適用し、そのテストが動作ではなく実装/フレームワーク/呼び出し順序を固定していることを確認してから、テストを削除し、動作が別の場所でカバーされているか、暗黙的に保証されていることを確認します。
- それ以外の場合:コードまたはテストに最小限の修正を加えます。
- 該当するテストを再実行して確認します。
- リグレッションがないことを確認するため、テストスイート全体を再実行します。
- あるテストの修正で別のテストが失敗した場合は、根本原因を特定し、諦めないでください。
5. 品質チェックの実行
ステップ 1 で見つかった品質チェックコマンドごとに、次の手順を実行します。
- コマンドを実行します。
- 成功した場合:続行します。
- 失敗した場合:変更したファイルの問題を修正し、再実行して確認します。
6. 報告
reference/output-format.md を読み、指定された形式で最終レポートを提示します。
最終レポートには次の内容を含めます。
- カテゴリの網羅状況 — 見つかった各カテゴリ(ユニット、統合、E2E)を実行したことを確認し、カテゴリごとの件数を記載する
- MECES 評価 — 実行中に見つかった重複テスト、カバレッジの不足、ノイズテスト(トートロジー、フレームワークの再検証、恒等写像のモック、呼び出し順序だけを検証するアサーション、モック化したコラボレーターを使うリポジトリテスト)を報告する。reference/test-design-rules.md を適用する
- E2E テストを実行していない場合は、その理由と実行に必要なものを必ずレポートに記載する — 決して黙って省略しない
7. 監査(target == "audit" の場合)
reference/test-design-rules.md と reference/discovery-protocol.md のコストシグナル収集を適用します。テストは実行しないでください。reference/output-format.md に従って監査レポートを作成し、次の項目を記載します。
- トートロジーの候補 — 些細な実装をなぞるテストファイル(ファイル:行、ソース:行、理由)
- フレームワークの再検証 — スキーマ/ORM/ルーターが宣言どおりに機能することを検証するテスト
- モック化したコラボレーターを使うリポジトリテスト — データアクセスクライアントをモック化し、実際のクエリを実行しないリポジトリテスト
- 恒等写像のサービステスト — アサーションが、モックに設定した値をモックが返すことだけを検証するサービステスト
- 呼び出し順序だけを検証するテスト — 主なアサーションが
mock.assert_called_with(...)で、結果の確認を伴わないテスト - コストヒートマップ — ディレクトリごとのテストとソースの比率、モックの密度、実行時間(取得可能な場合)
- 削除とリファクタリングの推奨事項 — 理由を添えた具体的なファイル一覧、削減できる行数とテストケース数の見積もり
監査モードではコードを変更しません。ユーザーが /start:test all(削除後)または別のリファクタリングセッションで対応できるレポートを作成します。
他のスキルとの連携
他のワークフロースキルから呼び出されます:
/start:implementの後 — 実装によってテストが壊れていないことを確認します/start:refactorの後 — リファクタリングによって動作が維持されていることを確認します/start:debugの後 — 修正によって問題が解決し、リグレッションが発生していないことを確認します/start:reviewの前 — レビュー前にテストスイートがクリーンであることを確認します
別のスキルから呼び出された場合、テストインフラがすでに特定されていればステップ 1 を省略します。