実装

Phase 4–6 コア・アプリ・共通作業。

Phase 4〜6 — コア → アプリ → 共通作業 の順で実装する。

やること

  1. Phase 4 でコア
  2. 必要なら Phase 5 アプリ層
  3. Phase 6 でテスト・運用を揃える

完了: 関連テストが green、完了条件を満たした

Plan + docs を冒頭で AI に渡す。完了 → Phase 5

Phase 4 はコアロジック(ビジネスルールが集中する部分)を実装する段階です。命名やディレクトリは 02_design.md と rules に合わせます。DDD なら domain 層、Vertical Slice なら feature 単位、などプロジェクト次第です。

Phase 1 のルールは毎回 AI に渡し、既存パターンから外れないようにします。厳格な TDD を標準にしているチームだけ、下の 10.2 テンプレを使います。それ以外は「テストを足しながら実装」+レビュー・CI で足りることが多いです。

TDD サイクル(概要)

エージェント TDD 5 ステップ(公式)

出典: Cursor BP。チームが TDD を採用するときの Agent 依頼順。

  1. 期待入出力付きテストだけを書かせる(実装はまだ書かない)
  2. テスト実行 → 失敗を確認(RED)
  3. テストをコミット
  4. テストを変えずに通る実装を書かせ、green まで反復(GREEN)
  5. 満足したら実装をコミット · Refactor は時間があれば

Done when を Plan / tasks/todo.md に書く。検証は 18-4-verify

1 モジュールあたりの典型的なループは次のとおりです。

sequenceDiagram participant Dev as 開発者 participant AI as AI participant Test as テスト loop TDDサイクル Dev->>AI: RED プロンプト AI-->>Test: 失敗テスト追加 Test-->>Dev: fail 確認 Dev->>AI: GREEN プロンプト AI-->>Test: 最小実装 Test-->>Dev: pass 確認 Dev->>AI: REFACTOR プロンプト AI-->>Test: 設計改善(振る舞い不変) Test-->>Dev: pass 維持 Dev->>Dev: コミット end

各フェーズで AI に何を頼み、いつ完了とするかは次の表にまとめています。

フェーズAI への依頼完了条件
RED失敗テストのみ書く対象テストが fail
GREEN最小実装対象テストが pass
REFACTOR振る舞いを変えず改善全テスト pass

対象洗い出し

設計 docs が揃ったあと、まだコードを書かない段階で次のプロンプトを送ります。Inside-out(内側から外へ)で進める前提です。

コアロジックを Inside-out で実装します(TDD 採用時)。実装はまだしません。
お題と設計 (docs/<feature-name>/02_design.md) から、Phase 4 で実装すべき
モジュール/コンポーネントを、依存関係順に列挙してください。

【出力】
1. 実装順序リスト
2. 各対象について
   - 責務 (1行)
   - 主要不変条件 / ビジネスルール
   - 想定テストケース 3〜5個 (正常/境界/異常)
3. TDDサイクル合計数の見積もり(TDD 採用時)
4. 既存モジュールとの関係 (再利用 / 拡張 / 新規)

実装/テストコードはまだ書かないでください。

TDDテンプレ(任意)

チームが Inside-out TDD を標準にしているときの、1 サイクル分のテンプレです。ルールと 02_design.md をコンテキストに含めてください。

サイクルごとにチャットを分けると履歴が追いやすいです — サイクルごとにチャットを分けると履歴が追いやすいです。「Cycle 2: OrderTotal」のように対象名をプロンプト先頭に書き、RED のあとローカルで fail を確認してから GREEN に進む。

RED

まず失敗するテストだけを追加します。実装ファイルは触りません。

=== TDD Cycle N: <対象> ===

【RED】
以下のテストを tests/unit/<module>/test_<対象>.py に書いてください。
実装ファイルは触らないでください。
(パスはプロジェクトのテスト配置規約に合わせて読み替える)

対象: <対象>
責務: <責務>

テストケース (今サイクル):
1. test_<条件1>_<期待結果1>
2. test_<条件2>_<期待結果2>
3. test_<条件3>_<期待結果3>

要件:
- Arrange-Act-Assert を明確に分ける
- 既存テストヘルパ/フィクスチャがあれば再利用
- 1ケースだけ実行可能な命名

出力後、テスト実行で全件failする想定であることを宣言してください。

GREEN

テストを通す最小の実装だけを書きます。

【GREEN】
上記テストを通す最小実装を src/<module>/<対象>.py に書いてください。
(パスは 02_design.md のモジュール構成に合わせる)
ルール:
- 過度な抽象化禁止
- 未使用フィールド/メソッド禁止
- 将来用パラメータ禁止
- プロジェクト rules(.cursor/rules/ / CLAUDE.md 等)を遵守
- 既存コードの設計パターンに揃える

出力後、全件pass想定であることを宣言してください。

REFACTOR

テストはそのまま、設計だけを整えます。新規テストの追加はしません。

【REFACTOR】
テストは全て保ったまま設計改善してください。
観点:
- 不変条件を型・小さな関数に閉じ込められるか
- 計算ロジックが再利用可能な private メソッドに切り出せるか
- 例外メッセージに業務情報を含められるか
- 既存の共通ユーティリティに置き換えられるか

【制約】
- 新規テスト追加禁止
- 振る舞いを変えない
- 採用する改善は3つ以内
- 改善後のdiffと理由を最後にまとめる

REFACTOR で private メソッドを 2 つ増やしたら、diff 末尾に「… — REFACTOR で private メソッドを 2 つ増やしたら、diff 末尾に「① 境界チェック共通化 ② 丸め処理分離」と理由を 3 行で書かせる。テスト追加は禁止のまま全件 pass を再確認する。

各サイクル後のコミット

NOTE: git add / git commit はユーザー明示許可後に実行(強制確認ルール)。以下はコミットメッセージ例です。

テストの pass/fail を確認したあと、リポジトリのルールに従いコミットします(操作確認が必要な環境では、許可を得てから実行)。

git add . && git commit -m "[RED] add failing tests for <対象>"
git add . && git commit -m "[GREEN] implement <対象>"
git add . && git commit -m "[REFACTOR] <改善点>"


Phase 4 の設計 docs に沿う。完了 → Phase 6

Phase 5 では、Phase 4 で固めたコアを使うアプリ層・インタフェースを実装します。ユースケース単位で進めるのが基本です。

層の役割とテスト

次はレイヤード / ユースケース駆動の例です。Vertical Slice など別構成なら 02_design.md のモジュール名に読み替えてください。恒久ルール(rules)と設計 docs の境界は守ります。

層の依存関係は、だいたい次のイメージです。

flowchart TD IF[interface 層] --> APP[application 層] APP --> DOM[domain 層] APP --> INF[infrastructure 層] INF -.->|Repository 実装| APP DOM -.->|不変条件| APP

各層の責務と、どこでテストするかは次の表のとおりです。

責務テスト方針
applicationユースケース 運用依存を Protocol でモック
domain業務ルール・不変条件Phase 4 で単体済み
infrastructure永続化・外部 APIPhase 6 で結合
interfaceHTTP / CLI 等E2E / 結合

ユースケース実装プロンプト

Phase 4 のコアが通ったあと、軽量 TDD を採用するチーム向けのプロンプト例です。対象ユースケース名を埋めてから貼り付けます。

ユースケース単位で実装します。チームが TDD する場合は RED→GREEN を基本とし、Refactorは時間あれば。

対象: <UseCase名>
=== RED ===
tests/unit/application/test_<usecase>.py に3〜5ケース:
1. ハッピーパス
2. 主要な業務エラー (バリデーション違反 等)
3. 主要な技術エラー (外部依存失敗 等)

依存 (Repository, ExternalService 等) は Protocol/Interface で定義し
モックで差し替え可能に。既存の依存定義パターンに合わせる。

=== GREEN ===
src/application/<usecase>.py で最小実装。
Repository等は Protocol のみ定義、実体はインフラ層で別途実装。


共通作業は初期 + 必要時。完了 → Phase 7

Phase 6 は、機能の「全体共通」要素をまとめて足す段階です。テスト・ログ・インフラ・API 定義・デプロイ手順など、1 ユースケースだけでは片付かないものをここで揃えます。

共通作業の範囲

新規プロジェクトの初期は共通作業一式を用意します。既存プロジェクトへの機能追加では、影響のあるカテゴリだけ更新します。

カテゴリごとの成果物は次の表にまとめています。

カテゴリ成果物新規 / 差分
テスト05_test_plan.md / integration / e2e機能追加時は差分
ログ06_logging.md + 業務イベントログ新規エンドポイントは差分
メトリクスlatency / error rate既存基盤に追従
インフラRepository 実装 / マイグレーションDB 変更時
IFOpenAPI / Schema 更新API 変更時
デプロイ07_deployment.md / 環境変数新規は全文、既存は差分

一括プロンプト

貼り付けタイミング:コアとユースケースの単体が通り、手元で主要パスを確認したあと。リポジトリのログルール(.cursor/rules/CLAUDE.md)をコンテキストに含めた状態で送ってください。

横断的事項を一括で追加してください。

【テスト】
- docs/<feature-name>/05_test_plan.md (戦略・カバレッジ・観点表)
- tests/integration/: 結合テスト (実DB / 実外部依存)
- tests/e2e/: API経由のハッピーパス + 主要異常系

【ログ】
- docs/<feature-name>/06_logging.md (.cursor/rules/40-logging.mdc / CLAUDE.md のログ方針に準拠)
- 既存ロガーを再利用 (新規プロジェクトのみ実装)
- 業務イベント (作成/更新/削除/状態遷移) にログを差し込む

【メトリクス・トレース】
- 既存基盤に従う (Datadog/OpenTelemetry/Prometheus等)
- 新規エンドポイントの latency / error rate を追加

【インフラ実装】
- src/infrastructure/repositories/ 配下に永続化実装
- 既存マイグレーションツール (Alembic/Flyway/Knex等) でファイル生成

【インタフェース実装】
- 既存ルータ/コントローラ規約に従う
- OpenAPI/Schema更新

【デプロイ】
- 新規プロジェクト時のみ docs/<feature-name>/07_deployment.md を生成
- 既存プロジェクトは差分のみ追記:
  - 環境変数追加
  - マイグレーション手順
  - 機能フラグ (gradual rollout)
  - ロールバック手順

変更ファイルのリストを最後に出してください。