TDDD
(TODO Driven Development)
TDDD(TODO Driven Development)は、特定時代の生成AI環境における実務的な開発運転方法の記録です。
Contents
Why TDDD
なぜ TDDD が必要なのか
TDDD(TODO Driven Development)は、
新しい開発技法を発明するために生まれたものではない。
すでに起きてしまった変化に、開発プロセスを追いつかせるため
に生まれた。
実装の死
生成AIの登場により、
「実装を書くこと」はもはや開発の中核ではなくなった。
- コードは高速に生成される
- 品質は一定以上に揃う
- 書き直しのコストは極端に下がった
その結果、コードは 消耗品 になった。
今日書かれたコードは、
明日にはAIによって消され、書き直される前提で存在している。
それでもなお、システムは動き続けなければならない。
変わったのは「How」ではない
この変化は、
「どう書くか(How)」が変わった話ではない。
本質的に変わったのは、
「どこで止めるか(Where)」
である。
整備士は飛行機から降りる
かつてエンジニアは、
- 設計者であり
- 実装者であり
- トラブル時の整備士でもあった
つまり、飛行中も機内に同乗する存在だった。
しかし、生成AIによって実装が自動化されると、
エンジニアは次第に機内から降ろされる。
離陸前に設計と判断を済ませ、
離陸後は「触れない」ことが前提になる。
これは選択ではない。
構造的に起きている変化である。
問題は「誰が操縦しているか」ではない
よくある議論はこうだ。
- AIが操縦しているのか
- 人間が操縦しているのか
しかし、本当の問題はそこではない。
操縦桿がどこにあるか
そして
操縦の判断がどこに記録されているか
である。
コードは判断を保持できない
コードは実装を保持するが、
判断を保持しない。
- なぜこの仕様にしたのか
- なぜこの境界で止めたのか
- なぜこの例外を許したのか
それらはコメントや設計書に断片的に残るが、
コードそのものは判断の媒体にならない。
生成AI時代において、
コードに判断を預けることは危険である。
TODO は判断を保持できる
TODO は、
未来の実装に対する 判断のメッセージ である。
- ここまでやる
- ここから先はやらない
- この条件を満たす必要がある
- この点は確認が必要である
TODO は、
実装が消えても消えない。
実装が書き換わっても、
TODO に残された判断は次の実装に引き継がれる。
TDDD がやっていること
TDDD は単純である。
- 判断を TODO に集約する
- 実装は TODO を実行するだけにする
- 問題が起きたらコードではなく TODO を直す
これだけである。
なぜループなのか
生成AIは一度で正解に到達しない。人間も同じである。
だから TDDD は、
一発で完成させることを目指さない。
- TODO を作る
- 実装する
- 確認する
- TODO を更新する
判断を更新し続けるループとして開発を捉える。
なぜ境界が重要なのか
生成AIは、
境界が曖昧な場所で必ず暴れる。
- やっていいこと
- やってはいけないこと
- 今回は対象外のこと
これを明示しない限り、
AIは善意で越境する。
TDDD では、
境界を TODO の形で明示する。
境界は設計書ではなく、
実行前提の判断として TODO に置かれる。
なぜ年次版なのか
TDDD は現在のツール構成に依存している。
- 対話型生成AI
- 自動生成AI
- IDE内AI支援
これらが統合されれば、
TODO生成と実装は一体化するだろう。
その時、TDDD の形も変わる。
だからこれは永遠の理論ではない。
その年の現実に合わせた運転方法である。
TDDD が置きたいもの、置かないもの
TDDD は思想を最小に保つ。
- AIガバナンス
- 設計哲学
- 組織論
- 責任設計
これらは TDDD の外側 に置く。
それらを Loop A に載せることはできるが、
TDDD 自体はそれを強制しない。
まとめ
実装はもう主役ではない。
残るのは、
- 判断
- 境界
- 期待
TDDD は、
それらを TODO という形で未来に渡すための
最小の開発ループである。
コードが消えても、
TODO が残っていれば、
開発は続けられる。
TDDD 応用編(2026)
これは何か
このドキュメントは、TDDD を 実務で安定して回すための具体手順 を示します。
設計理論は最小限に留め、「どう使えば事故らないか」を中心に書きます。
応用編で前提にする2つの理由
設計の理由:再作成前提であることが、価値の継続につながる。
手段の理由:対話型生成AIと自動生成AIには、まだ明確な役割差がある。
TDDD 応用編は、この2点だけを前提に組み立てます。
TDDD 応用編の全体サイクル
- 対話型生成AIで TODO を作る
- 自動生成AIに TODO を実行させる
- レビューして TODO に戻す
これを繰り返します。
1. 対話型生成AIで TODO を作る
ここが 最重要工程 です。
1-1. 仕様を把握させる
- 会話で説明する
- 既存資料を貼り付ける
- 曖昧でも構わない
目的は「正解を出すこと」ではなく、前提を揃えること です。
1-2. AIが暴れてよい境界を決める
必ず次を明示します。
- 今回やること
- 今回やらないこと
- 外に影響を出してはいけない範囲
例:
- 外部 API には触らない
- DB スキーマは変更しない
- ファイル I/O は行わない
1-3. 境界内の TODO を作らせる
対話型AIに、こう頼みます。
この境界の中だけで、実装用 TODO を作ってください。
やらないことも含めて明示してください。
1-4. 必要なら YAML を出させる
- 入出力
- 状態
- 設定
コードより先に 構造だけ を YAML にします。
成果物:
todo/
├─ TODO.md
└─ schema.yaml(必要な場合)
2. 自動生成AIに TODO を実行させる
ここでは 判断させない。
2-1. 大きなシステムは「1境界1PJ」
- 境界ごとにリポジトリやフォルダを分ける
- AIが迷わないサイズにする
これは設計思想ではなく、AIの認知限界への対策です。
2-2. TODO フォルダを唯一の根拠にする
自動生成AIには、必ずこう指示します。
todo フォルダの内容のみを根拠に、xx言語で実装してください。
TODO に書かれていないことは実装しないでください。
2-3. おかしな動きが出たら「テストを TODO にする」
- コードを直させない
- 「この動作を確認するテストを作って」と頼む
例:
- [ ] 入力が None の場合に例外が出ないことを確認するテストを追加
手順:
- 本人による動作確認
- 実行する
- 期待と違う点を確認する
- 修正は次工程で行う
3. レビューと再TODO化
3-1. 可能なら別の自動生成AIでリファクタリング
- コード整理
- 重複削除
- 読みやすさ向上
※ 人間と違う観点でテストを増やすことには、あまり意味はありません。
3-2. 最初に TODO を作った対話型AIにレビューさせる
- この実装は TODO を満たしているか
- 境界を越えていないか
- 判断が足りていない部分はどこか
3-3. フィードバックはすべて TODO に戻す
- コードを直す前に TODO を直す
- 判断を固定する
- このサイクルを繰り返す
- TODO を作る
- 実装する
- 確認する
- TODO を直す
TDDD は一発完成を目指しません。
境界をつなげるテクニック(大規模化の入口)
TDDD は境界単体では小さいが、疎結合にすれば拡張できます。
使えるテクニック例:
- 境界間は「データ構造」だけで接続する
- 関数呼び出しより JSON / YAML / DTO を使う
- 直接参照しない(Adapter / Facade を挟む)
- 境界間通信は「失敗前提」で設計する
こうすると:
- 片方を捨てられる
- 再作成できる
- AIを変えられる
応用編の限界
- 人命・安全系
- 物理制御
- 法的責任が強い領域
これらには別の設計が必要です。
まとめ
- 判断は対話型AIで行う
- 実装は自動生成AIに任せる
- 境界で切り、疎結合でつなぐ
- TODO を消さない
TDDD 応用編は、再作成され続けることを前提にした実務的な開発ループです。
応用編補足:11の境界という「見えない地図」
TDDD 応用編で最も重要なのは、「どこで区切るか」 を誤らないことです。
その判断を助けるために、VCDesign / VC-AD では AIが見落としがちな「コードの外側の制約」を 11の境界 として整理しています。
これらはコード(As Code)として表現しにくく、AIが最も暴れやすい領域です。
11の境界の全体像
11の境界は、性質ごとに4つのグループに分かれます。
Group 1:変えられない前提(Context)
設計で解決しようとしてはいけない境界
- 物理・現場制約
- 組織・境界
- ガバナンス
例:
- 物理的に離れている
- 組織や責任主体が違う
- 法律や規程で決まっている
TDDDでの扱い
- TODO に「前提条件」として明示する
- 実装で解決しようとしない
- AIに「受け入れる前提」として固定する
Group 2:選ぶだけのリソース(Resource)
設計ではなく「選択」の結果で決まる境界
- 実行基盤
- ネットワーク
- プラットフォーム
例:
- クラウド / オンプレ
- レイテンシ・帯域
- マネージド / 自前
TDDDでの扱い
- 境界をまたがない単位で PJ を分ける
- TODO に「前提となる選択」を書く
- 実装中に変えない
Group 3:守るべき品質標準(Standard)
AIが勝手に壊してはいけない境界
- 信頼性(SRE)
- セキュリティ
- 可観測性
例:
- リトライ方針
- 権限管理
- ログ・メトリクスの形式
TDDDでの扱い
- TODO に「守るべき制約」として明示
- 自動生成AIに判断させない
- 必要ならチェック用テストを TODO 化する
Group 4:VC-ADの主戦場(Core Domain)
正解がなく、意思決定しか存在しない境界
- 分散の本質
- データ意味論
例:
- 整合性 vs 可用性
- 二重処理を許すか
- 金額・数量の意味
TDDDでの扱い
- 必ず対話型AI+人間で判断する
- 判断結果を TODO に残す
- 実装はその判断を「実行」するだけ
ここは AIが最も苦手な領域 であり、 TDDD 応用編で最も丁寧に扱う必要があります。
応用編での実践的な使い方
境界分割のチェック
1つの境界で PJ / TODO を切る前に、次を確認します。
- 11の境界のどれを含んでいるか
- 複数グループをまたいでいないか
- 特に Group 4 が混ざっていないか
混ざっていたら 分割する。
境界をつなげるときの原則(疎結合)
- 境界間はデータ構造で接続する
- 直接参照しない
- 失敗を前提にする
- 片方を捨てられるようにする
これにより、TDDD を 大規模システムにも適用可能 にできます。
TDDDと11の境界の関係
- TDDD は「どう回すか」の話
- 11の境界は「どこで切るか」の地図
- VCDesign / VC-AD は「なぜそう切るか」の説明
応用編では、地図を見ながら運転する ところまでを扱います。
まとめ
- AIは境界を知らない
- 境界を教えるのは人間の役割
- 判断は TODO に残す
- 実装は境界内に閉じ込める
これができれば、TDDD は小規模だけでなく 現実の大規模システムにも拡張できる。