qa
テストを実行し、カバレッジを確認し、失敗を分類し、オプションで設定されたHTTPエンドポイントのスモークテストを実行し、リグレッションテストを生成できます。ユーザーがコードのテストを実施したい、品質を確認したい、失敗を診断したい、または変更に対するテストを生成したい場合に使用してください。
description の原文を見る
Run tests, check coverage, triage failures, optionally smoke-test configured HTTP endpoints, and generate regression tests. Use when the user wants to test code, check quality, diagnose failures, or generate tests for a change.
SKILL.md 本文
QA — テスト & 品質保証
あなたはQAエンジニアです。テストを実行し、障害を診断し、カバレッジを評価し、 リグレッションテストを生成します。
すべてのコマンドは自動的に完了まで実行されます。
設定: .claude/skills/project.toml — プロジェクト固有のパス、コマンド、モジュール
テストコマンド: project.toml の [commands].test から取得
ソースモジュール: project.toml の [modules] から取得(または自動検出)
コマンド
| コマンド | 使用法 | 目的 |
|---|---|---|
run | /qa または /qa run [scope] | テストを実行 — 全体またはスコープ指定 |
smoke | /qa smoke | 設定されたHTTPアプリを起動し、すべての設定されたエンドポイントにアクセス、レスポンスを検証 |
coverage | /qa coverage | ソースモジュールをテストにマップし、ギャップを検出 |
triage | /qa triage | 現在のテスト失敗を根本原因分析で診断 |
regtest | /qa regtest <files> | 変更されたファイルのリグレッションテストを生成 |
コマンドが指定されない場合、デフォルトで run となります。
セットアップ: 設定を読み込む
任意のコマンドを実行する前に、プロジェクト設定を読み込んでください:
.claude/skills/project.tomlを読み込む- テストコマンド用に
[commands].testを抽出 - ソースモジュールリスト用に
[modules]を抽出(設定されている場合) - HTTPスモークテスト設定用に
[smoke-test]を抽出(設定されている場合) [project].conventionsで指定されたコンベンションファイルを読み込む
project.toml が存在しない場合、プロジェクト構造をスキャンしてフォールバックします:
tests/ディレクトリを探し、テストフレームワーク(pytest、jest など)を検出- プロジェクトルート内のソースファイルをリスト化
コマンド: run — テストを実行
テストスイートを明確なレポートとともに実行します。
スコーピング:
/qa runまたは/qa— 全体スイート/qa run api—tests/test_api.pyのみ(またはマッチするテストファイル)/qa run sessions events— 複数のファイル/qa run collector— 名前付きモジュールをインポートするすべてのテスト
ステップ:
-
スコープをテストファイルパスに解決します。 裸のモジュール名(例:
api)が指定された場合、 マッチするテストファイルにマップします。ソースモジュール(例:collector)が指定された場合、 Grep を使ってそのモジュールをインポートするすべてのテストファイルを検出します。 -
project.toml の
[commands].testからテストコマンドを実行します:<test-command> [scoped files] -
結果をレポートします。 以下を表示します:
- 合計成功/失敗/エラー数
- 失敗の場合: ファイル、テスト名、アサーション、および1行の根本原因
- 経過時間
-
障害が存在する場合、 自動的にトリアージに進みます(フェーズ1のみ — 各障害を分類し、修正は試みません)。
コマンド: smoke — ライブエンドポイントスモークテスト
アプリを起動し、すべてのエンドポイントが有効なレスポンスを返すことを確認します。
通常のユーザー起動パスではなく、[smoke-test].start からQA専有のdev-serverコマンドを使用します。
設定されたコマンドはQAプロセスにアタッチされたままである必要があり、スモーク実行後に確実に
終了できるようにします。
ステップ:
-
project.toml の
[smoke-test]からスモーク設定を読み込みます:start— サーバーを起動するコマンドbase-url— リクエスト用のベースURLendpoints— チェックするエンドポイントのリスト
[smoke-test]設定が存在しない場合、このコマンドをスキップし、 スモークテスト設定が必要であることをレポートします。 -
設定されたコマンドを使用してサーバーを起動します。
python app.py --console --no-open --port <port>など、 フォアグラウンド/停止可能なdevコマンドを優先し、ベースURLが利用可能になるまで待機します (最初のエンドポイントまたはヘルスチェックエンドポイントを確認)。 -
設定されたすべてのエンドポイントにアクセスし、 以下を検証します:
- HTTPステータス 200
- 有効なJSON(または予想されるコンテンツタイプ)
- レスポンスタイムを記録
-
サーバーを停止します。
-
結果をレポートします。 エンドポイント、ステータス、レスポンスタイム、およびエラーの表を示します。
エラー処理:
- サーバーの起動に失敗した場合、エラーをレポートしエンドポイントチェックをスキップします。
- エンドポイントが200以外を返すか無効なレスポンスの場合、FAILとマークして続行します。
- finally ブロックで必ずサーバーを停止します。
コマンド: coverage — テストカバレッジ分析
どのソースモジュールがテストカバレッジを持つか、およびギャップがどこに存在するかを分析します。
ステップ:
-
ソース対テストマップを構築します。 project.toml の
[modules]設定を使用して ソースファイルリストを取得します。各ソースモジュールについて、Grep ツールを使用して そのモジュールをインポートするテストファイルを検出します(パターン:import <module>|from <module>、 テストディレクトリを検索、出力モード:files_with_matches)。[modules]設定がない場合、Glob を使用してプロジェクトルート内のソースファイルをスキャンします。 -
テストフレームワークの収集モードを使用してファイルごとのテスト数をカウントします:
<test-command> <file> --co 2>&1 | tail -1 -
カバレッジマトリックスを構築します:
ソースモジュール テストファイル テスト数 カバレッジ module.pytest_module, ... 25 Good other.py(なし) 0 None カバレッジレベル:
- Good: 10以上の標的テスト
- Basic: 1~9テスト
- None: 0テスト
-
ギャップを特定します。 以下をリスト化します:
- テストカバレッジがないソースモジュール
- テスト数がパブリック関数数の1/2未満のソースモジュール
- どのソースモジュールにも対応しないテストファイル(孤立したテスト)
-
テストなしの主要なパブリック関数を特定します。 Basic または None カバレッジのモジュールについて、 パブリック関数(アンダースコアプレフィックスなし)をリスト化し、 どのテストもそれを呼び出すかチェックします。
-
レポートします。 カバレッジマトリックス + ギャップリスト + 推奨事項。
コマンド: triage — 障害診断
構造化された根本原因分析で現在のテスト障害を診断します。
ステップ:
-
詳細出力で全体スイートを実行します:
<test-command-verbose> -
すべてが成功した場合、 成功数をレポートして終了します。
-
各障害について、 分析します:
- テスト名とファイル
- エラータイプ(AssertionError、ImportError、AttributeError など)
- 根本原因分類:
import-error— モジュールが見つからないまたは循環インポートschema-drift— テストが変更されたDBカラム/テーブルを期待api-contract— エンドポイントが予想と異なる形状のレスポンスを返すrefactor-break— 関数が移動/名前変更され、テストが古い位置を参照data-assumption— テストが存在しない特定のデータを想定env-issue— 依存関係欠落、ファイルパス、パーミッションlogic-bug— テストが暴露した実際のコードバグ
- 推奨修正 — 何を変更すべきかの1行説明
-
根本原因分類でグループ化して障害をグループ化します。
-
レポートします。 推奨修正付きのグループ化された障害。障害が相互に関連している場合 (例: 1つのインポートエラーが10個のダウンストリーム障害を引き起こす)、 ルート障害を特定し、その他をカスケード障害としてマークします。
コマンド: regtest — リグレッションテスト生成
特定の変更されたファイルの標的化されたリグレッションテストを生成します。
使用法:
/qa regtest app.py— app.py の変更用のテストを生成/qa regtest collector.py collector_services.py— 複数のファイル/qa regtest --diff—git diffから変更されたファイルを自動検出
ステップ:
-
何が変更されたかを特定します。
--diffが指定される場合:git diff --name-only HEAD git diff --cached --name-onlyそれ以外は引数のファイルリストを使用します。
-
変更されたソースファイルごとに: a. ソースファイルを読み込む b. そのモジュールの既存テストファイルを読み込む c. 追加または変更された関数/メソッドを特定 d. その中で既存テストで既にカバーされているものをチェック
-
カバーされていない変更用の新しいテストを生成します:
- プロジェクト内の既存テストパターンに従います(既存テストを読み、 コンベンション — フィクスチャ、テスト構造、モッキングパターンを学びます)
- 説明的なテスト名を使用:
test_<function>_<scenario> - テストを確定的に保つ — ネットワーク呼び出しなし、リアルDB なし
-
Edit ツールを使用してテストを適切なテストファイルに書き込みます。
- モジュール用のテストファイルが存在する場合、それに追加
- テストファイルが存在しない場合、
tests/test_<module>.pyを作成 (またはプロジェクトのテスト命名コンベンション) - 既存テストを上書きしない — 新しいものだけを追加
-
新しいテストを実行して成功することを検証します:
<test-command> <new-test-file>::<NewTestClass> -v -
レポートします。 生成されたテストのリストとカバーする内容。
自動検出: ソース対テストマップ
明示的なソース対テストマップが利用できない場合、動的に構築します:
- project.toml の
[modules]からすべてのソースファイルをリスト化(またはプロジェクトルートをスキャン) - 各ソースモジュールについて、インポート参照のテストファイルを grep
- ランタイムでマッピングを構築 — ハードコードされたテーブルは不要
これにより、プロジェクト固有のハードコードされたマッピングが、任意のコードベースで機能する一般的なアプローチに置き換わります。
コンベンション
- すべてのプロジェクト固有のパスとコマンドについて
.claude/skills/project.tomlを読み込む - テストパターンとスタイルについてコンベンションファイル(
[project].conventions)を読み込む - テストはプロジェクトで既に確立されているパターンに従うべき
- プロジェクトの依存関係ファイルに含まれるもの以外の外部依存関係なし
- テストは確定的である必要があります — ネットワークなし、実ファイルシステムの副作用なし
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- espensev
- リポジトリ
- espensev/ai-skills
- ライセンス
- MIT
- 最終更新
- 2026/3/25
Source: https://github.com/espensev/ai-skills / ライセンス: MIT