← AI開発 資料アーカイブ
テスト

汎用 E2Eテスト完全ガイド(非エンジニア向けClaude Code共通体系)

元ファイル: システム要件定義の分析と汎用化方法/汎用 E2E テスト完全ガイド.md

要約

walkinglabsのハーネスエンジニアリング講義を根拠にした、非エンジニア向けClaude Codeプロジェクト共通のE2Eテスト体系ガイド。E2Eテストの意味から、ユーザー視点で1文化→正常系/異常系/境界系の3種を書く→5項目で記述するシナリオ作成手順を平易に解説する。部品テストでは接続部分の不具合を発見できず、異常系こそ本番で起きるという観点を強調する。

要点

E2Eテストテスト体系非エンジニア正常系/異常系/境界系ハーネスwalkinglabs

汎用 E2E テスト完全ガイド

非エンジニア向け Claude Code プロジェクト共通テスト体系

作成日: 2026年5月23日
根拠: walkinglabs ハーネスエンジニアリング 講義10・11・12 1


0. E2Eテストとは何か(1分で理解する)

E2E(End-to-End)テストとは、「ユーザーが実際に使う一連の流れ全体」を最初から最後まで通して確認するテストです。

ユニットテスト(部品テスト):
  「投稿ボタンのコードが正しく書かれているか」を確認する

E2Eテスト(全体テスト):
  「記事を書いて → 投稿ボタンを押して → 読者に届く」
  という一連の流れ全体が正しく動くかを確認する

なぜ部品テストだけでは不十分か: 部品は全部正しく動いていても、部品同士をつなぐ「接続部分」で壊れることが最も多い。E2Eテストはその接続部分を含めた全体を確認する唯一の方法である。


1. E2Eテストシナリオの作成方法(具体的なステップ)

ステップ1:「ユーザーが達成したいこと」を1文で書く

シナリオは必ず「ユーザー視点」で書く。技術的な言葉は使わない。

✅ 良い例:「記事を自動生成して、Substackに投稿する」
❌ 悪い例:「APIエンドポイントにPOSTリクエストを送信する」

ステップ2:正常系・異常系・境界系の3種類を必ず書く

種類 意味
正常系 すべてが正しく動く場合 記事が正常に投稿される
異常系 何かが壊れた場合 APIが落ちていた場合
境界系 限界値・特殊ケース 文字数が上限ちょうどの場合

正常系だけ書いて満足するのが最も危険なパターン。異常系こそが本番で起きる。

ステップ3:各シナリオを以下の5項目で記述する

### シナリオ ID:[S-01]
**目的:** [何を確認するか・1文]
**前提条件:** [テスト開始時の状態]
**実行手順:**
  1. [最初の操作]
  2. [次の操作]
  3. [最後の操作]
**期待結果:** [何が起きるべきか・具体的に]
**確認方法:** [どうやって確認するか・誰でもできる方法で]
**合否判定:** [ ] PASS / [ ] FAIL
**FAILの場合の記録欄:** [原因・発生箇所・対応状況]

ステップ4:「確認方法」は必ず「人間が目で見て確認できる」レベルで書く

✅ 良い例:「テスト用メールアドレス(test@example.com)の受信箱を開き、
           件名に[TEST]が含まれるメールが届いていることを確認する」

❌ 悪い例:「正常に動作することを確認する」(何を見ればいいか不明)

ステップ5:シナリオに「実行禁止条件」を付ける

本番データや本番環境に触れることを防ぐため、各シナリオに制約を付ける。

⚠️ 実行前チェック(全シナリオ共通)
- [ ] テスト用アカウントを使用していることを確認
- [ ] 本番データベースに接続していないことを確認
- [ ] dry-run モードが有効になっていることを確認

2. 設計段階からE2Eを組み込む開発プロセス(全体像)

全体の流れ

Phase 0:要件定義
  ↓
  「何を作るか」を定義する
  ↓
Phase 1:E2Eシナリオ作成(← ここが「設計段階での組み込み」)
  ↓
  「何ができれば完成か」を定義する
  ↓
Phase 2:SDD(詳細設計)
  ↓
  E2Eシナリオを満たすための設計を行う
  ↓
Phase 3:実装
  ↓
  E2Eシナリオを満たすようにコードを書く
  ↓
Phase 4:E2Eテスト実行
  ↓
  全シナリオをPASS/FAILで記録する
  ↓
Phase 5:RYGゲート判定
  ↓
  全シナリオPASS → Green → 完了宣言可能
  1件でもFAIL → Red → 実装に戻る

重要: Phase 1 で書いたシナリオが「完了の定義書」になる。Phase 4 でそのシナリオを全部通過して初めて「完成した」と言える。

なぜ設計段階で書くのか

設計段階でシナリオを書くと、以下の副次効果が生まれる。

副次効果①:要件の曖昧さが即座に発覚する
「記事を投稿する」というシナリオを書こうとすると、「投稿が成功したかどうかをどうやって確認するのか」という問いが生まれる。この問いに答えられない場合、要件定義が不完全であることが設計段階で判明する。

副次効果②:実装の方向性が明確になる
「テスト用メールアドレスに届くことを確認する」と書いた瞬間、「テスト用メールアドレスを用意する必要がある」という実装上の要件が明らかになる。

副次効果③:完了の定義が共有される
非エンジニアとエンジニア(またはAI)が「何ができれば完成か」を同じ言葉で共有できる。


3. 汎用 E2E_TEST_SCENARIOS.md テンプレート

このテンプレートをすべてのプロジェクトで使い回す。プロジェクト固有の内容だけを書き換える。

# E2E_TEST_SCENARIOS.md
# プロジェクト名:[プロジェクト名]
# 作成日:[YYYY-MM-DD]
# ステータス:[DRAFT / READY / IN_PROGRESS / COMPLETE]

---

## ⚠️ このファイルの使い方

1. このファイルは実装開始前に作成すること
2. 全シナリオがPASSするまで「完了しました」と言ってはならない
3. 実行時は必ずテスト環境・テスト用アカウントを使用すること
4. 本番データ・本番環境への接続は禁止

---

## 実行前チェックリスト(毎回確認)

- [ ] テスト用アカウントでログインしている
- [ ] テスト環境(本番ではない)に接続している
- [ ] dry-run モードが有効になっている(該当する場合)
- [ ] バックアップが取られている(データを扱う場合)

---

## 正常系シナリオ

### S-01:[メインの正常フロー]
**目的:** [最も基本的な使い方が動くことを確認する]
**前提条件:**
- [条件1]
- [条件2]
**実行手順:**
1. [操作1]
2. [操作2]
3. [操作3]
**期待結果:** [具体的に何が起きるべきか]
**確認方法:** [どこを見て・何を確認するか]
**合否判定:** [ ] PASS / [ ] FAIL
**実行日時:**
**実行者(人 or AI):**
**FAIL時の記録:**

---

### S-02:[別の正常フロー(あれば)]
(同じ形式で記述)

---

## 異常系シナリオ

### S-03:[最も起きやすいエラーケース]
**目的:** [エラーが適切に処理されることを確認する]
**前提条件:** [エラーが起きる状態を作る方法]
**実行手順:**
1. [エラーを意図的に起こす操作]
2. [システムの反応を観察する]
**期待結果:** [エラーメッセージが表示される / ログに記録される / 通知が届く]
**確認方法:** [ログファイルの場所 / 通知の確認場所]
**合否判定:** [ ] PASS / [ ] FAIL
**実行日時:**
**実行者(人 or AI):**
**FAIL時の記録:**

---

### S-04:[外部サービス障害時の動作]
**目的:** [外部APIが落ちていても安全に処理されることを確認する]
**前提条件:** [外部APIへの接続を意図的に切断する]
**実行手順:**
1. [接続を切断する]
2. [通常の操作を試みる]
**期待結果:** [エラーが記録され、データが失われないこと]
**確認方法:** [ログ・データの確認方法]
**合否判定:** [ ] PASS / [ ] FAIL

---

## 境界系シナリオ

### S-05:[上限値・下限値のテスト]
**目的:** [限界値での動作を確認する]
**前提条件:** [上限ちょうどのデータを用意する]
**実行手順:**
1. [上限値のデータで操作する]
**期待結果:** [正常に処理される / 適切な警告が出る]
**確認方法:** [結果の確認方法]
**合否判定:** [ ] PASS / [ ] FAIL

---

## テスト結果サマリー

| シナリオID | 種類 | 結果 | 実行日 | 備考 |
|---|---|---|---|---|
| S-01 | 正常系 | [ ]PASS / [ ]FAIL | | |
| S-02 | 正常系 | [ ]PASS / [ ]FAIL | | |
| S-03 | 異常系 | [ ]PASS / [ ]FAIL | | |
| S-04 | 異常系 | [ ]PASS / [ ]FAIL | | |
| S-05 | 境界系 | [ ]PASS / [ ]FAIL | | |

---

## RYGゲート判定

- **Green(完了可):** 全シナリオ PASS
- **Yellow(要確認):** 境界系のみ FAIL、正常系・異常系は全 PASS
- **Red(完了不可):** 正常系または異常系に 1 件でも FAIL

**現在の判定:** [ ] Green / [ ] Yellow / [ ] Red

4. Claude Code への指示テンプレート(コピペで使える)

E2Eシナリオ作成を依頼する指示

以下の条件でE2E_TEST_SCENARIOS.mdを作成してください。

プロジェクト:[プロジェクト名]
目的:[何を作るか・1文]
主な機能:
  - [機能1]
  - [機能2]
外部サービス:[使用するAPI・サービス名]

条件:
- 正常系シナリオを最低3つ作成すること
- 異常系シナリオを最低2つ作成すること(外部API障害を必ず含めること)
- 境界系シナリオを最低1つ作成すること
- 確認方法は「人間が目で見て確認できる」レベルで書くこと
- 本番データ・本番環境への接続は禁止と明記すること
- テンプレートは /docs/tests/E2E_TEST_SCENARIOS.md に保存すること

E2Eテスト実行を依頼する指示

E2E_TEST_SCENARIOS.md のシナリオを実行してください。

実行条件(必ず守ること):
- テスト用アカウント([テスト用アカウント情報])を使用すること
- 本番データベース・本番APIには接続しないこと
- dry-run モードを使用すること(該当する場合)
- 各シナリオの結果をPASS/FAILで記録すること
- FAILの場合は原因を3行以内で記述すること
- 全シナリオ完了後にRYGゲート判定を行うこと

実行するシナリオ:[S-01, S-02, S-03 / または「全シナリオ」]

FAILシナリオの修正を依頼する指示

E2E_TEST_SCENARIOS.md の以下のシナリオがFAILしました。

FAILシナリオ:[S-03]
FAIL内容:[記録されていた原因]

以下の条件で修正してください:
- CONSTRAINTS.md の禁止事項を守ること
- FEATURE_LIST.md のスコープ外の修正は行わないこと
- 修正後に同じシナリオを再実行してPASS/FAILを記録すること
- 修正内容をPROGRESS.mdに記録すること

5. プロジェクト別 E2E シナリオの例

例①:Substack 自動投稿システム

シナリオID 種類 内容
S-01 正常系 記事を生成して下書き保存し、テスト用アカウントで確認できる
S-02 正常系 スケジュール投稿が設定した時刻に実行される
S-03 正常系 投稿完了後にSlack通知が届く
S-04 異常系 Substack APIが落ちているとき、エラーログに記録されデータが失われない
S-05 異常系 認証トークンが無効なとき、適切なエラーメッセージが出る
S-06 境界系 文字数が上限(50,000文字)のとき、正常に処理されるか警告が出る

例②:note 自動投稿システム

シナリオID 種類 内容
S-01 正常系 記事を生成してnoteの下書きとして保存される
S-02 正常系 画像付き記事が正しく投稿される
S-03 異常系 note APIが落ちているとき、リトライ処理が動く
S-04 異常系 重複投稿を検知して二重送信を防ぐ
S-05 境界系 タイトルが最大文字数のとき正常に処理される

例③:メルマガ自動配信システム

シナリオID 種類 内容
S-01 正常系 テスト用メールアドレスにメルマガが届く
S-02 正常系 配信停止リストの読者には送信されない
S-03 異常系 メールサーバーが落ちているとき、キューに積まれて後で再送される
S-04 異常系 無効なメールアドレスが含まれていても他の配信は継続される
S-05 境界系 配信リストが10,000件のとき、タイムアウトせずに完了する

6. E2Eテストを「汎用的に」運用するための3つのルール

ルール1:テンプレートは変えない、中身だけ変える
E2E_TEST_SCENARIOS.md のテンプレート構造(5項目・3種類・RYGゲート)はすべてのプロジェクトで同じにする。プロジェクトごとに変えるのはシナリオの内容だけ。

ルール2:「確認方法」に具体的な場所を必ず書く
「確認する」だけでは不十分。「どのファイルの何行目を見るか」「どのURLにアクセスするか」「どのメールアドレスの受信箱を見るか」まで書く。

ルール3:E2Eテストの結果はPROGRESS.mdに必ず記録する
テスト結果は E2E_TEST_SCENARIOS.md 内に記録するとともに、PROGRESS.md にも「E2Eテスト実行:全6シナリオ中5PASS/1FAIL」のように記録する。セッションが切れても状態が復元できる。


References

↑ トップへ戻る