automate-tests について
リポジトリの自動テストを調査し、安全に実行するためのスキルです。プロジェクト文書、CI設定、ビルドファイルを根拠にコマンドを選び、確認と安全策を適用して、根拠と結果を報告します。
主な機能
- 01リポジトリの根拠からテストコマンドを特定
- 02fast・ci・fullモードを選択
- 03セットアップやサービス起動前に承認を確認
- 04コマンド出力と終了コードを記録
- 05結果と失敗内容を要約
活用シーン
- 01クローンしたリポジトリで適切なテストを特定
- 02複数層のテストに安全な既定案を選択
- 03CIのコマンドをローカルで再現
- 04テストの実行状況と失敗を報告
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nesnilnehc/ ai-cortex --skill automate-testsインストール後、Claude Code で/automate-testsを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
スキル:自動テストの実行
目的
対象リポジトリで自動テストを実行する方法(コマンド、フレームワーク、前提条件、対象範囲)を調べ、安全性を最優先する対話ポリシーのもとで、最も適切なテストスイートを実行します。
中核となる目標
主な目標:根拠に基づいてコマンドを選択し、安全対策を講じたうえでテストを実行し、その結果を提示します。
成功基準(以下をすべて満たす必要があります):
- ✅ テスト計画の特定:根拠となる情報源(ドキュメント、CI 設定、またはビルドマニフェスト)を特定している
- ✅ コマンドの選択:モード(fast/ci/full)と制約に適したテストコマンドを選択している
- ✅ ユーザーの確認取得:依存関係のインストール、ネットワークの使用、またはサービスの起動を行う前に承認を得ている
- ✅ テストの実行:コマンドを実行し、出力と終了コードを記録している
- ✅ 結果の要約:根拠、コマンド、実行状況、失敗(ある場合)を含むテスト計画の要約を作成している
受け入れテスト:テスト計画の要約に従うだけで、開発者は追加の情報なしにテスト実行を再現できますか?
対象範囲の境界
このスキルの担当範囲:
- リポジトリ内の根拠(ドキュメント、CI、ビルドマニフェスト)からテストコマンドを特定する
- モードと制約に適したテストコマンドを選択する
- 安全対策とユーザー確認のもとでテストを実行する
- 根拠と失敗の診断情報を含めてテスト結果を要約する
このスキルの担当範囲外:
- テスト品質の評価やカバレッジ分析(
review-testingを使用してください) - 失敗したテストの修正やデバッグ(
orchestrate-repair-loopを使用してください) - 新しいテストやテストインフラストラクチャの作成(開発スキルを使用してください)
- ベストプラクティスに照らしたテストコードのレビュー(
review-testingを使用してください)
引き継ぎのタイミング:テストが終了したら(成功・失敗を問わず)、失敗の修正は orchestrate-repair-loop に、品質評価は review-testing に引き継ぎます。
ユースケース
- リポジトリをクローンし、推測に頼らず適切なテストコマンドを知りたい。
- リポジトリに複数のテスト層(単体/統合/E2E)があり、安全なデフォルトの実行計画が必要。
- CI が失敗し、ワークフローで使用されているものと同じコマンドを実行して、ローカルで再現したい。
動作
-
範囲と制約を確認する(不明な場合は質問する)
- ユーザーから何も指定がない場合は、高速で、ローカルで、非破壊的な実行をデフォルトにします。
- ユニットテストのみを実行し、外部サービス、Docker、ネットワーク依存のセットアップは使用しません。
- 必要に応じて、ユーザーにモードを選んでもらいます。
fast:ユニットテストのみ、セットアップは最小限。ci:CI ワークフローのコマンドを可能な限り忠実に再現します。full:統合テスト/e2e テストとサービス依存関係を含めます。
- Docker の使用、ネットワークアクセス、依存関係のインストールが許可されているかを尋ねます。
- ユーザーから何も指定がない場合は、高速で、ローカルで、非破壊的な実行をデフォルトにします。
-
テスト計画を把握する(証拠に基づく)
CLAUDE.mdまたは.ai-cortex/config.yamlが存在する場合は、そこに記録されたtest_commandを優先します。存在しない場合は、以下の情報源から確認します。docs/guides/project-config.md を参照してください。- 以下の情報源を順番に読み、明確で曖昧さのないテストコマンドが見つかった時点で、それ以降の確認を打ち切ります。
README.md、CONTRIBUTING.md、TESTING.md、docs/testing*、Makefile- CI 設定:
.github/workflows/*.yml、.gitlab-ci.yml、azure-pipelines.yml、Jenkinsfile - ビルドマニフェスト:
package.json、pyproject.toml、setup.cfg、tox.ini、go.mod、pom.xml、build.gradle*、*.csproj、Cargo.toml
- 以下を特定します。
- 主なテストエントリーポイント(
npm test、pnpm test、yarn test、pytest、tox、go test、dotnet test、mvn test、gradle test、cargo testなど) - テストレイヤーとマーカー(ユニット、統合、e2e)
- 環境の前提条件(DB、Redis、Docker Compose、必須の環境変数、シークレット)
- CI での依存関係のセットアップ方法(サービス、キャッシュ、アーティファクト)
- 主なテストエントリーポイント(
- ヒューリスティックによる推測より、ドキュメントまたは CI にある明示的な記述を優先します。
-
実行計画を選択する
ciモードでは、リポジトリの CI ワークフローのステップから実行順序を導き出します(可能な限り近い手順にします)。fastモードでは、最も直接的で、前提条件が最も少ないユニットテストコマンドを選びます。- 複数のスタックがある場合(たとえばバックエンドとフロントエンド)は、スタックごとに分け、順序を固定して実行するよう提案します。
- 依存関係のインストールやサービスの起動が必要な場合は、続行する前に確認を求めます。
-
ガードレールを設けて実行する
- 実行前に、これから実行する正確なコマンドを必ず表示します。
- 作業ディレクトリは対象リポジトリを起点とします(デフォルトは
.)。 - 失敗を記録し、要約します。
- 最初に失敗したコマンドと終了コード
- 最も関連性の高いエラー箇所
- 次の対応(ツールチェーンの不足、環境変数の不足、サービスが未起動など)
- 破壊的な操作は避けます。
- ユーザーの明示的な承認なしに、
rm -rf、git clean -fdx、docker system prune、データベースの削除/マイグレーションコマンドを実行しないでください。
- ユーザーの明示的な承認なしに、
- リポジトリでシークレットが必要な場合、チャットに貼り付けるよう求めないでください。
.envファイル、シークレットマネージャー、または文書化されたローカル開発フローを使用してください。
入力と出力
入力
- 対象リポジトリのパス(デフォルトは
.)。 - モード:
fast(デフォルト)、ci、またはfull。 - 制約:依存関係のインストールが許可されているか(はい/いいえ)、ネットワークの使用が許可されているか(はい/いいえ)、Docker の使用が許可されているか(はい/いいえ)。
出力
- 以下を含む簡潔な「テスト計画の概要」。
- 根拠:計画の参考にしたファイル/パス
- 選択したコマンド(実行順)
- 前提と前提条件
- 実行した内容とスキップした内容(およびその理由)
- 失敗のデバッグに必要な範囲のコマンドログ(求められない限り、極端に長いログは出力しないでください)。
制限事項
厳守すべき境界
- 根拠がある場合、テストコマンドを捏造しないでください(ドキュメント/CI を優先します)。
- 確認なしに、依存関係をインストールしたり、Docker を実行したり、外部サービスを起動したりしないでください。
- ユーザーから明示的な依頼がない限り、リポジトリのファイルを変更しないでください(例外:ユーザーが成果物を求めた場合にレポートファイルを生成すること)。
- シークレットを漏らさないでください。また、チャットで機密性の高い認証情報を求めないでください。
スキルの境界(重複を避ける)
以下は行わないでください(ほかのスキルが担当します):
- テスト品質の評価:テストカバレッジ、テスト設計、テストのベストプラクティスの評価 →
review-testingを使用してください - テスト失敗の修正:失敗するテストのデバッグ、壊れたテストコードの修復、根本原因の特定 →
orchestrate-repair-loopを使用してください - テストの作成:新しいテストケース、テスト基盤、テストフレームワークの作成 → 開発・実装スキルを使用してください
- コードレビュー:品質、保守性、ベストプラクティスの観点からのテストコードのレビュー →
review-testingを使用してください - リポジトリの分析:コードベース全体の構造分析やアーキテクチャレビュー →
review-codebaseを使用してください
中断して引き継ぐ場合:
- テストが失敗し、ユーザーが「なぜですか?」または「どう修正すればよいですか?」と尋ねた場合 → デバッグと修復のため、
orchestrate-repair-loopに引き継いでください - ユーザーが「これらのテストは十分ですか?」または「カバレッジはどのくらいですか?」と尋ねた場合 → 品質評価のため、
review-testingに引き継いでください - ユーザーが「X のテストを書いてもらえますか?」と尋ねた場合 → テスト実装のため、開発ワークフローに引き継いでください
- テストが成功し、ユーザーが「次は何をテストすべきですか?」と尋ねた場合 → テスト戦略の提案を
review-testingに引き継いでください
セルフチェック
中核となる成功基準(すべて満たす必要があります)
- テスト計画を確認済み:根拠となる情報源(ドキュメント、CI 設定、またはビルドマニフェスト)を特定している
- コマンドを選択済み:モード(fast/ci/full)と制約に適したテストコマンドを選択している
- ユーザーの確認を取得済み:依存関係のインストール、ネットワークの使用、またはサービスの起動前に承認を得ている
- テストを実行済み:コマンドを実行し、その出力と終了コードを記録している
- 結果を要約済み:根拠、コマンド、実行状況、失敗(ある場合)を含むテスト計画の要約を作成している
プロセス品質の確認項目
- 根拠に基づく選択:テストコマンドの信頼できる情報源(ドキュメントファイル、CI ワークフロー、またはビルドマニフェスト)を少なくとも 1 つ特定しましたか?
- 安全対策を適用:依存関係のインストール、ネットワークの使用、Docker/サービスの起動、または状態を変更する操作の前に確認を求めましたか?
- コマンドを表示:実行前に正確なコマンドを表示しましたか?
- 失敗を診断:テストが失敗した場合、最初に失敗したコマンド、終了コード、考えられる根本原因の分類を提示しましたか?
- 破壊的な操作を回避:明示的な承認なしに、破壊的なコマンド(
rm -rf、git clean、docker system prune、データベースの削除)を実行するのを避けましたか? - シークレットの漏えいを防止:会話内で機密性の高い認証情報を求めず、代わりに
.envファイルまたは文書化されたローカル開発手順を使用しましたか?
受け入れテスト
テスト計画の要約に従えば、追加情報なしで開発者がテストの実行を再現できますか?
いいえの場合:テスト計画の要約が不完全です。不足している根拠、コマンド、または前提条件を追加してください。
はいの場合:スキルの実行は完了です。必要であれば、引き継ぎを続けてください。
例
例 1:package.json がある JavaScript リポジトリ
ユーザー:「このリポジトリのテストを実行してください。」
エージェント:
package.jsonのスクリプトと.github/workflows/*を確認します。fastモードに決め、次のコマンドを提案します:npm test(または、リポジトリで標準として定められている場合はpnpm test/yarn test)
- 次のように確認します:「依存関係をインストール(
npm ci)し、ネットワークアクセスを許可しますか?」 - 次を実行します:
npm cinpm test
- 結果を要約し、失敗があれば該当するテスト出力を示します。
例 2(エッジケース):統合テストに Docker が必要なモノレポ
ユーザー:「CI をローカルで再現して。」
エージェント:
.github/workflows/ci.ymlを解析し、個別のジョブを特定します:- バックエンドのユニットテスト
- フロントエンドのテスト
docker composeを使用する統合テスト
- 確認を求めます:
- Docker の使用を許可するか
- ネットワークの使用を許可するか
- 実行するジョブ(すべて、または失敗したジョブのみ)
- 制御された順序で実行します:
- ジョブごとに依存関係をインストール
- まずユニットテストを実行
- 統合テスト用のサービスを起動
- 統合テストが失敗した場合は、次の点を要約します:
- サービスのヘルス状態/ポートの競合
- 不足している環境変数
- CI の設定とローカルの設定の違い