ttyfkyttyfky

AI-DLC を進めるためのプロンプトと出力の例

2025-12-05

はじめに

AI-DLC の概要とチーム開発における適用例 では AI-DLC の基本概念とチーム開発での想定フローについて説明しました。 本記事では、AI-DLC の各ステップにおいて使い勝手の良いプロンプト例と、その結果得られたアウトプットを紹介します。

SDD(Spec-Driven Development)の実行をサポートするツールとして、Kiro や spec-kit などがあります。 テンプレートを用意し、それに沿った情報を提供することで、AI エージェントが期待に沿ったアウトプットを生成しやすくなります (別の言い方をするとテンプレートが期待値として設定される)。

一方で、プロジェクトの立ち上げと、単一機能の追加開発では、必要な情報やアウトプットの粒度が異なります。 場合に応じての調整が柔軟に行えたほうが良いため、今回はプロンプトベースでの実行例を紹介します。

AI-DLC のプロンプト例

Inception フェーズ

Inception フェーズのゴールは、Construction フェーズにおける開発時に参照する明確な要件定義を得ることです。 必要な情報は人間が情報整理するときと同様ですが、アウトプットのフォーマットを今後の利用しやすい形に指定します。 このとき、コンテキスト効率や並行作業性を考慮して、ユーザーストーリーのユニット化、ファイル単位での分割を意識します。

目的がサービス立ち上げなのか、特定機能の追加・変更なのか、で生成物の粒度も異なりますが、基本的には立ち上げに用いたアウトプットを 更新、もしくは同様のフォーマットで新たに作成される形になります。

ここでの結果は Claude Code (主に Sonnet 4.5) の出力を基にしています。

ユーザーストーリーの作成

プロンプト:

プロダクトマネージャーとして明確に定義されたユーザーストーリーを作成する。

今後の作業の計画を立て、各ステップにチェックボックスを設けたファイルを(docs/inception/user_stories/plan.md)に記述せよ。
いずれかのステップで私の説明が必要な場合は、[Q]タグを付けて質問を追加し、私が回答を記入するための空の[A]タグを作成せよ。重要な決定を独自に行わないこと。
計画が完了したら、私のレビューと承認を求めること。
承認後、同じ計画を一つずつ実行できる。各ステップが完了したら、プランのチェックボックスに完了印を付けよ。

タスク: 中古スマホを取り扱うECシステムの構築。

docs/inception/user_stories/user_stories.md にユーザーストーリーを記述せよ。
ユーザーストーリーのみに焦点を当て、それ以外は含めないこと。

このプロンプトにより、次のような計画が生成されました。 このplan.mdの質問に答えたうえで、user_stories.mdにユーザーストーリー(US)を記述する流れとなります。


ユーザーストーリー作成計画(docs/inception/user_stories/plan.md)
# ユーザーストーリー作成計画

## タスク概要
中古スマホを取り扱うECシステムのユーザーストーリーを作成する

## 実行ステップ

### フェーズ1: 要件確認と主要ユーザー定義
- [ ] 1. ビジネス目標と対象ユーザーの確認
  - [Q] このECシステムの主要なビジネス目標は何ですか?(例: 個人間取引、B2C、C2B買取など)
  - [A]
  - [Q] 想定している主要なユーザーペルソナは?(例: 買い手のみ、売り手のみ、両方)
  - [A]

- [ ] 2. システムの基本機能範囲の確認
  - [Q] 以下の機能のうち、初期スコープに含めるものはどれですか?
    - 商品検索・閲覧
    - 購入機能(カート、決済)
    - 出品機能(個人が中古スマホを出品)
    - 買取機能(企業が買取)
    - レビュー・評価機能
    - メッセージング機能
  - [A]
  - [Q] 決済方法は?(クレジットカード、銀行振込、代引き、キャリア決済など)
  - [A]

### フェーズ2: 商品関連の詳細確認
- [ ] 3. 商品情報と品質管理
  - [Q] 中古スマホの品質基準や等級分類は必要ですか?(例: S/A/B/Cランク、傷の程度など)
  - [A]
  - [Q] 商品の保証や返品ポリシーは?
  - [A]

### フェーズ3: ユーザーストーリー作成
- [ ] 4. 買い手視点のユーザーストーリー作成
- [ ] 5. 売り手視点のユーザーストーリー作成(該当する場合)
- [ ] 6. 管理者視点のユーザーストーリー作成

### フェーズ4: レビューと完成
- [ ] 7. ユーザーストーリーのレビューと調整
- [ ] 8. user_stories.mdへの最終記述

---

## 次のアクション
上記の質問に回答いただければ、適切なユーザーストーリーを作成できます。
計画の承認をお願いします。

ここでは、簡単のために商品検索・購入のみに絞り、買い手視点の US のみを例示します。


買い手視点のユーザーストーリー(docs/inception/user_stories/user_stories.md)
# ユーザーストーリー: 中古スマホECシステム

## 買い手視点のユーザーストーリー

### 商品検索・閲覧

#### US-001: 商品一覧の閲覧
**As a** 買い手
**I want to** 中古スマホの一覧を閲覧したい
**So that** 購入可能な商品を把握できる

**受け入れ基準:**
- 商品一覧ページにアクセスできる
- 各商品の基本情報(画像、機種名、価格、ランク)が表示される
- 在庫切れ商品は明確に区別される

#### US-002: 商品の検索
**As a** 買い手
**I want to** 特定の条件で中古スマホを検索したい
**So that** 希望に合った商品を効率的に見つけられる

**受け入れ基準:**
- キーワードで商品を検索できる
- メーカー、機種名、価格帯で絞り込みできる
- 品質ランク(S/A/B/C)で絞り込みできる
- 検索結果が適切に表示される

〜(略)〜

### 購入プロセス

#### US-005: カートへの追加
**As a** 買い手
**I want to** 商品をカートに追加したい
**So that** 後でまとめて購入手続きができる

**受け入れ基準:**
- 商品詳細ページからカートに追加できる
- カート追加後、確認メッセージが表示される
- カート内の商品数が確認できる

#### US-006: カートの管理
**As a** 買い手
**I want to** カート内の商品を管理したい
**So that** 購入前に内容を調整できる

**受け入れ基準:**
- カート内の商品一覧が表示される
- 商品を削除できる
- 合計金額が表示される
- カートが空の場合、適切なメッセージが表示される

〜(略)〜

### 注文管理

#### US-010: 注文履歴の確認
**As a** 買い手
**I want to** 自分の注文履歴を確認したい
**So that** 過去の購入内容や配送状況を把握できる

**受け入れ基準:**
- 注文履歴ページにアクセスできる
- 注文日、注文番号、商品名、金額、ステータスが表示される
- 各注文の詳細を確認できる

#### US-011: 注文詳細の確認
**As a** 買い手
**I want to** 特定の注文の詳細を確認したい
**So that** 配送状況や注文内容を把握できる

**受け入れ基準:**
- 注文した商品の詳細が表示される
- 配送先情報が表示される
- 注文ステータス(処理中、発送済み、配送中、配達完了など)が表示される
- 配送追跡番号が表示される(発送後)

〜(略)〜

### 返品プロセス

#### US-012: 返品リクエストの作成
**As a** 買い手
**I want to** 購入後7日以内に返品リクエストを作成したい
**So that** 商品を返品できる

**受け入れ基準:**
- 注文詳細ページから返品リクエストを作成できる
- 返品理由を選択・入力できる
- 返品可能期間(7日以内)が明示される
- 返品可能期間外の場合、返品できない旨が表示される

#### US-013: 返品ステータスの確認
**As a** 買い手
**I want to** 返品リクエストのステータスを確認したい
**So that** 返品処理の進捗を把握できる

**受け入れ基準:**
- 返品リクエストの一覧が確認できる
- 返品ステータス(申請中、承認済み、返送待ち、返金処理中、完了など)が表示される
- 返品に関する指示や連絡事項が確認できる

### アカウント管理

〜(略)〜

内容は省略していますが、上記のような形でユーザーストーリーが生成されました。 中古スマホというコンテキストを与えていますが、 EC システム自体は一般的な内容なので、 かなり「それっぽい」内容が出力されています。

ユーザーストーリーのユニット分割

ユーザーストーリーを作成し、サービスとして必要そうな機能が網羅されたら、次にユニット分割を行います。

ユニット分割では、独立して構築できる複数のユニットにユーザーストーリーをグループ分けします。 この分割が、並行性向上に効いてきます。

プロンプト:

ユーザーストーリーを独立して構築できる複数のユニットにグループ分けする。

今後の作業の計画を立て、各ステップにチェックボックスを付けてmd形式のファイル(docs/inception/units/plan.md)に記述せよ。
いずれかのステップで私の説明が必要な場合は、[Q]タグを付けて質問を追加し、私が回答を記入するための空の[A]タグを作成せよ。 重要な決定を独自に行わないこと。
計画が完了したら、私のレビューと承認を求めること。承認後、同じ計画を一つずつ実行できる。
各ステップが完了したら、計画のチェックボックスに完了印を付けよ。

タスク: docs/inception/user_stories/user_stories.md ファイルのユーザーストーリーを参照し、 ユーザーストーリーを独立して構築できる複数のユニットにグループ分けせよ。
各ユニットには、単一のチームで構築できる高い凝集性を持つユーザーストーリーが含まれる。 ユニット同士は疎結合である必要がある。
各ユニットについて、それぞれのユーザーストーリーと受け入れ基準を docs/inception/units/ フォルダ以下個別の.mdファイルに記述せよ
まだ技術的なシステム設計は開始しないこと。

各ユニットの統合契約を作成し、各サービスが公開するAPIエンドポイントを記述し、docs/inception/units/integration_contract.mdファイルに記載せよ。

以下がユニット分割計画です。 作成したユーザーストーリーに基づき、ユニット分割案を提示し、質問に答えたうえで各ユニットのドキュメントと統合契約を作成する流れとなります。


ユニット分割計画(docs/inception/units/plan.md)
# ユニット分割計画

## タスク概要
docs/inception/user_stories/user_stories.mdのユーザーストーリーを、独立して構築できる複数のユニットにグループ分けし、各ユニットのドキュメントと統合契約を作成する。

## 実行ステップ

### フェーズ1: ユニット設計の確認
- [ ] 1. ユニット分割方針の確認
  - [Q] 以下のユニット分割案でよろしいでしょうか?
    - **商品カタログユニット**: 商品の検索・閲覧機能 (US-001, US-002, US-003, US-004)
    - **注文処理ユニット**: カートと注文処理機能 (US-005, US-006, US-007, US-008, US-009)
    - **注文管理ユニット**: 注文履歴と配送状況の管理 (US-010, US-011)
    - **返品管理ユニット**: 返品プロセスの管理 (US-012, US-013)
    - **ユーザー管理ユニット**: アカウントと認証機能 (US-014, US-015, US-016)
  - [A]

  - [Q] 上記のユニット分割について、変更や追加が必要な点はありますか?
  - [A]

### フェーズ2: 統合契約の設計確認
- [ ] 2. ユニット間のAPI連携の確認
  - [Q] 各ユニット間の主な連携は以下のような想定ですが、追加・変更はありますか?
    - 注文処理ユニット → 商品カタログユニット: 商品情報・在庫確認
    - 注文処理ユニット → ユーザー管理ユニット: ユーザー認証・情報取得
    - 注文管理ユニット → 注文処理ユニット: 注文データ取得
    - 返品管理ユニット → 注文管理ユニット: 注文データ取得・ステータス更新
  - [A]

### フェーズ3: ユニットドキュメントの作成
- [ ] 3. 商品カタログユニットのドキュメント作成 (docs/inception/units/product_catalog.md)
- [ ] 4. 注文処理ユニットのドキュメント作成 (docs/inception/units/order_processing.md)
- [ ] 5. 注文管理ユニットのドキュメント作成 (docs/inception/units/order_management.md)
- [ ] 6. 返品管理ユニットのドキュメント作成 (docs/inception/units/return_management.md)
- [ ] 7. ユーザー管理ユニットのドキュメント作成 (docs/inception/units/user_management.md)

### フェーズ4: 統合契約の作成
- [ ] 8. 統合契約ドキュメントの作成 (docs/inception/units/integration_contract.md)
  - 各ユニットが公開するAPIエンドポイントの定義
  - リクエスト/レスポンス形式の定義
  - エラーハンドリングの方針

### フェーズ5: レビューと完成
- [ ] 9. 全ドキュメントのレビューと調整

---

## ユニット分割の設計原則
- **高凝集性**: 各ユニットは関連性の高いユーザーストーリーで構成
- **疎結合**: ユニット間はAPIを通じてのみ連携
- **独立開発可能**: 単一のチームで完結できる単位
- **技術非依存**: この段階では技術的な実装詳細には踏み込まない

## 次のアクション
上記の質問に回答いただければ、各ユニットのドキュメントと統合契約を作成できます。
計画の承認をお願いします。

商品カタログユニット(docs/inception/units/product_catalog.md)


# 商品カタログユニット

## ユニット概要
中古スマホの商品情報を管理し、検索・閲覧機能を提供するユニット。
商品マスタデータ、在庫情報、品質ランク情報を管理する。

## 責務
- 商品情報の管理と提供
- 商品検索機能の提供
- 品質ランク基準の管理と提供
- 在庫状況の管理

## 含まれるユーザーストーリー

### US-001: 商品一覧の閲覧
**As a** 買い手
**I want to** 中古スマホの一覧を閲覧したい
**So that** 購入可能な商品を把握できる

**受け入れ基準:**
- 商品一覧ページにアクセスできる
- 各商品の基本情報(画像、機種名、価格、ランク)が表示される
- 在庫切れ商品は明確に区別される

### US-002: 商品の検索
**As a** 買い手
**I want to** 特定の条件で中古スマホを検索したい
**So that** 希望に合った商品を効率的に見つけられる

**受け入れ基準:**
- キーワードで商品を検索できる
- メーカー、機種名、価格帯で絞り込みできる
- 品質ランク(S/A/B/C)で絞り込みできる
- 検索結果が適切に表示される

〜(略)〜

上記のように、ユニットごとにドキュメントが生成されます。 ユーザーストーリーで定義された内容がユニットごとに整理され、各ユニットの責務や含まれるユーザーストーリーが明確になります。
同様に、注文処理ユニット、注文管理ユニット、返品管理ユニット、ユーザー管理ユニットのドキュメントも生成されます。 最後に、ユニット間のAPI連携を定義した統合契約ドキュメントが生成されます。


ユニット統合契約(docs/inception/units/integration_contract.md)
# ユニット統合契約

## 概要
このドキュメントは、中古スマホECシステムの各ユニット間の統合契約を定義します。
各ユニットが公開するAPIエンドポイントと、そのリクエスト/レスポンス形式を記述します。

注: この段階では技術的な実装詳細(HTTPメソッド、具体的なURL、認証方式など)には踏み込まず、
各ユニットが提供する機能とデータ構造の概要を定義します。

## ユニット依存関係図


┌─────────────────┐
│ ユーザー管理      │ (依存なし)
└────────┬────────┘
         │ 認証・ユーザー情報
         │
┌────────┴────────┐     ┌─────────────────┐
│ 商品カタログ      │     │ 注文処理         │ (依存なし)
└────────┬────────┘     └────────┬────────┘
         │ 商品情報               │ 注文データ
         │                       │
         └───────┬───────────────┘
                 │
         ┌───────┴────────┐
         │ 注文管理        │
         └───────┬────────┘
                 │ 注文データ・ステータス更新
                 │
         ┌───────┴────────┐
         │ 返品管理        │
         └────────────────┘


---

## 1. 商品カタログユニット API

### 1.1 商品一覧取得
**目的**: 商品一覧をページネーション付きで取得

**リクエストパラメータ**:
- `page`: ページ番号
- `limit`: 1ページあたりの件数
- `stockStatus`: 在庫状態フィルタ (optional) - `available` | `out_of_stock` | `all`

**レスポンス**:

{
  products: [
    {
      productId: string
      modelName: string
      manufacturer: string
      price: number
      qualityRank: 'S' | 'A' | 'B' | 'C'
      imageUrl: string
      stockStatus: 'available' | 'out_of_stock'
    }
  ],
  pagination: {
    currentPage: number
    totalPages: number
    totalItems: number
  }
}

### 1.2 商品検索
**目的**: 検索条件に基づいて商品を検索

**リクエストパラメータ**:
- `keyword`: 検索キーワード (optional)
- `manufacturer`: メーカー名 (optional)
- `priceMin`: 最低価格 (optional)
- `priceMax`: 最高価格 (optional)
- `qualityRanks`: 品質ランクの配列 (optional) - ['S', 'A', 'B', 'C']
- `page`: ページ番号
- `limit`: 1ページあたりの件数

**レスポンス**:

{
  products: [
    {
      productId: string
      modelName: string
      manufacturer: string
      price: number
      qualityRank: 'S' | 'A' | 'B' | 'C'
      imageUrl: string
      stockStatus: 'available' | 'out_of_stock'
    }
  ],
  pagination: {
    currentPage: number
    totalPages: number
    totalItems: number
  }
}

〜(略)〜

## エラーハンドリング方針

全てのAPIは以下の共通エラーレスポンス形式を使用します:

{
  error: {
    code: string
    message: string
    details: object (optional)
  }
}


### 共通エラーコード
- `AUTHENTICATION_FAILED`: 認証エラー
- `AUTHORIZATION_FAILED`: 認可エラー
- `VALIDATION_ERROR`: バリデーションエラー
- `NOT_FOUND`: リソースが見つからない
- `CONFLICT`: リソースの競合(在庫切れ等)
- `INTERNAL_ERROR`: 内部エラー

---

## データ整合性の保証

### トランザクション境界
- 各ユニットは自身のデータストアに対してのみトランザクション制御を行う
- ユニット間の整合性は結果整合性(Eventual Consistency)で保証する

### 冪等性
- 全ての更新系APIは冪等性を保証する設計とする
- リトライ時に同じリクエストを複数回実行しても安全であること

---

## 将来の拡張性

この統合契約は以下の拡張を想定した設計となっています:
- クレジットカード決済などの決済方法追加
- レビュー・評価機能の追加
- 通知機能の追加
- 管理者機能の追加

このように、統合契約ドキュメントでは、各ユニットが提供するAPIエンドポイントの概要、リクエスト/レスポンス形式、エラーハンドリング方針などが定義されます。 実務上はさらに詳細な設計が必要ですが、数分待っていると出力される内容としては十分です。 この内容をベースに、必要に応じてファイルを修正したり、AI に追加の指示・質問を行ったりして、完成度を高めていきます。

既存サービスで新たに機能を追加する場合

既存サービスに対して新たに機能を追加・変更する場合も、基本的な流れは同様です。

これまで AI-DLC で開発していなかった場合、ユーザーストーリーが AI に見える形で整理されていないことが多いため、 まずは既存の要件定義や仕様書を基にユーザーストーリーを作成します。
MCP を利用して外部のドキュメントと連携しつつ行う形もあると思いますが、私はドキュメントと実際のコード双方を参照しつつ、 これまで説明したものと同等のドキュメントを一旦作成する形を現在は取っています。

プロンプト:


あなたの役割: あなたは熟練したソフトウェアアーキテクトであり、
ユーザーストーリーを独立して構築できる複数のユニットにグループ分けする任務を担っている。

このサービスは
〜〜(サービスに対する自身の理解の説明)〜〜
と理解している。

既存のサービスの内容を理解し、 docs/inception/user_stories/user_stories.md に想定されるユーザーストーリーを記載せよ。
ユーザーストーリーのみに焦点を当て、それ以外は含めないこと。
日本語版・英語版両方作成せよ。

このように、Inception フェーズではユーザーストーリーの作成とユニット分割を通じて、明確な要件定義と開発単位を確立します。 ここで作成したユニットを都合の良い粒度でチケット化し、Construction フェーズに引き継ぎます。

サービス立ち上げ時には、ユニットが Story チケットレベルでユニット内の機能がサブチケットレベル、 既存サービスに対する追加開発の場合はユニットが Epic レベルでユニット内の機能が Story チケットレベルになる、といった形で粒度を調整します。(あえて変えないという方法もあります)

サービス立ち上げの場合は、さらにシステム全体のアーキテクチャ設計や技術選定も行いますが、今回は割愛します。

Construction フェーズ

Construction フェーズでは、Inception フェーズで定義された要件に基づき、実際のコードを生成・テスト・統合します。

開発方針は会社やチームによって異なるため、ポリシーに従って調整する形になるでしょう。

全体の流れとしては次のとおりです。

  1. 論理設計
    • 各ユニットの技術的な設計を行う
    • データモデル、API仕様、インフラ構成などを定義する
  2. ExecPlan
    • 各ユニットの開発計画を立てる
    • タスク分割、スケジュール、リソース割り当てを行う
  3. コーディング
    • 各ユニットのコードを生成する
    • ユニットテスト、コードレビューを実施する
  4. 統合テスト
    • ユニット間の連携をテストする
    • システム全体の動作確認を行う

論理設計

論理設計は、(実装方法は一旦置いておいて)システムとしてどうあるべきかを定義するステップです。

  • 「『ユーザー名』と『ID』と『メールアドレス』が必要だよね」
  • 「1人のユーザーは、複数の注文履歴を持てるようにしよう(リレーション)」

というような情報を定義します。

このフェーズでは次のような内容を定義したうえで、実装に引き継ぎます。

  1. データモデリング
    • ドメインモデル
    • ER モデル
  2. 機能・処理の設計
    • API 仕様
    • ビジネスロジック設計
    • 必要なバリデーション
    • イベント設計
    • エラーハンドリング設計
  3. インフラ設計
  4. セキュリティの考慮事項
  5. 画面・UI 設計(必要な場合)
    • 画面遷移の想定

「コーディングエージェントのアウトプットの質が悪い」という場合、 このフェーズで伝えるべき内容が不足していることが多いです。

プロンプト例:

ドメイン駆動設計のドメインモデルに従って、論理設計を作成したい。

今後の作業の計画を立て、各ステップにチェックボックスを付けてmd形式のファイル(docs/construction/logical_design/plan.md)に記述せよ。
いずれかのステップで私の説明が必要な場合は、[Q]タグを付けて質問を追加し、私が回答を記入するための空の[A]タグを作成せよ。重要な決定を独自に行わないこと。
計画が完了したら、私のレビューと承認を求めよ。承認後、同じ計画を一つずつ実行できる。
各ステップが完了したら、計画のチェックボックスに完了印を付けよ。

タスク: ソフトウェアソースコード実装のための論理設計を生成する。設計文書を docs/construction/{ユニット名}/design.md ファイルに記述せよ。
ユニットの詳細は docs/inception/units/{ユニット名}.md ファイル、及び integration_contract.md ファイルを参照せよ。

コードスニペットは生成しないこと。

商品カタログユニットの論理設計作成計画(docs/construction/logical_design/product_catalog/design.md)

# 論理設計作成計画

## タスク概要
ドメイン駆動設計(DDD)のドメインモデルに従って、商品カタログユニット(product_catalog)の論理設計を作成する。
ソースコード実装のための詳細な設計文書を生成し、docs/construction/product_catalog/logical_design.mdに記述する。

## 実行ステップ

### フェーズ1: 設計方針の確認
- [ ] 1. アーキテクチャパターンと技術スタックの確認
  - [Q] 実装に使用する主要な技術スタックは何ですか?
    - プログラミング言語(例: TypeScript, Java, Python, Go等)
    - フレームワーク(例: Express, NestJS, Spring Boot, FastAPI等)
    - データベース(例: PostgreSQL, MySQL, MongoDB等)
  - [A]

  - [Q] DDDの実装において、採用するアーキテクチャパターンは?
    - レイヤードアーキテクチャ(Layered Architecture)
    - ヘキサゴナルアーキテクチャ(Ports & Adapters)
    - クリーンアーキテクチャ
    - その他
  - [A]

  - [Q] ORMやデータマッピングツールを使用しますか?
    - 使用する場合: 何を使用しますか?(例: TypeORM, Prisma, JPA/Hibernate, SQLAlchemy等)
    - 使用しない場合: SQLを直接使用しますか?
  - [A]

### フェーズ2: DDDコンポーネントの設計確認
- [ ] 2. ドメインモデルの境界と責務の確認
  - [Q] 商品カタログの境界付けられたコンテキスト(Bounded Context)の範囲は適切ですか?
    - 現在の範囲: 商品情報管理、検索、品質ランク管理、在庫管理
    - 追加・変更が必要な範囲はありますか?
  - [A]

  - [Q] 集約(Aggregate)の設計方針について:
    - 商品(Product)を集約ルートとして設計する
    - 品質ランク(QualityRank)は独立した集約として扱う
    - この方針でよろしいでしょうか?変更点はありますか?
  - [A]

- [ ] 3. ドメインイベントの要否確認
  - [Q] 以下のようなドメインイベントは必要ですか?
    - 商品登録イベント(ProductRegistered)
    - 在庫変更イベント(StockStatusChanged)
    - その他必要なイベントはありますか?
  - [A]

### フェーズ3: 論理設計ドキュメントの作成
- [ ] 4. ドメイン層の設計
  - エンティティ、値オブジェクト、集約の定義
  - ドメインサービスの定義
  - リポジトリインターフェースの定義
  - ドメインイベントの定義(必要な場合)

- [ ] 5. アプリケーション層の設計
  - ユースケース/アプリケーションサービスの定義
  - DTOの定義
  - アプリケーション層のインターフェース定義

- [ ] 6. インフラストラクチャ層の設計
  - リポジトリ実装の設計
  - データモデル(テーブル設計)
  - 外部インターフェース実装の設計

- [ ] 7. プレゼンテーション層の設計
  - API エンドポイントの設計
  - リクエスト/レスポンスモデルの定義
  - バリデーション設計

### フェーズ4: レビューと完成
- [ ] 8. 設計ドキュメントの整合性確認
  - ユーザーストーリーとの対応確認
  - 統合契約との整合性確認
  - DDD原則への準拠確認

- [ ] 9. 最終レビューと調整

---

## 設計原則
- **ドメイン駆動設計(DDD)**: ビジネスロジックをドメイン層に集約
- **単一責任の原則**: 各コンポーネントは明確な責務を持つ
- **依存性逆転の原則**: 抽象に依存し、具象に依存しない
- **テスタビリティ**: 単体テスト可能な設計
- **保守性**: 変更に強い設計

## 次のアクション
上記の質問に回答いただければ、商品カタログユニットの論理設計を作成できます。
計画の承認をお願いします。

このように、論理設計の作成計画を立て、各ユニットの論理設計ドキュメントを生成します。 今回はここで技術スタックやアーキテクチャパターンを確認する質問が入っていますが、 Inception 時点で確認されたこともあります。

今回はここでドメインモデルについての質問が来ていますが、 DDD で行いたい場合、 全体的な論理設計を行う前にドメインモデルを事前に詰めておき、論理設計時に参照させる形のほうが、意図通りのアウトプットが得られやすいです。

実装

実装フェーズはこれまでに整理した要件をコードで表現する作業となります。 ドキュメントの上から逐次的に実装するのか、TDD で行うのか、などチームが運用しやすい方法で進めます。

私は実装を次の形で進めます。

  1. ユニットごとに論理設計から実行計画の ToDo リストを作成する
  2. 進捗を記録を残し、定期的にレビューを行う
  3. 開発の過程で変更や新たな発見があった場合には、Inception フェーズで生成したドキュメントを適宜更新する

AI-DLC の流れに従って計画を進めると、このフェーズではやりたいことは既に(人間だけで行うより細かく)言語化されているため、 機能自体の実装をまずは全体的に行い、依存関係が期待通りになっているかなど細かいレビューを後から行う形を取ることが多いです。

実行計画の ToDo リストは、OpenAI の Using PLANS.md for multi-hour problem solving という記事を参考に、 ExecPlan を作成する形で進めています。

おわりに

今回は AI-DLC を進めるためのプロンプトの例と、その実行結果のイメージを紹介しました。 重要なポイントは AI-DLC の概要とチーム開発における適用例 で触れた内容であるため、 実際の細かい制御や進行はチームや個人の事情に合わせてカスタマイズしたら良いと思いますが、 特に AI-DLC の概観が掴めていない場合は、今回紹介したプロンプト例が参考になれば幸いです。

Belong、もしくはアメリカ側法人である We Sell Cellular で共に AI-DLC を活用した開発を進めてみたいという方がいらっしゃったら、 ぜひキャリアページ をご確認していただければ幸いです。

No table of contents available for this content