Agent skill
qa-nightmare
QAベテランが嫌がる悪夢テストケースを生成し、e2e-browserで自動実行する。9カテゴリ90+パターンの網羅的チェックリストから対象機能に適用可能なケースを抽出・ランク付け。
Install this agent skill to your Project
npx add-skill https://github.com/TakumiOkayasu/dotfile-work/tree/main/claude/skills/qa-nightmare
SKILL.md
QA Nightmare Test Generator
対象: $ARGUMENTS
トリガー条件
以下のいずれかに該当する場合に発動する:
| 条件 | 例 |
|---|---|
/qa-nightmare <機能名> が入力された |
/qa-nightmare ユーザー登録画面 |
| 「悪夢テスト」「QAナイトメア」「網羅テスト生成」と指示された | 「ログイン機能の悪夢テストを生成して」 |
| 本番障害リスクの高い機能のテストケース生成を求められた | 「決済処理の見落としがちなテストを洗い出して」 |
| リリース前の網羅的品質チェックを求められた | 「リリース前に全パターンを確認したい」 |
発動しない場合:
- 単体の軽微なバグ修正確認 → 通常のテスト作成で対応
- ユニットテストのみの依頼 → TDDスキルを使用
$ARGUMENTSが空の場合 → 対象機能と画面URLをユーザーに確認してから開始
前提条件
| 項目 | 内容 |
|---|---|
| チェックリスト | ~/.claude/skills/qa-nightmare/checklists/*.md が存在すること |
| e2e-browser | Phase 5 実行時は e2e-browser スキルが利用可能であること |
| 対象情報 | 対象機能名・画面URL または機能概要が提供されていること |
| 権限 | Docker が実行可能であること(e2e 実行時) |
禁止事項・制約
| 禁止 | 理由 |
|---|---|
| 明白に対策済みのパターンのスキップを省略なく一覧出力すること | スキップ理由を明示しないと漏れの原因になる |
| Phase 4 のユーザー確認をスキップして自動実行すること | 意図しないテスト実行・データ破壊を防ぐ |
$E2E_WORK 以外のパスへのテストコード生成 |
マウント外パスへの出力は消失する |
| チェックリスト未読でのパターン抽出 | 漏れの原因になる。必ず全ファイルを読む |
| 嫌度ランク S のケースをユーザー判断なしに除外すること | S ランクは必ず実施対象 |
概要
QAベテランが「これを見落とすと本番障害になる」と考える悪夢テストケースを、 網羅的チェックリストから対象機能に当てはめて生成し、e2e-browser スキルで自動実行する。
チェックリスト一覧
以下の9カテゴリ・90+パターンを対象機能に適用する。
各チェックリストは ~/.claude/skills/qa-nightmare/checklists/ に格納。
| カテゴリ | ファイル | パターン数 | 内容 |
|---|---|---|---|
| サイレントデータ破損 | silent-corruption.md | 10 | UI正常だがDB破損 |
| 状態遷移の穴 | state-transition.md | 8 | 異常な遷移パスで破綻 |
| 境界値の闇 | boundary-hell.md | 11 | 型の限界・仕様の隙間 |
| 権限の抜け穴 | auth-bypass.md | 10 | 認証認可の隙間 |
| タイミング地獄 | timing-chaos.md | 10 | 競合・二重実行・非同期 |
| データ入出力 | data-io.md | 10 | CSV/Excelインポート・エクスポート |
| 障害復旧 | error-recovery.md | 10 | 障害発生後の復帰・リカバリ |
| ドメイン固有 | domain-specific.md | 10 | 業務ドメイン特有のロジック(汎用) |
| UI表示破壊 | ui-destruction.md | 10 | レイアウト崩壊・表示異常 |
| UI操作系 | ui-operation.md | 10 | 操作パターンの穴 |
| UI状態管理 | ui-state.md | 10 | 画面状態の不整合 |
Phase 1: 機能分析
対象機能について以下を把握する。ユーザーに確認するか、コードを読んで推測する。
ステップ
$ARGUMENTSから対象機能名・画面URLを読み取る- 情報が不足している場合はユーザーに確認する(以下の「把握すべき情報」を参照)
- 把握した情報を箇条書きでまとめてから次フェーズに進む
把握すべき情報
- 画面構成: URL一覧、画面遷移図(一覧 → 詳細 → 編集 等)
- CRUD操作: どのテーブルに対してどの操作があるか
- 入力フィールド: 各フィールドの型・制約・必須/任意
- 状態遷移: ステータス値とその遷移パス(下書き→承認→完了等)
- 権限モデル: どのロールがどの操作を実行可能か
- 外部連携: 他テーブル・API・バッチとの依存
- ビジネスルール: 計算ロジック、バリデーションルール
Phase 2: チェックリスト適用
ステップ
- 全チェックリストファイルを読み込む:
ls ~/.claude/skills/qa-nightmare/checklists/*.md
- 各カテゴリのファイルを順番に読む
- 各パターンを対象機能に当てはめ、該当するパターンのみを抽出する
- スキップしたパターンはスキップ理由を記録する
適用判定基準
| 判定 | 基準 |
|---|---|
| ✅ 適用 | そのパターンの「攻撃」が対象機能で実行可能 かつ ビジネスインパクトがある |
| ⏭️ スキップ | 機能として存在しない操作(例: ファイルアップロードがない機能に BH-11) |
| ⏭️ スキップ | 対策済みであることがコードから明白(例: DB制約でNULL不可が保証済み) |
該当しないパターンの例
- ファイルアップロードがない機能に BH-11(ファイルアップロード境界)
- 状態遷移がないマスタCRUDに ST-01(逆方向遷移)
- シングルテナントに AB-08(マルチテナントのデータ分離)
Phase 3: ランク付け
ステップ
- 抽出したテストケースを「嫌度」で評価する
- 各ケースに S / A / B / C ランクを付与する
- 下記フォーマットで一覧を作成する
嫌度 = 発見困難度 × 被害度
| ランク | 嫌度 | 意味 |
|---|---|---|
| S | ★★★★★ | 本番で発覚、データ復旧不可、業務停止 |
| A | ★★★★☆ | 本番で発覚しうる、データ不整合、影響範囲大 |
| B | ★★★☆☆ | テスト環境で見つかる、UI不具合、影響範囲限定 |
| C | ★★☆☆☆ | 軽微、操作性の問題 |
出力フォーマット
## 悪夢テストケース一覧: <対象機能>
### S ランク(必ず実施)
| ID | カテゴリ | シナリオ | 攻撃手法 | 壊れ方 |
|----|---------|---------|---------|--------|
| TC-001 | SC-07 | カスケード削除漏れ | 親レコード削除→子テーブル確認 | 孤児レコード残存 |
### A ランク(強く推奨)
...
### B ランク(推奨)
...
### C ランク(余裕があれば)
...
合計: XX ケース (S: X, A: X, B: X, C: X)
Phase 4: ユーザー確認
⚠️ このフェーズは必須。スキップ禁止。
テストケース一覧をユーザーに提示し、以下を確認する:
- 実行するランクの範囲(S+A のみ? 全部?)
- 除外したいケースはあるか
- 追加したい独自ケースはあるか
ユーザーの確認・承認を得てから Phase 5 に進む。
Phase 5: e2e-browser 自動連携
確定したテストケースを /e2e-browser の形式で自動実行する。
5-1. workspace準備
e2e-browser と同じ workspace を使う:
E2E_WORK="/tmp/e2e-browser-$(echo "$PWD" | md5sum | cut -c1-12)"
e2e-browser の Phase 0(環境チェック)を実行。 .env.e2e / docker-compose.e2e.yml が未生成ならここで生成する。
5-2. テストコード一括生成
各テストケースについて:
- Fixture JSON を
$E2E_WORK/fixtures/nightmare/<TC-ID>.jsonに生成 - テストコードを
$E2E_WORK/tests/nightmare/<TC-ID>.spec.tsに生成
テストコードは e2e-browser の必須ルールに従う:
captureStep/captureStateで全ステップスクショdbAssertでDB検証beginCapture/destroyDb必須
5-3. 実行
全ケース一括実行:
docker compose -f "$E2E_WORK/docker-compose.e2e.yml" \
run --rm --service-ports e2e-runner \
bun run playwright test tests/nightmare/ \
--reporter=list --project=chrome
5-4. 結果レポート
## 悪夢テスト結果: <対象機能>
### Summary
- Total: XX ケース
- Pass: XX
- Fail: XX
- 所要時間: XXs
### 失敗ケース詳細
| ID | ランク | シナリオ | 失敗理由 | スクショ |
|----|:------:|---------|---------|---------|
| TC-001 | S | カスケード削除漏れ | 子テーブルに3件残存 | screenshots/TC-001_step03_*.png |
### 推奨対応
1. [S] TC-001: ON DELETE CASCADE の追加 or アプリ層での削除処理
2. [A] TC-005: ...
Phase 6: クリーンアップ
e2e-browser の Phase 5 と同様:
docker compose -f "$E2E_WORK/docker-compose.e2e.yml" down -v
rm -rf "$E2E_WORK"
チェックリスト拡張
新しいパターンを追加する場合:
- 該当カテゴリの
.mdに追記(IDは連番) - または新カテゴリの
.mdをchecklists/に追加 - 上記テーブルに反映
パターンのフォーマット:
### XX-NN: タイトル
- 攻撃: 具体的な操作手順
- 検証: 何を確認するか
- 壊れ方: 発生する障害
- スクショ箇所: (UI系のみ)
- 嫌度: ★☆☆☆☆ 〜 ★★★★★
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
performance-optimization
パフォーマンス最適化やプロファイリング時に使用。計測手法、ボトルネック特定、負荷テスト、レポート出力をカバー。
systematic-debugging
バグやテスト失敗に遭遇した際に使用。修正前の4フェーズ根本原因分析を強制。
interface-first-design
機能追加・クラス設計・interface設計・依存関係整理・責務分割時に使用。疑似コードから interface→クラス→TDD→実装の順で設計する。TDDスキルの前段。
consultation
実装中に判断が必要になった時、技術選定・設計相談が必要な時に使用。相談テンプレートで構造化された問題提示を強制。
test-coverage-guard
既存テストの信頼性を検証し、偽陽性を検出・排除するガードレール。テストがGREENになった後に発動する。
refactoring
振る舞いを変えずにコード構造を改善する際に使用。
Didn't find tool you were looking for?