testing-excellence · git:20261002.c0e127d · 2026-10-02 · sha256 2c2d2eac3979f568
testing-excellence git:20261002.c0e127dA
Immutable. This exact content never changes and is served at /api/v1/blob/2c2d2eac3979f568.
--- name: testing-excellence description: > アプリのテストはすべてこのスキルを使う。開発中のTDD(テストファースト)から、 ユーザー目線のE2E・受入テスト、インフラ/デプロイ検証、リリース前の網羅テストまでを1つに統合。 「テストを書いて」「テストして」「動作確認して」「TDDで進めて」「カバレッジを確認」 「E2Eテスト」「リリース前にちゃんとテストしたい」「本番で動くか確認」「回帰テスト」 などの文脈で必ず使用する。§0「適用段階」に従い、たたき台〜v1 では「壊れたら困る順」の最小テスト、 固定化段階(v1 到達後のブラッシュアップ)ではユーザーがテストと明示しなくてもTDDサイクルを適用する。 セキュリティ・コスト・パフォーマンスの監査は Skill launch-security を併用する。 --- # Testing Excellence — 開発中TDDからリリース前網羅テストまで テストは「書いたコードの確認」ではなく「アプリがユーザーの目的を果たすことの証明」。 開発中はTDDで守り、リリース前は4層(ユニット→統合→E2E→インフラ/受入)で網羅する。 ## 0. 適用段階(先に読む) 本スキルは mvp-first-development §9「たたき台 → 確認 → 固定化」と app-orchestrator 裁定ルール4に従って段階的に適用する。 | 段階 | 書くテスト | 本スキルの適用範囲 | |---|---|---| | たたき台〜確認(v0 まで) | 計算ロジック・パーサー・集計と、理由表示など「文言が出ること」の固定だけ | §4 のインフラ検証(デプロイ後のスモーク)のみ必須。§2 の TDD サイクルと §5 は使わない | | v1 までに | 上に加え、最頻業務と必須業務フローの E2E を「壊れたら困る順」に最小本数 | §3 を最小本数で。カバレッジは v0・v1 いずれのゲートにもしない | | 固定化(v1 到達後のブラッシュアップ) | OK が出た主要フローの回帰テスト。以後の新機能・バグ修正は §2 の TDD サイクル | §1〜§6 を全て適用。カバレッジ 80% はこの段階の目標 | リリース可否は INV-5 の3判定だけで決まり、本スキルのチェックリスト(§5)は公開を止める理由にならない(`INVARIANTS.md`)。 ## 1. テスト戦略の全体像(4層) | 層 | 対象 | ツール | 目安 | |---|---|---|---| | ユニット | 関数・ユーティリティ・コンポーネント | Vitest/Jest | 多数・高速 | | 統合 | APIエンドポイント・DB操作・認可 | Vitest + ローカルD1/モック | 主要API全部 | | E2E(ユーザー目線) | クリティカルユーザーフロー | Playwright | 主要フロー3〜10本 | | インフラ/受入 | 本番相当環境での実動確認 | curl・wrangler・実ブラウザ | リリース毎 | ユニット・統合は `pnpm test`、E2E・受入は `pnpm run preview` で立てたローカル本番相当環境(既定は `http://localhost:8787`)に対して実行する。 カバレッジ目標は固定化段階で80%以上(§0)。ただし数字合わせより「壊れたら困る順」にテストする。 ## 2. 開発中: TDDサイクル 新機能・バグ修正は必ずこの順で進める(詳細パターンは `references/tdd-and-patterns.md`): ```text 1. RED : ユーザージャーニーからテストケースを書く → 実行して失敗を確認 2. GREEN : テストを通す最小実装 3. REFACTOR: テストが通ったまま整理(immutability・小さい関数) 4. 検証 : カバレッジ確認(固定化段階では80%+) ``` - テストは**ユーザーに見える振る舞い**を検証する。実装詳細(内部state・呼び出し回数)に依存させない。 - セレクタはセマンティック(role/label/text)を使う。CSSクラス依存は禁止。 - 各テストは独立させる(beforeEachでリセット。実行順依存禁止)。 - バグ修正はまず**再現テスト**を書き、失敗を確認してから直す。テストを直して逃げない(テスト自体が誤りの場合のみ修正)。 - モック方針・ファイル配置・CI設定も `references/tdd-and-patterns.md` 参照。 ## 3. ユーザー目線テスト(E2E・受入) - クリティカルフローを**ユーザーの言葉**でシナリオ化する(例:「ログイン→商品を検索→カートに入れ→注文確定→完了メールが届く」)。 - 実装は Playwright。`pnpm run preview` で本番相当のローカル環境を起動し、そのURLに対して実行する。ハッピーパスだけでなく: - 入力ミス時に**どう直せばいいか分かるエラー**が出るか - 二重送信・戻るボタン・リロードで壊れないか - 空データ状態(初回ユーザー)と大量データ状態の両方 - モバイル幅(375px)での操作可能性(レスポンシブ崩れがないか。基準は Skill jp-web-design / ux-design) - 受入基準は要件定義(app-excellence の手順ゲート)の「ユーザーができること」と1対1で対応させる。 ## 4. インフラ・デプロイ検証(本番相当) デプロイ後(またはプレビューURL)で必ず実行: ```bash # スモークテスト: トップ・主要API・認証が生きているか curl -sf "$ORIGIN/" -o /dev/null && echo "OK: top" curl -s "$ORIGIN/api/health" | head -c 200 # SPA配信時: APIがフォールバックに横取りされていないか curl -H "Accept: text/html" -H "Sec-Fetch-Mode: navigate" "$ORIGIN/api/me" | head -c 100 ``` - [ ] D1 migrationが本番に適用済み(`wrangler d1 migrations list`で未適用ゼロ) - [ ] Secretsが本番に存在する(値は表示しない。cloudflare-secure-deploy の手順) - [ ] 認証フローの実動確認(許可ユーザー成功・拒否ユーザー失敗。better-auth-google-gate の受入テスト) - [ ] `wrangler tail`でエラーログが出ていない - [ ] 実ブラウザで主要フロー1周(Browserペインでの目視確認を含む) ## 5. 固定化段階の網羅チェックリスト(v1 到達後) - [ ] ユニット・統合テスト全パス、カバレッジ80%+ - [ ] E2Eクリティカルフロー全パス(デスクトップ+モバイル幅) - [ ] 回帰: 既存機能の主要フローが壊れていない - [ ] エラー系: 不正入力・権限なし・404・ネットワーク断で適切な表示 - [ ] 空状態・ローディング状態・大量データ状態の表示確認 - [ ] インフラ検証(§4)全項目 - [ ] セキュリティ・コスト・パフォーマンス監査 → **Skill launch-security で GO 判定** 本チェックリストは固定化段階の品質目標であり、v0・v1 の公開可否は INV-5 の3判定(launch-security の段階別ゲートを含む)で決まる。未達項目は残課題リストへ記録する。 ## 6. 報告形式 ```text テスト結果: ユニット/統合: X件 pass / Y件 fail(failの内容と対処) E2E: シナリオ別の結果 カバレッジ: XX% インフラ検証: 各項目の実測結果(コマンド出力の要点) 未実施・未確認: 残っている事実だけを明示(「たぶん動く」で完了報告しない) ``` ## 関連 - TDD詳細パターン・モック・CI・よくある失敗パターン: `references/tdd-and-patterns.md` - ローカル本番相当環境の起動・デプロイ手順: Skill wrangler / cloudflare-secure-deploy - セキュリティ・コスト・パフォーマンス: Skill launch-security