公開日: 更新日: 状態: 公開中 / Snapshot
ローカルで複数の AI Agent を動かす

複数の AI Agent でローカル開発を並列化する

今日の到達点は、2 つの小さい修正を別 worktree で同時に進めること。 並列化するのは差分作成だけに絞る。

AI Agent を 1 つの作業では使っているが、複数 Agent をローカルで並べたことはないエンジニア向けの発表資料。 Git の branch / commit、ローカル起動、unit test または E2E の基本は分かっている前提にする。

今日の到達点

2 つの小さい修正を別 branch / 別 worktree で同時に進める。並列化するのは差分作成まで。 共有リソースを触る工程は混ぜず、branch / worktree / URL / 検証結果 / cleanup 対象の対応を確認しながら作業ごとに進める。

1. なぜ AI Agent の並列開発が必要になるか

AI Agent を 1 つだけ使う段階では、人間は Agent の完了を待つ時間が長くなる。 独立した小さい作業が複数あるなら、Agent を並べることで待ち時間を減らせる。

ただし、並列化で難しくなるのはコードを書くことではなく、作業、branch、worktree、URL、検証結果、cleanup 対象の対応関係を失わないこと。 最初は「差分作成だけ」を並列化し、共有リソースを触る工程は直列にする。

従来のエディタ中心の開発では、人間が 1 つの Editor、checkout、task を扱う。一方、複数 Agent の並列開発では、人間が同じ project の Agent A と Agent B について branch、worktree、URL、status、check result、cleanup を把握する。
複数 Agent を並べると、人間の役割は 1 つの作業を見ることから、複数作業の対応関係を判断することへ移る。
差分が混ざる
2 つの Agent が同じ作業ディレクトリを触ると、どちらの修正も同じ branch の差分に混ざる。
URL と branch がずれる
見ている画面の URL が、確認したい PR branch から起動したものか分からなくなる。
共有 DB の状態が残る
seed や更新系 E2E の結果が残ると、次の作業の失敗原因を切り分けにくい。

2. 並列化のレベル

Level は「高度なツールを使う度合い」ではない。 同時に使うリソースをどこまで分けるかの段階である。

分けるものは段階的に増える。最初は Agent A と Agent B の差分作成だけを別 worktree で並列化し、共有環境での検証は作業ごとに直列で進める。同時起動が必要になったら URL を分け、同時検証が必要になったら DB、schema、E2E を分ける。cleanup 自動化が必要なら所有者確認と停止条件を慎重に設計する。
分けるものは一度に増やさない。同時に使う必要が出たものだけを分ける。
Level 1: 差分作成だけ並列
branch / worktree を分ける。起動、検証、PR、cleanup は作業ごとに直列で進める。
Level 2: 同時起動
2 つの画面を同時に見る必要が出たら、process、port、URL を分ける。
Level 3: 同時検証
test / E2E が状態を書き換えるなら、DB / schema、cache、queue、artifact を分ける。
補足: cleanup 自動化は慎重に扱う
cleanup まで Agent に任せる設計は、本編の到達点ではない。必要な場合だけ、所有者確認と停止条件をプロジェクト側で設計する。
この資料での worktree の使い方

git worktree は、同じ repository に紐づく別の作業ディレクトリを作る機能。 Agent A / B のファイル差分を混ぜずに進めるために使う。詳しい境界は 4. worktree で分かれるもの、分かれないもの で見る。

3. 最初は Level 1: 差分作成だけを並列化する

ここからは Level 1 を具体的に見る。 Agent session を 2 つ開くだけでは不十分。branch / worktree を分ける。

検証、PR、cleanup は作業ごとに対応関係を確認しながら直列で進める。 作業前に人間が pwdgit branch --show-currentgit status --short を確認する。

Level 1 の運用では、人間が Agent A と Agent B に別 worktree の作業を依頼し、2 つの Agent が差分作成を並列に進める。その後、共有の起動・検証環境では Agent A、Agent B の順に検証、PR 作成、cleanup を進める。
Agent A / B は別 worktree で差分を作る。検証・PR・cleanup は A、B の順に直列で進める。
Agent A: 作業 A
ログイン画面のエラーメッセージを読みやすくする。 変更対象は UI 文言と unit test。DB は触らない。
Agent B: 作業 B
設定画面の入力説明を補足する。 変更対象は別コンポーネントと Storybook snapshot。DB は触らない。
worktree を 2 つ作る

この例では、通常の作業ディレクトリを $HOME/src/myapp、Agent 用 worktree を $HOME/worktrees/myapp/* に置く。 worktree 作成コマンドは、通常の作業ディレクトリ側で実行する。

cd "$HOME/src/myapp"
git fetch origin main
git worktree add "$HOME/worktrees/myapp/issue-101" -b agent/issue-101 origin/main
git worktree add "$HOME/worktrees/myapp/issue-102" -b agent/issue-102 origin/main
作業前に人間が確認する
cd "$HOME/worktrees/myapp/issue-101"
pwd
git branch --show-current
git status --short

worktree を作ったら、worktree ごとに terminal または Agent session を開く。 Agent A は $HOME/worktrees/myapp/issue-101 をカレントディレクトリにして作業 A だけを依頼し、Agent B は $HOME/worktrees/myapp/issue-102 を起点に作業 B だけを依頼する。 どちらの Agent にも、担当 worktree の外を触らせない。

人間が決めること、Agent に任せてもよいこと

人間は「何を並べるか」「どの作業から検証し、どの PR を先に進めるか」を持つ。 作業前に確認するのは、対象作業、作業ディレクトリ、branch、worktree、共有リソースの対応関係。

test、E2E、PR draft 作成、cleanup 候補の列挙は Agent に任せてもよいが、初回は作業ごとに一件ずつ進める。 複数 Agent に共有 URL / DB / cleanup 対象を同時に触らせない。

4. worktree で分かれるもの、分かれないもの

worktree を分けると、作業ディレクトリ、branch、ファイル差分は分かれる。 ただし、process、port、URL、DB / schema、cache / queue、artifact(検証成果物)、cleanup 対象は、worktree だけでは分かれない。

Level 1 では、worktree で分からないものを同時に使わないことで始める。 同時に使う必要が出たものだけ Level 2 以降で分ける。

worktree で分かれるものは checkout、branch、file diff。worktree だけでは分かれないものは process、port、URL、DB、schema、cache、queue、artifact、cleanup target。
worktree はファイル側の混線を防ぐ。起動中の process、URL、DB、cleanup 対象は別に扱う。

5. Level 1 から先へ進む判断

Level 1 を回せるようになったら、待ち時間や衝突が出たところだけ分離を増やす。 migration、大きな refactor、同じファイルを触る修正は、初回 2 並列には向かない。

起きていること 次に分けるもの 進む Level
起動の順番待ちが増えた process / port / URL Level 2
test / E2E の順番待ちや状態汚染が出た DB / schema / cache / queue / artifact Level 3
cleanup で他作業を壊しそうになった cleanup 対象と所有者を人間が確認する。自動 cleanup は急がない 並列数を増やさない

詳しい判断表は 導入レベルと判断表 で扱う。

6. 最初の 2 並列の成功条件

成功は「2 つを同時に完全自動化できた」ことではない。 初回は、人間が作業の対応関係を失わず、2 つの PR を安全に前へ進められればよい。

  • Agent A と Agent B が別 branch / 別 worktree で差分作成した。
  • 各 Agent の差分が対象作業の範囲に収まっている。
  • 検証した URL / branch / worktree の対応を説明できる。
  • 共有リソースを触る工程を混ぜずに進めた。
  • 削除してよい process / container / worktree を説明できる。

PR の conflict、required checks、CI は通常の開発と同じように確認する。

7. 停止条件

状態が分からないまま進めない。 次のどれかに当たったら、いったん手を止め、並列数を増やさない。

  • Agent が別 worktree を変更しようとした。
  • 検証対象 URL が今確認している branch と対応しているか分からない。
  • 本番環境、共有 DB、共有 cache へ接続しそうになった。
  • seed、migration、更新系 E2E の状態が次の作業へ残るか判断できない。
  • cleanup 対象の process、container、volume がどの作業のものか分からない。
手を止めた後に最初に見るもの

task、作業ディレクトリ、branch、URL、DB、cleanup 対象を対応付ける。 対応できないものは、検証環境を既知状態に戻すか、対象作業を止めて人間が確認する。 原因が分からないまま PR、merge、cleanup へ進まない。

8. ツール / ダッシュボードは何を助けるか

複数 Agent をローカルで並べると、人間は複数の session、terminal、worktree、URL、diff、検証結果、cleanup 対象を見る必要がある。 dashboard / workspace 管理ツールは、この状態把握を助ける。

ただし、ツールを入れても、プロジェクト固有の DB / cache / queue / E2E / artifact / cleanup ownership は残ることがある。 ツールは「どの問題を助けるか」で分類して見る。

観点 ツールが助けること プロジェクト側に残ること
workspace / worktree 管理 branch / worktree 作成、session 管理、terminal 管理 どの作業を並べるか、merge 順序
起動・URL 管理 port 表示、URL 管理、setup / teardown hook DB / cache / queue / E2E の分離設計
Agent / PR workflow diff、PR draft 作成、通知、状態一覧 検証結果の信頼性、cleanup 所有権、停止条件

具体的な製品名や代表例は ツールが担う範囲とプロジェクト側に残る範囲 で扱う。

9. 補足ページを選ぶ

本編だけで、最初の 2 並列は始められる。 補足ページは必要なものだけ読む。

このページは発表用の公開資料です。