👨‍💻

Codex CLIと人間で“共著する”開発ループ:仕様から実装までのワークフロー

に公開

最近、Codex CLIを使ってAIエージェントと開発を進めるときに感じるのは——
「AIエージェントに全部任せる」のではなく、「AIエージェントをペアプロ相手として扱う」 方が圧倒的に生産的だということです(個人の意見です)。

今回は、私が実際に使っている「Codex CLI(AIエージェント)と人間の協調開発ループ」を紹介します。
仕様作成からレビューまで、すべてAIエージェントと対話しながら進める手法です。


🌀 基本ループの全体像

まずは全体の流れを図にしてみましょう。

この図のとおり、開発は大きく分けて2つのループで進みます。

  1. 仕様・TODO作成ループ(AIエージェントと対話しながら仕様・タスクを練る)
  2. 実装・レビューサイクル(人間が実装し、AIエージェントが並列でレビュー)

🧠 フェーズ1:仕様作成フェーズ

ここでは「感性 → 言語化」を何度も往復します。
最初から仕様を完璧に書こうとせず、まずはAIエージェントに思いをぶつけてみるのがコツ。

「こんな感じのツールを作りたい」
「こういう使い心地にしたい」
「この部分が気持ち悪い」

このレベルのざっくりした話でもOK。
AIエージェントにまとめてもらいながら、文章で仕様を形にしていきます

ポイントは「ここではコードを書かないで」と明示すること。
仕様は文章として整理することで、後のフェーズでの混乱を防げます。


✅ フェーズ2:TODO作成フェーズ(TDDスタイル)

仕様がまとまったら、AIエージェントに「TDD用のTODOチェックリストを作って」と依頼します。
AIエージェントが仕様をタスクに分解し、チェックリスト化してくれます。

さらに、そのTODOリスト自体をAIエージェントにレビューしてもらうのもおすすめです。

「このタスクは実現可能?」
「抜けている要素はない?」
「既存の実装との整合性は?」

といった観点で、AIエージェントからのアドバイスをもらいましょう。

🧩 TDDサイクルとチェックリストの活用

このフェーズで特に重要なのが、TDDサイクルに基づいたTODOチェックリストです。
AIエージェントにチェックボックス付きのリストを生成してもらい、
タスク完了時にはAIエージェント自身にチェックを入れてもらうようにします。

これは単なる進捗管理ではなく、
AIがテストの有無を把握しながら次の提案を調整してくれるため、
自然にテスト駆動の文化が定着します(私の意見)。

また、リポジトリの中に docs/ ディレクトリを作り、
仕様書やTODOリストを .md ファイルで管理するのもおすすめです。
(例:docs/spec.mddocs/todo.mddocs/review_notes.md
Markdownで常設しておくと、AIが仕様とコードの往復を回しやすくなります。


⚙️ フェーズ3:実装フェーズ

TODOリストに従って実装を進めます。
タスクが終わるたびに、次の3つを必ず実行

  • type check
  • format
  • test

この「毎タスクごとにチェックする」文化を定着させると、
品質のばらつきが激減します。
Codex CLIの自動チェックツール連携とも非常に相性が良い部分です。


🤖 フェーズ4:レビュー&フィードバックフェーズ

実装が進むたびに、AIエージェントにレビューを依頼します。
できれば完全に別のAIエージェントが(実装がCodexなら、レビューはClaude Codeなど)行うのが理想ですが、
同じCodex CLIでも別プロセスで起動し、並列レビューを行う構成でも十分に機能します。

1エージェント=1タスク
→ 別のAIエージェントが仕様と実装の一致を確認してくれる

タスク単位でAIによるレビューを挟むことで、
全体を最後にまとめてチェックするよりも圧倒的に早くフィードバックが返ってきます。


💡 AIエージェント×仕様書の“往復”が効く理由

ここは少しだけ研究の話にも触れつつ、あくまで実務目線で。

  • 仕様 → コード
    自然言語の要件からコードやクエリを作る流れは、さまざまな実験で強みがあるとされています(例:HumanEvalやCodexの報告)。(arXiv)

  • コード → 仕様(説明・要約)
    既存のコードから意図や仕様を言葉に起こすことも得意で、実務で役立つケースが多いです(コード要約や説明づくりの研究が多数)。また、コードから仕様(条件や振る舞い)を起こす試みもあります。(arXiv)

  • 往復の相性
    抽象的な仕様を具体的な実装に落とし込んだり、実装済みコードを仕様レベルで点検したり、この“行き来”がスムーズにできるのがAIの良さだと感じます(個人の意見)。
    さらに、「自然言語→時間的な仕様表現(順序や条件を伴う記述)」のような研究もあります。つまり“人の言葉”をもう少し厳密な表現に写し替える方向性も探られています。(ACL Anthology)

ただし、なんでも自動で完璧とはいきません。実課題を丸ごと解く評価(SWE-bench)では、初期の到達点はかなり低く、最近でも工夫が必要です。TDD・型・静的解析などと組み合わせ、AIは加速装置として使うのが現実的だと思います。(arXiv)
また、AI生成コードはセキュリティリスクを含むことがあるため、レビューやテストで締める前提が安心です。(NYU Center for Cyber Security)


🧪 仕様先行(Spec-first)の実務メリット

  • テストコードを頼みやすい
    仕様書そのものをプロンプトにして、ユニットテストの雛形や追加ケースを作ってもらいやすいです。境界値や異常系を増やすと安心感が上がります。

  • テストケース拡張が楽
    既存テストを見せて「抜けていそうなケース」を挙げてもらう、
    多言語プロジェクトなら言語ごとのテスト例を広げて統合する——といったアプローチが取りやすいです。

  • コードレビューの下支え
    仕様と差分を渡すと、変更点の要約や“怪しいかも”箇所の候補出しをしてくれるので、レビュアーの集中力を温存できます(最終判断は人間)。

  • docs/ 運用と相性が良い
    docs/spec.mddocs/todo.md のような定位置があると、
    仕様→テスト→実装→レビューの回転速度が上がりやすいです。


☕️ 面白い余談

AIエージェントにTODOリストを作ってもらうと、
「1週目」「2週目」などと週ごとにフェーズを分けてスケジュールを提案してくることがあります。

しかもその工数見積もりが、人間がやるとしたら驚くほど妥当なんです。
レビュー・テスト・リファクタリングまで含めて、
「これ、現実的に1か月で終わりそうだな」と感じるような計画を立ててくれる。

ただ、それを見ながらいつも思うのは——

「この“1か月分の計画”、このあと君(AIエージェント)に数時間で全部やってもらうんだよ……」

という、なんとも言えない罪悪感です(笑)。
AIが自分で立てた現実的なスケジュールを、
自ら超圧縮してこなしていく姿には、ちょっとした哲学的な可笑しさがあります。


💬 まとめ:AIエージェントと人の分担の最適解

個人的な意見として、このやり方の肝は次の6点です。

  1. 最初の「目的」言語化が最重要
    曖昧なままだとAIも人も迷走する。

  2. 仕様にコードを混ぜない
    要件は文章で整理してから実装へ。

  3. TODOはTDDチェックリスト形式で
    明確なテスト基準と一緒に管理する。

  4. type check / format / testは毎タスクで
    自然に品質文化を作る。

  5. レビューは並列AIエージェントで回す
    同時進行でAIがレビューすることでスピードアップ。

  6. TDDサイクルのTODOチェックリストをAIと共有する
    タスク分解・チェック更新をAIに任せることでテスト駆動が定着する。

研究の観点でも「仕様⇄コードの往復」は有望とされていますが、
実務ではTDD・型・静的解析などを土台に“AIは加速装置”として使う、
という姿勢がいちばん堅実だと思います(個人の意見です)。(arXiv)


📚 参考リンク

  • Codex / HumanEval(コード生成の基礎):初期のCodex論文・HumanEvalの紹介。(arXiv)
  • 仕様→厳密な表現へ(自然言語→時間的仕様など):自然言語から順序・条件を含む仕様表現に写す研究。(ACL Anthology)
  • コード→仕様(SpecGen など):コードから検証しやすい仕様を起こす試み。(arXiv)
  • 現実の課題を自動で解けるか(SWE-bench):初期1.96%→改善の流れと背景。(arXiv)
  • AI生成コードとセキュリティ注意点:脆弱なコードが混ざる可能性の報告。(NYU Center for Cyber Security)

この手法、特に静的型付け言語のプロジェクトと相性抜群です。
AIに頼るのではなく、AIと並走する——
そんな開発体験を、ぜひ一度味わってみてください☕️✨

Discussion