AIオーケストレーションの開発フローを整理したら、最後のボトルネックは人間だった
最近、AIオーケストレーションについての記事や公式資料を読む機会が増えました。
中心となるAIが仕事を分解し、専門のエージェントへ割り振る。複数のエージェントを並列に動かし、その結果を集約する。設計、実装、テスト、レビューに、それぞれ別の役割を持たせる。
個々の機能として読めば理解できます。しかし、それらが実際の開発でどのようにつながるのかは、少しイメージしにくいところがありました。
そこで、以前触れた開発環境での経験を思い出しながら、公開されているAIオーケストレーションの考え方と照らし合わせて、開発フロー全体を整理してみました。
要件を実装可能な単位へ分ける。
複数のGitリポジトリを同じ基点から動かす。
チケットごとにworktreeを作り、AIを並列に作業させる。
設計と実装で異なるAIを使い分ける。
セキュリティやドメイン知識の観点から、別のAIが実装を確認する。
PRやMRを作り、人間のレビュー指摘を再びAIへ戻す。
レビュー後に確定した変更を設計書へ反映する。
作業中に得られた知見を、次回以降に使うSkillsへ蓄積する。
こうして並べてみると、AIがコードを書くことよりも、前後の工程をどう接続するかの方が重要に見えてきます。
そして、最後まで運用してみると、少し皮肉な結論になりました。
技術的に一番難しかったのは、モデルの性能でも、複数リポジトリの管理でもありませんでした。
人間にAIを使ってもらうことでした。
全体像

今回整理した構成では、中央にオーケストレーション用のコントローラープロジェクトがあります。
このプロジェクトは業務システム本体ではありません。フロントエンド、バックエンド、サーバー上で動く処理など、別々のGitリポジトリを管理し、変更依頼に応じて必要な作業を割り振るための制御基盤です。
大きな流れは次のようになります。
変更依頼
↓
オーケストレーション・コントローラー
↓
要件と作業をスライス
↓
対象リポジトリと担当AIを決定
↓
設計・実装・テスト・専門レビュー
↓
PR/MRと人間向けレビュー資料を作成
↓
人間レビュー
↓
指摘を取り込んで再修正
↓
確定した変更を設計書へ反映
↓
再利用できる知見をSkillsへ追加
単に複数のAIを起動するのではなく、誰に何を任せ、どの成果物を次の工程へ渡すのかを制御します。
Anthropicは、中央のエージェントが作業を分解し、複数のワーカーへ割り当てて結果を統合する構成を、Orchestrator-Workersパターンとして紹介しています。GitHub Copilot SDKにも、専門化したサブエージェントへ処理を委譲する仕組みがあります。
実際に触れた環境と同じ製品ではありませんが、中心となるコントローラーが作業を分解し、専門エージェントへ委譲する考え方は近いものです。
最初に要件を「スライス」する
変更依頼は、そのまま実装AIへ渡されるわけではありません。
最初に、要件や変更内容を、実装・確認・テストが可能な単位へ分解します。ここでは、この役割をスライサーAIと呼びます。
スライサーAIが整理するのは、例えば次の内容です。
| 項目 | 内容 |
|---|---|
| 対象リポジトリ | フロントエンド、バックエンド、サーバー処理など |
| 作業単位 | 個別に実装・確認できる機能単位 |
| 依存関係 | 先に必要な変更、同時に変更すべき箇所 |
| 受け入れ条件 | 何ができれば完了なのか |
| 制約 | 変更してはいけない範囲、後方互換性 |
| テスト観点 | 正常系、異常系、権限、再実行など |
要件
↓
スライサーAI
├─ 対象リポジトリ
├─ 作業単位
├─ 依存関係
├─ 受け入れ条件
└─ テスト観点
↓
設計・実装・テストへ
ここは全体の中でも特に重要です。
最初のスライスを間違えると、その後のAIが担当範囲内で正しく作業しても、システム全体では変更が不足します。
例えば、フロントエンドとバックエンドだけの変更と判断したものの、実際にはサーバー側のデータ形式にも影響していた場合です。それぞれのAIが自分の担当を正しく終えても、結合した時に問題が起きます。
AIの人数を増やすことよりも、AIへ渡す仕事をどう切るかの方が難しいのかもしれません。
複数のGitリポジトリを同じ基点から動かす
対象になっていたのは、一つのGitリポジトリだけではありませんでした。
フロントエンド、バックエンド、サーバー側の処理などが、それぞれ別のリポジトリになっています。
オーケストレーターは、各リポジトリの基準ブランチを取得し、同じリリースタグや対応する基準点から作業を始めます。
そのうえで、チケットや変更単位ごとにGit worktreeを作成します。
Frontend Repository
├─ worktree / Ticket-A
├─ worktree / Ticket-B
└─ worktree / Ticket-C
Backend Repository
├─ worktree / Ticket-A
├─ worktree / Ticket-B
└─ worktree / Ticket-C
Server Repository
├─ worktree / Ticket-A
├─ worktree / Ticket-B
└─ worktree / Ticket-C
Git worktreeを使うと、一つのリポジトリに複数の作業ディレクトリを関連付け、異なるブランチを同時に扱えます。
チケット同士で変更対象が重なっていても、作業ディレクトリが分かれているため、実装途中の変更が混ざりません。
AIを並列に動かす場合、担当を分けるだけでは足りません。作業場所まで分ける必要があります。
一方で、複数リポジトリの変更は、Git上で完全に一つのトランザクションとしてマージできるわけではありません。
そのため、実運用では次の情報も管理する必要があります。
- 各リポジトリの対応するPR/MR
- マージ順序
- デプロイ順序
- 旧版と新版を混在させられるか
- 後方互換性
- ロールバック方法
- 各リポジトリの対応コミット
例えば、変更単位に共通IDを付けておくと追跡しやすくなります。
Change Set: CHG-2026-0042
Frontend: PR #125 / commit abc123
Backend: MR #842 / commit def456
Server: PR #98 / commit ghi789
Design: revision 7
設計と実装でAIを使い分ける
すべての工程を同じAIへ任せる構成ではありませんでした。
例えば、要件整理や設計はClaude系、実装はCodex系、実装後のセキュリティやドメイン観点の確認は再びClaude系というように、役割ごとにモデルを使い分けます。
ここで重要なのは、「Claudeは設計に強く、Codexは実装に強い」と固定的に断定することではありません。
作る役と確認する役を意図的に分けることです。
設計AI
↓
実装AI
↓
別のレビューAI
同じAIが設計し、実装し、自分の実装をレビューすると、実装時に置いた前提をレビュー時にも引き継ぎやすくなります。
設計を誤解していた場合、自分の誤解を前提として「問題ない」と判断する可能性があります。
別モデルや別コンテキストに分けても、完全に独立した確認になるわけではありません。両方が同じ曖昧な設計書を読めば、同じ誤解をすることもあります。
それでも、生成担当と評価担当を分けることには意味があります。
実装後は、複数の専門AIが並列に確認する
実装が終わると、一つのレビューAIだけが確認するのではありません。
複数の専門的な観点を持つAIが並列に動きます。
| 役割 | 確認する内容 |
|---|---|
| セキュリティレビューAI | 脆弱性、認証、認可、入力値、秘密情報 |
| ドメインレビューAI | 業務ルール、既存仕様、プロジェクト固有の制約 |
| 品質レビューAI | 可読性、保守性、重複、設計方針 |
| テストレビューAI | テスト不足、異常系、境界値、横展開 |
┌─ セキュリティレビューAI
実装コード・差分 ├─ ドメインレビューAI
├─ 品質レビューAI
└─ テストレビューAI
↓
結果を集約
ただし、AIレビューだけで正しさを保証できるわけではありません。
次のような決定論的な確認も必要です。
- コンパイルと型チェック
- Lintと静的解析
- ユニットテスト
- 結合テスト
- API契約テスト
- セキュリティスキャン
- DBマイグレーション検証
- リポジトリ横断のE2Eテスト
- 実行ログや画面の証跡
AIは意味や意図を確認し、テストや解析ツールは事実を確認する。この分担が重要です。
テスト仕様書まで流れの中で作られる
実装やユニットテストだけでなく、結合テストやE2Eテストの仕様書も作成されます。
テストAIは、スライサーが整理した作業単位、受け入れ条件、テスト観点を入力として、人間が確認するためのテスト仕様書を作ります。
ただし、自動生成されたテスト仕様書が、そのまま現場のリスクを十分に拾えるとは限りません。
正常系や単純な入力チェックは作れていても、実際の業務で問題になりやすい壊れ方が不足することがあります。
例えば、次のような観点です。
- 権限が異なる場合
- 同じ処理を二重に実行した場合
- 途中で画面を閉じた場合
- 失敗後に再実行した場合
- 既存データと衝突した場合
- コピーされた実装の片方だけが変更された場合
- 別リポジトリとのバージョンがずれた場合
AIがテスト仕様書を作れることと、現場のリスクを十分に把握できることは別です。
この部分は、まだ人間が条件として返す必要があります。
PR/MRと一緒に、人間向けのレビュー資料も作る
各リポジトリの修正が終わると、コミットが作成され、PRまたはMRが提出されます。
その際、コード差分を人間に読ませるだけではありません。
コミットや差分から、人間向けのレビュー資料も作られます。
- 何を変更したか
- なぜ変更したか
- どのファイルや機能へ影響するか
- どのテストを実行したか
- どこを重点的にレビューしてほしいか
- 未確認事項は何か
この役割は、実装を検査するレビューAIとは別です。
専門レビューAIは、実装に問題がないかを確認します。レビュー資料生成AIは、人間が変更内容を理解して判断できる状態を作ります。
ただし、AIが作ったレビュー資料もAIの解釈です。
資料が整っているからといって、コードが正しいとは限りません。レビュー資料は証拠の代わりではなく、コード差分、テスト結果、ログ、設計書へたどるための索引として使う必要があります。
人間のレビュー指摘をAIが取り込む
PR/MRに人間がレビューコメントを書くと、その指摘をAIへ戻して再修正できます。
AIは対象のコメントとコード差分を読み、必要な修正を行い、テストを再実行して、PR/MRを更新します。
判断できない場合には、勝手に決めず、人間へ質問します。
人間レビュー
↓
レビュー指摘をAIが取得
↓
AIだけで判断できるか
├─ 判断できる → 修正・再テスト
└─ 判断できない → 人間へ質問
↓
修正・再テスト
↓
PR/MRを更新
ここで気づいたのは、レビューコメントの書き方も変わるということです。
人間同士なら、
ここは共通化してください
という短い指摘でも、過去の経緯やチーム内の暗黙知から意図が伝わる場合があります。
AIは、その意図を別の方向へ補うことがあります。
AIに修正させるレビューでは、少なくとも次の内容が必要でした。
問題:
何が問題なのか。
理由:
なぜ変更する必要があるのか。
期待する修正:
どのような状態にしたいのか。
変更してはいけない範囲:
互換性や既存仕様などの制約。
完了条件:
どのテストや結果をもって完了とするか。
AIがレビュー指摘を自動処理するようになるほど、人間は「問題がある」と伝えるだけでは足りなくなります。
修正の意図や完了条件を、以前より明確に言語化する必要があります。
レビューで確定した内容が設計書へ戻る
さらに特徴的だったのは、レビューによってコードが変更された後、その内容が設計書にも反映されることです。
一般的な開発では、流れが一方向になりがちです。
要件
↓
設計
↓
実装
↓
レビューと修正
コードが修正されても、設計書は人間が別途更新しなければなりません。
更新が忘れられると、設計書と実際のコードが少しずつ離れていきます。
この構成では、最後に逆向きの流れがあります。
要件
↓
設計
↓
実装
↓
AIレビュー
↓
人間レビュー
↓
修正・テスト
↓
確定した変更
↓
設計書を更新
設計書が実装前に一度作られて終わるのではなく、レビューで確定した変更へ追従します。
ただし、コードを常に正として設計書へ反映するのは危険です。
誤った実装まで正式な仕様になってしまう可能性があります。
そのため、実装と設計が異なった時には、次の判断が必要です。
設計と実装が異なる
↓
設計変更として合意されたか
├─ Yes → 設計書を更新
└─ No → 実装を設計へ戻す
設計書の更新には、コード差分だけでなく、元の要件、レビューコメント、人間の回答、受け入れ条件、テスト結果まで使う必要があります。
作業中の知見をSkillsへ戻す
作業を続けていると、プロジェクト固有のルールが見つかります。
例えば、次のようなものです。
- 変更箇所と似た処理への横展開確認を行う
- コピーされた実装でも、実体が別なら個別にテストを書く
- APIを変更する場合は後方互換性を確認する
- 権限違い、再実行、途中離脱をテスト観点に含める
- レビュー資料には変更理由と確認結果を書く
これらを毎回レビューで指摘するのではなく、オーケストレーター側のSkillsへ追加します。
特徴的なのは、AIが勝手にSkillsを増やすのではなく、
この内容をSkillへ追加しますか
と人間へ確認することです。
作業・レビュー
↓
再利用できそうな知見をAIが抽出
↓
Skillsへの追加を提案
↓
人間が内容・適用範囲・例外を確認
↓
Skillsへ登録
↓
次回の設計・実装・レビューで利用
これは、モデルそのものが再学習しているわけではありません。
チームの判断を、再利用可能な指示、スクリプト、チェック項目として蓄積している状態です。
このループが回ると、システムは少しずつ現場向けに育っていきます。
一方で、ルールを追加し続ければよいわけではありません。古くなったルール、重複したルール、特定のケースにしか使えないルールを整理する必要があります。
Skillには、一行の命令だけでなく、次の情報を持たせた方が安全です。
ルール:
実体が独立しているコピー実装には個別のテストを追加する。
理由:
片方の修正や障害が、もう片方のテストでは検出できないため。
適用対象:
独立して実行される処理、サービス、コンポーネント。
適用除外:
単純な定数、表示文言、実行経路を持たない複製。
確認方法:
各実体を個別に失敗させても、対応するテストが検出すること。
この構成で問題になりそうなところ
全体としてよくできた構成ですが、問題がないわけではありません。
スライスの誤りが全工程へ広がる
最上流で対象リポジトリや依存関係を見落とすと、その後の設計、実装、テストも誤った前提で進みます。
複数リポジトリの変更は同時にマージできない
マージ順序、デプロイ順序、後方互換性、ロールバック方法を管理する必要があります。
誤実装が設計書へ反映される可能性がある
設計同期の前に、設計変更として合意された内容なのかを判断するゲートが必要です。
複数のレビューAIが矛盾する
セキュリティ、業務要件、互換性、保守性の指摘が衝突することがあります。優先順位と人間へのエスカレーションが必要です。
Skillsが増えすぎる
ルールが重複、矛盾、陳腐化するため、追加だけでなく整理や廃止も必要です。
AIレビューだけでは正しさを証明できない
テスト、静的解析、ログ、人間の確認は残ります。
AIオーケストレーションは、AIへ全部任せる仕組みではありません。
どの判断をAIへ移し、どの判断を人間に残すかを管理する仕組みなのだと思います。
最後のボトルネックは、人間にAIを使ってもらうことだった
ここまでの仕組みを見ると、運用上の最大の問題は、複数リポジトリの管理やAIの精度にあるように思えます。
しかし、現場で一番大きな壁になったのは、AIを使いたくない人がいることでした。
AIそのものに嫌悪感や不安があると、仕組みの入口に立ってもらえません。
この開発フローは、人間を排除するものではありません。
人間が要件を補い、レビューの意図を書き、AIが判断できない内容を決め、見つかった知見をSkillsへ戻すことで成り立っています。
人間が参加しなければ、仕組みも育ちません。
それでも、次のような理由からAIを使いたくないと感じる人はいます。
- AIの出力を信用できない
- 最終的な責任だけ人間に残るのが不安
- AI向けに詳しいレビューを書くのが面倒
- 自分の仕事や経験を否定されたように感じる
- コードや情報をAIへ渡すことが心配
- 新しい作業方法を覚える余裕がない
これは単に、新しい技術を嫌っているという話ではありません。
AIオーケストレーションの導入は、ツールを一つ追加するだけではなく、要件の書き方、レビューの仕方、責任の分け方、開発の進め方を変えることだからです。
それでも、少し皮肉だと思いました。
AIによって人間の仕事がなくなるという話をよく聞きます。
ところが実際の現場では、AIが人間を置き換えることより先に、人間にAIを使ってもらえないことで、AIを前提にした開発フローが止まることがあります。
技術としては、要件から設計、実装、レビュー、設計書更新までつながり始めています。
最後に残るのは、AIの性能だけではありません。
人間がその仕組みを信用し、自分の仕事の一部として受け入れられるかどうかです。
AIを使えば人間が不要になるのではありません。
人間が参加しなければ、AIを使った仕組みも完成しない。
AIオーケストレーションを整理してみて、一番難しいと感じたのは、そこでした。
参考資料
- Anthropic, Building effective agents
- Anthropic, How we built our multi-agent research system
- GitHub Docs, Custom agents and sub-agent orchestration
- GitHub, Spec Kit
- Git, git-worktree Documentation
- GitHub Docs, Adding agent skills for GitHub Copilot
- GitHub Docs, Creating a pull request summary with GitHub Copilot
- GitHub Docs, Using GitHub Copilot code review
- OpenAI, Introducing the Codex app
- OpenAI Developers, Build skills
(2026年8月1日確認)
Discussion