# AIエージェント×テスト駆動開発フロー

## AIコーディング時代の効率的TDDアプローチ

テスト駆動開発（TDD）は優れた開発手法ですが、AIツールの進化によって、より効率的で創造的なプロセスに進化できます。最近個人的に試しているTDDフローを紹介します。

## なぜAIとTDDを組み合わせるのか

AIコーディングツールの台頭により、コード生成は驚くほど容易になりました。しかし、AIが生成するコードが本当に「正しい」かどうかを確認する仕組みが必要です。[テスト駆動開発（TDD）](https://martinfowler.com/bliki/TestDrivenDevelopment.html)はここで重要な役割を果たします。

1. **明確なゴール設定**: TDDでは「こうあるべき」を先に明確に定義し、その目標に向かって実装を収束させていきます。AIにとって明確な目標があると生成の質が向上します。

2. **客観的な評価基準**: テストが通るかどうかという客観的基準によって、AIの生成したコードを評価できます。

3. **制御された反復**: AIは多くの可能性を提示できますが、TDDのサイクルによってその探索範囲を効果的に制限できます。

## なぜGherkinを使うのか

[Gherkin](https://cucumber.io/docs/gherkin/reference/)は「Given-When-Then」形式の[振る舞い駆動開発（BDD）](https://dannorth.net/introducing-bdd/)で使われる記法ですが、AI時代にはさらに重要な役割を果たします。

1. **自然言語でのインターフェース**: Gherkinは技術的な詳細と自然言語をつなぐ橋渡しの役割をします。AIとの対話から自然に生まれる要件を構造化された形式に変換できます。

2. **AI対話のアウトプット整理**: AIとのブレインストーミングから得られた知見を、構造化された形で整理できます。

3. **テストコード実装へのクリアなインプット**: Gherkin形式で記述された仕様は、AIがテストコードに変換しやすい形式になっています。

4. **ステークホルダー間の共通言語**: 技術者でない人にも理解しやすい形式で要件を表現できるため、チーム全体での合意形成が容易になります。

## 機能‐シナリオ逐次追加型TDD

この手法の特徴は、機能単位での開発スコープを定め、その中の各シナリオを１つずつAIと共同で実装していくことです。

### 全体構造

1. **機能を1つ選定**（ブランチでの開発スコープ）
2. その機能内のシナリオを1本ずつ追加しながら「AI協働→Red→Green→リファクタ」のTDDループを回す
3. 機能内の全シナリオがGreenになったら機能完了
4. 次の機能へ進み、同じプロセスを繰り返す

### プロセスフロー図

```mermaid
flowchart TD
    Start([開始]) --> SelectFeature[機能を選定]
    SelectFeature --> CreateScenario[シナリオを共同策定Gherkin形式]
    CreateScenario --> TestDesign[テスト設計AI提案→人間承認]
    TestDesign --> TestImpl[テスト実装Red状態]
    TestImpl --> MinImpl[最小限の実装AI提案→人間承認]
    MinImpl --> Refactor[リファクタリングAI提案→人間承認]
    Refactor --> MoreScenarios{同機能の別シナリオ?}
    MoreScenarios -->|Yes| CreateScenario
    MoreScenarios -->|No| FeatureDone[機能完了]
    FeatureDone --> MoreFeatures{別の機能?}
    MoreFeatures -->|Yes| SelectFeature
    MoreFeatures -->|No| End([終了])
```

### 実際のワークフロー例

```
── 機能A ──────────────────────
  シナリオ①
    1. Gherkinシナリオを人間とAIで共同策定
    2. AIがテスト設計提案→人間が承認
    3. AIがテスト実装(Red)→人間が承認
    4. AIが最小実装提案→人間が承認
    5. AIがリファクタ提案→人間が承認
  ─── 完了 ───
  
  シナリオ②
    (同様に進める)
  ─── 完了 ───
  
  機能Aの全シナリオ完了
── 機能A 完了 ──────────────────

── 機能B ──────────────────────
  (同様に進める)
──────────────────────────────
```

## TDDループの詳細ステップ

### 1. Gherkin形式でシナリオを共同策定
- 人間が要件を説明し、AIと対話
- 小さく切り出された振る舞い仕様を[Gherkin形式](https://cucumber.io/docs/gherkin/reference/)で表現
- 人間が最終承認

```gherkin
# Gherkin例
Feature: ユーザーアカウント管理
  
  Scenario: 有効なユーザー登録
    Given ユーザーが登録フォームを開いている
    When 有効なメールアドレスとパスワードを入力して送信する
    Then システムはユーザーを登録して確認メールを送信する
    And ユーザーは成功メッセージを受け取る
```

### 2. テスト設計（AI協働）
- 承認されたGherkinシナリオをもとにAIがテストコードを提案
- 人間がレビュー・承認

### 3. テストコード実装（Red）
- AIが承認されたテスト案を実装
- 人間が最終確認・承認
- この時点ではテストが失敗する状態

### 4. 必要最小限の実装
- AIがテストを通すための最小限のコードを提案
- 人間が実装内容をレビュー・承認

### 5. リファクタリング
- AIがコード改善案を提案
- 人間がリファクタリング内容をレビュー・承認

## このアプローチの利点

- **開発速度の向上**: AIが実装を担い、人間はレビューと承認に集中
- **品質の維持**: [テスト駆動開発](https://martinfowler.com/bliki/TestDrivenDevelopment.html)による品質担保とAIの提案を人間が検証
- **創造的な対話**: AIとの対話を通じて新たな視点や解決策を発見
- **学習効果**: AIの提案から新しい実装パターンを学ぶ機会

## AIとの効果的な協働のポイント

- **明確な要件伝達**: AIにコンテキストと目的をしっかり伝える
- **段階的な承認**: 各ステップで確認と修正を重ねる
- **フィードバックの具体性**: AIへの修正依頼は具体的に行う
- **バランス感覚**: AIに任せる部分と人間が判断する部分を適切に分ける

## 参考資料

- [Kent Beck著「テスト駆動開発」](https://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA-Kent-Beck/dp/4274217884) - TDDの基本概念と実践方法について詳述された古典的名著
- [和田卓人氏のツイート](https://x.com/t_wada/status/1922110843270885789)