🉐
AI駆動で開発するときに重要なこと(設計と考え方)
問題:AI開発における「8割の罠」
AI駆動開発で最も注意すべきは、AIにいかに良い成果物を作らせるかではなく、AIにいかに既存の良い実装を破壊させないかである。
典型的な悪循環
- AIに開発を指示
- 成果物の8割は良い感じ、残りの2割に問題あり
- 2割の改善を指示
- 問題の2割は改善するが、元々良かった8割の一部が改変・破壊される
- 結果、全体の完成度は8割から進歩しない
この「部分最適化による全体破壊」のループが、AI駆動開発の最大の落とし穴だ。
解決策:破壊を防ぎ、品質を向上させる4つのアプローチ
1. コンポーネント化と責務の分離
なぜ有効か:
変更の影響範囲を物理的に制限できる
実装例(MVVMパターン):
- ViewModelとViewを明確に分離
- 「View側だけ修正して」という指示でViewModel側の破壊を防げる
- ViewModelに「何を表示する画面か」というコンテキストが残る
- 結果、AIは必要な文脈を理解しつつ、指定範囲内でのみ変更を行う
より細かくコンポーネント化するという手法も有効なケースがあるだろう。
2. テスト駆動開発(TDD)の活用
なぜ有効か:
「良い部分」を自動的に保護できる
実装方法:
- 既存の良い実装をテストケースとして定義
- AIへの指示:「これらのテストを壊さずに、新機能のテストを満たせ」
- 回帰テストがAIの破壊的変更を即座に検出
- 品質の後退を防ぎながら前進できる
3. 段階的リファクタリング戦略
なぜ有効か:
一度の変更量を制限し、リスクを最小化
実装方法:
- 8割→8.5割→9割と小刻みに改善
- 各段階で「変更可能な箇所」を明示的に指定
- 例:「getUserName()メソッドのみ修正、他は変更禁止」
- 小さな成功を積み重ねて全体を改善
AIモデル選択のコツ:
「他は変更禁止」のような制約的な指示は、GPT-4.1のような要求に忠実なモデルが得意とする領域だ。創造性よりも正確性を重視するモデルを選ぶことで、指定範囲外への不要な変更を最小限に抑えられる。
4. 並列コンペによる最適解の選択
なぜ有効か:
複数の実装を比較し、最も品質の高いものを選択できる
実装方法:
- 同じタスクを複数のブランチで並列実行
- 各ブランチの成果物をテストやレビューで評価
- 最も成功したブランチのみを採用、他は破棄
メリット:
- 異なるアプローチを同時に試せる
- 「どの実装が最も問題が少ないか」を実際に確認してから採用
- 1つの実装が失敗しても、他の選択肢がある
実例:
# Git worktreeを使って3つの独立した作業ディレクトリを作成
git worktree add ../project-ai-attempt-1 -b ai-attempt-1
git worktree add ../project-ai-attempt-2 -b ai-attempt-2
git worktree add ../project-ai-attempt-3 -b ai-attempt-3
# 各ディレクトリで並列にAIに実装させる
# (3つのターミナルやAIセッションで同時実行可能)
cd ../project-ai-attempt-1 && # AIに実装指示
cd ../project-ai-attempt-2 && # 別のアプローチで実装指示
cd ../project-ai-attempt-3 && # さらに別のアプローチで実装指示
# 各実装のテスト結果を確認
# 最も優れた実装をメインブランチにマージ
cd ../project
git merge ai-attempt-1 # 最良の実装を選択
# 作業完了後、worktreeをクリーンアップ
git worktree remove ../project-ai-attempt-1
git worktree remove ../project-ai-attempt-2
git worktree remove ../project-ai-attempt-3
この手法は既にCodexなどで採用されており、Claude Codeのような最新のAI開発ツールでも並列実装による品質向上が実現されている。
まとめ
AI駆動開発の成功は、AIの創造力を活かしつつ、その破壊力を制御することにかかっている。
重要なのは:
- AIに「全体を良くしろ」ではなく「この範囲を良くしろ」と指示する
- 既存の良い実装を明示的に保護する仕組みを作る
- 失敗を恐れずに試せる安全な環境を用意する
これらのアプローチを組み合わせることで、「8割の罠」から脱出し、着実に100%の完成度に近づくことができる。AI開発は「いかに作るか」から「いかに守りながら改善するか」という発想の転換が必要だ。
Discussion