🏭

【チームによるAI駆動開発の勘所:第1回】AI駆動開発の本当のボトルネックは、コードを書く速度ではない

に公開

この記事では、コーディングエージェントを本格導入したチームで、なぜ「速くなったはずなのに全体が速くならない」という現象が起きるのかを、Inner / Middle / Outer の3つのループというモデルで説明します。

結論を先に書くと、ボトルネックは Middle Loop —— 人がAIの出力を評価し、統合し、修正する層 に移ります。ここを設計せずにエージェントの台数だけ増やすと、確認待ちの行列が伸びるだけになります。

対象読者

  • Claude Code などのコーディングエージェントをチームに導入したものの、期待したほど開発速度が上がっていないと感じている方
  • AI駆動開発を前提とした開発プロセス・チーム体制を設計する立場にある方(EM / テックリード / アーキテクト)
  • 「AIにコードを書かせる」の次に何を整備すべきか探している方

背景・目的

従来の開発プロセスは2つのループでできていた

コーディングエージェントが登場する前、開発プロセスは大きく2つのループで説明できました。

ループ 内容 時間スケール
Inner Loop IDE上でコードを書き、ローカルで実行し、コンパイルエラーやテスト失敗を直す日常的なサイクル 分〜時間
Outer Loop コードレビュー、CI/CD、セキュリティスキャン、コンテナ化、ステージング、本番デプロイ 日〜週

このモデルにおけるボトルネックは明快で、コードを書く速度でした。だからこそ、生産性向上の議論はほぼ常に「どうすればコードを速く書けるか」に収束していました。

エージェント導入で、Inner Loop だけが桁で速くなった

コーディングエージェントは、この Inner Loop をほぼまるごと自動化します。コード生成・実行・テスト・修正が数分単位で回ります。

ところが、ここで多くのチームが直面するのが次の状況です。

  • コードは出てくるが、それが正しいかどうかを判断する工程が追いつかない
  • レビュー待ちのマージリクエストが積み上がる
  • 「AIに任せる範囲を広げよう」と決めるための意思決定コミュニケーションが増える
  • 生成が速いので、タスクの依存関係を人が解きほぐす時間が相対的に大きくなる

つまり、Inner Loop を高速化しただけでは、開発効率はむしろ下がることさえある、というのが実態です。


Middle Loop —— 新しく現れた第3のループ

定義

Middle Loop とは、AIエージェントが解決策を提示した瞬間から始まり、それを CI/CD へ流すまでの間にある、人間による評価・統合・修正の工程です。


ここで人間のエンジニアが行うのは、コードの文法確認ではありません。次のような判断です。

  • AIは本当に正しい問題を解いたか
  • 要件や意図に合っているか
  • 既存アーキテクチャから逸脱していないか
  • 複数のAIエージェントが生成した成果物を、整合的に統合できるか
  • 本番環境へ流して安全な変更か

Middle Loop は、人間の判断力とAIの実行速度が接触する層です。

3つのループの時間スケール

ループ 担い手 時間スケール
Inner Loop AIが自動化 分単位
Middle Loop 人が評価・統合・修正 時間単位
Outer Loop 検証・反映・観測・是正 日〜週単位

分単位で出力される成果物を、時間単位でしか処理できない層が受け止めている —— これが行列ができる理由です。

Middle Loop を担う役割を Supervisory Engineering と呼ぶ

私はこの層を担うエンジニアリング活動を Supervisory Engineering(監督型エンジニアリング) と呼んでいます。「AIの作業を眺める役割」ではありません。人間がAIへ仕事を適切に分解して渡し、出力を評価し、必要に応じて修正させ、システム全体として成立させる活動です。

具体的には次の4つの役割を持ちます。

  1. 意図と制約を揃える —— 何を作るのか、何をしてはいけないのかを、エージェントが読む場所に置く
  2. 複数エージェントの成果物を統合する —— 個別には妥当な出力が、並べると揃っていない状態を解消する
  3. コードの書き方より振る舞いを評価する —— スタイルではなく、実行時に何が起きるかを見る
  4. CI/CD 前のゲートとして機能する —— 本番に流してよいかの最終判断

求められる能力が「速く書く」から「間違いを見抜く」「どこを見るべきか決める」へ移る、という言い方もできます。


AIを使った自働化の考え方 - 良いモノをより早く

重要なのは、Middle Loop の人手を、Middle Loop の中で頑張って減らすことはできないという点です。レビュアーを増やしても、それは同じ層の増員にすぎません。減らす手は前後のループへの投資しかありません。
そこで、AIによる開発のスピードと品質を維持するために、大事なのは、自律的に動く仕組みを構築することではなく、自律的に停止する仕組みを構築することにあります。この自動停止の仕組みを入れることで、停止した理由を可視化し、一つずつ原因を取り除き、自働化の範囲を広げていくことができます。ここでは、その具体的な方法を示します。

方向1: Inner Loop への投資 —— 自働化(アンドン)

トヨタ生産方式でいうアンドンは、「異常が起きたらボタンを押し、ラインを止めて全員に知らせる」仕組みです。これをAI駆動開発に持ち込むと次のようになります。

  • AIが異常な動きをしたら停止する
  • AIが処理を完了したら止まる(勝手に次へ進まない)
  • 停止したら、処理された内容を人が確認する

さらに、AI自身にチェックリストと成果物を照合させ、完了を報告させるところまで含めます。逸脱が小さければプロンプトで即座に是正し、大きければ Issue を起票して止める。人が判断するのは「止めた内容」だけになります。

方向2: Outer Loop への投資 —— 省人化(ポカヨケ)

ポカヨケは「そもそも間違えられないように、工程に仕掛けを作る」考え方です。

  • 静的解析・Linter・型・スキーマ・API契約テストで、逸脱を機械的に検出する
  • CI で脆弱性・テスト・SLO を自動判定し、人が見るのは例外だけにする
  • 判断を「都度の目視」から「宣言されたゲート」へ移す

ゲートを設計するのが人、ゲートを通るのがAI。この分担にできているかが、Middle Loop に張り付く人の量を決めます。


局所最適の集合は、全体最適にならない

Middle Loop に仕事が溜まるもう一つの理由が、AIの出力が「個別には妥当だが、並べると揃っていない」ことです。

エージェントは、渡された範囲では妥当な解を出します。範囲の外は見えていません。3つの Issue を別々に渡すと、こうなります。

  • 抽象が重複する —— 既存のリポジトリ層に気づかず、似たものをもう1つ作る
  • 流儀が割れる —— エラーを例外で返すもの、戻り値で返すものが混ざる
  • 名前が割れる —— 同じ概念が Order / Purchase / Transaction と呼ばれる

これは能力の問題ではなく、見えている範囲の問題です。したがって対策も「もっと賢いモデルを使う」ではなく「どの範囲で最適化させるかを設計する」になります。

階層をつくるだけでは、出力は揃わない

よくある対策が Epic → Sub Epic → Issue の階層化です。これは必要条件ですが、十分条件ではありません。

エージェントが実行時に読むのは、渡された Issue の本文だけです。上位で決めたことは、ツリーの存在としては見えていません。整合性を生んでいるのは、階層そのものではなく次の2つです。

  1. 決定が成果物として固定されていること —— 境界・インターフェース・データモデル・エラー方針が、動かせない形で存在している
  2. 実行時に必ずコンテキストへ載ること —— CLAUDE.md / 規約ファイル / 参照必須の設計書 / 型定義やスキーマそのもの

整合性の種類ごとに、効く手段が違う

整合性の種類 何が揃わないか 効く手段
構造的 インターフェース / 依存方向 / データモデル 上位で決めて固定する。最も強いのは契約をコードで表現する(型・スキーマ・OpenAPI・proto にすればAIは逸脱できない)
規約的 命名 / エラー処理 / ログ 階層ではなくゲートで強制する。Linter と CI に検査させるほうが、Epic に書くより確実
意味的 同じ概念が別の名前で呼ばれる ユビキタス言語を成果物として持ち、常にコンテキストへ載せる

文書で「こう書け」と指示するより、AIが逸脱できない形にするほうが強い、というのがここでの原則です。


詰まったポイント・Tips

コンテキストは「決めるとき」だけ広げる

「Epic 単位で最適化する」は「Epic 全体をエージェントに渡す」ではありません。コンテキストを広げるほど注意は拡散し、精度が落ちます。

階層 そこで決めること 成果物 コンテキストの広さ
Epic 境界の切り方 / インターフェース / データモデル / エラー方針 設計書・型定義・スキーマ 広い(決定だけを出す。コードは書かない)
Sub Epic 分割の単位と依存順 / 契約の具体化 API定義・テーブル定義・テスト仕様 中
Issue 実装のしかた コード 狭い(前提は凍結済み)

決定が凍結されていれば、Issue はコンテキストを狭く保ったまま揃います。

整合を取り続けるより、整合を取る必要が出ない切り方を選ぶ

Epic を「決済機能」のような機能で切ると、1つの Epic が注文・在庫・決済という複数のドメインをまたぎます。すると Issue 間で整合を取り続ける必要が残ります。

一方、境界づけられたコンテキストで切れば、Epic の中は1つのドメインで閉じます。ドメイン間の整合性は、コードで毎回書くのではなく基盤側の仕組みに寄せる —— という設計にできれば、AIをドメインをまたいだ設計から解放できます。

この「どこで切るか」の判断が、実は本連載で最も難しいテーマです。第4回・第5回で正面から扱います。


まとめ

  • 成果: AI駆動開発におけるボトルネックは、Inner Loop(コードを書く速度)から Middle Loop(人が評価・統合・修正する速度)へ移ります。ここを認識できると、打ち手が「レビュー体制の強化」から「Inner Loop の自働化(アンドン)」と「Outer Loop の省人化(ポカヨケ)」へ変わります。
  • 課題: Middle Loop の設計は、ツールを入れれば済むものではありません。何をゲートにするか、どの決定を凍結するか、指摘をどう仕組みに還元するか を、チームごとに決める必要があります。

そして、この3ヶ月のプログラムを設計する中で最終的に置いた成功条件は、「動くシステムができたこと」ではなく、次の一文でした。

レビュー指摘が、ルール / Skills / Hooks に還元され、レビュー工数が減っていく仕組みができたこと

最後にお読みいただきありがとうございました。この記事が同じ悩みを持つ方の参考になれば幸いです。


参考

「AIに任せたら、個別には妥当なのに全体として揃わない」という現象は、インフラ構築でも同じ形で起きます。実際の失敗体験がこちらにまとまっています。

https://zenn.dev/scalar_sol_blog/articles/3fe08bbc00e9ab


執筆者紹介

執筆者

深津 航
株式会社Scalar 代表取締役CEO、Co-Founder

最近はAIを使った開発プロセスの改善に取り組んでいます。

Scalar Solution Engineer Blog

Discussion