複数のClaude Codeエージェントを並列で実行する方法
複数のClaude Code(またはCodex)セッションを同時に動かす3つの方法を、素のターミナルから連携したチームまで紹介し、互いの作業を邪魔しないようにする方法も解説します。
なぜ複数のClaude Codeセッションを動かすのか?
1つのClaude Codeセッションは、タスクを一歩ずつ進めます。変更に独立した部分(API、そのテスト、マイグレーション、ドキュメント)があるときは、部分ごとにセッションを動かすと全体が早く終わり、各セッションのコンテキストも1つの仕事に集中させられます。2つ目のセッションは、1つ目のセッションのレビュアーとしても自然に使えます。
すぐに直面する2つの問題は、衝突(2つのセッションが同じファイルを編集すること)と連携(あなたがセッション間で作業や結果を中継すること)です。以下の方法は、それぞれ異なるやり方でこの2つに対処します。
方法1:1つのチェックアウトで複数のターミナル
最もシンプルな構成は、同じリポジトリで2つか3つのターミナルタブ(またはtmuxのペイン)を開き、それぞれで claude を起動することです。新しく用意するものは何もなく、セッションがコードを読むだけのときや、明確に別々のファイルにしか触れないときは、これで十分です。
ただし、すぐに破綻します。すべてのセッションが同じ作業ツリーを編集するため、あるセッションの作りかけの変更が、別のセッションにとっては紛らわしい状態になり、あるペインでの git checkout がすべてのセッションが扱っているファイルまで変わってしまいます。また、セッション同士が何かを共有するには、あなたが仲介するしかありません。あるタブから計画をコピーして、別のタブに貼り付けることになります。
方法2:セッションごとに1つのGitワークツリー
Gitワークツリーは衝突を解決します。ワークツリーとは、同じリポジトリに対する2つ目の作業ディレクトリで、独自のブランチを持ちます。そのため、Claude Codeの各セッションが自分専用のファイルを持てます。
git worktree add ../myapp-api -b agent/api
git worktree add ../myapp-tests -b agent/tests
cd ../myapp-api && claude # session 1
cd ../myapp-tests && claude # session 2これで各セッションは自分のブランチにコミットし、作業が終わったらブランチをマージします。ブランチをマージしたら、git worktree remove ../myapp-api でそのワークツリーを削除します。
ワークツリーで解決するのはファイルの問題だけで、連携の問題は残ります。セッション同士は互いに何も尋ねられず、どのターミナルが何をしていて、どれがあなたを待っているかは、引き続きあなたが追う必要があります。
方法3:1つのセッション内のサブエージェント
Claude Codeは、1つのセッションの中からサブエージェントを起動して、タスクの一部を担当させ、結果を報告させることもできます。すべてが1つの会話に収まるので、調査や焦点を絞ったサブタスクに向いています。ただし、1つのプロバイダーと1つのセッションの中に限られます。CodexやGeminiのエージェントを加えることはできず、長時間にわたる並列の編集には、やはり別々のブランチが必要です。
方法4:キャンバス上の連携したチーム
MAOは、ここまでの要素をひとつの場所にまとめます。Claude Codeの各セッション(あるいはCodex、Gemini CLI、Grok、OpenCodeのセッション)はキャンバス上の本物のターミナルで、次の3つがそれらをチームにします。
- レイヤーはワークツリーです。 エージェントをレイヤーに置くと、自動で作成される専用の作業ツリーで、自分のブランチ上で作業します。キャンバス上で差分を確認し、準備ができたら取り込みます。
- ワイヤーでエージェント同士がやり取りできます。 2つのセッションを接続すると、
maoコマンドで互いにタスクを送り、結果を受け取れます。レビュアーは、あなたを介さずに作成者へ直接連絡できます。 - 対応が必要なことは向こうから知らせてくれます。 セッションが完了、失敗、または承認待ちになると、そのノードに表示され、通知も届くので、タブを探し回る必要はありません。
エージェントは、自分のターミナルから接続されたレビュアーに依頼します。
mao ask reviewer "Check the new /sessions endpoint for missing tests"すべてのノードがエージェント自身のCLIなので、各セッションは自分のログイン、サブスクリプション、モデルを保持します。2つの異なるアカウントで、2つのClaude Codeセッションを並べて動かすこともできます。
どの方法を使うべきか?
並列のエージェントの衝突を防ぐには
- コードを編集するエージェントには、1つずつブランチを。 この1つのルールで、ほとんどの問題を防げます。
- 行単位ではなく、境界で分割します。 同じファイルの一部ではなく、ファイルやモジュール単位でエージェントに任せます。
- 計画は一度だけ書き出します。 共有の仕様ノートがあれば、各エージェントが独自のインターフェースを作り出すことなく、全員が同じインターフェースに沿って作業できます。
- 1つのエージェントをレビュアーにします。 マージ前にすべてのブランチを読むので、矛盾が早い段階で表に出ます。
- こまめにマージします。 短命なブランチは、長命なブランチよりずれが小さくなります。
よくある質問
はい。各ターミナルで、それぞれClaude Codeセッションを実行できます。同じファイルを編集しないようにするには、それぞれに専用のGitワークツリーを与えるか、MAOでそれぞれを別のレイヤーに置きます。MAOならワークツリーは自動で作成されます。
それぞれを別のターミナルで実行します。MAOでは、Claude CodeのノードとCodexのノードを置いて接続すると、maoコマンドで互いにタスクと結果を送り合えます。
いいえ。各セッションは独自のコンテキストを持ちます。必要な情報は、すべてのエージェントが読める仕様や進捗ログといった共通のノートを通じて共有するか、あるエージェントの結果を別のエージェントに送って共有します。
MAOなら使えます。各ノードで別々のアカウントのエージェントを実行できるので、2つのClaude Codeセッションで2つのサブスクリプションを並べて使えます。
ご質問は?Discordで質問するか、hello@miguer.comまでメールでお知らせください。