「"また同じバグを倒すの?" "ええ、でも今度はパーティで"」- Claude Code・Codex・Gemini でマルチエージェント開発
「また同じバグを倒すの?」
「ええ、でも今度はパーティで」
── Claude Code・Codex・Gemini で始めるマルチエージェント開発
まずは以下の動画を見てください。
1回の指示でClaude Code, Codex, Gemini が連携してファイルを作成する動画
フリーレンがシュタルクとフェルンにバグ修正をお願いする動画
プロローグ:相送のフリーレン
これは「相送のフリーレン」という物語だ。
葬送ではない。相送。エージェント同士がメッセージを送り合う、そういう話だ。
長い時間を生きる魔法使いがいる。
前線で一撃を担う戦士がいる。
後方から正確に支援する弟子がいる。
全員が同じことはできない。
けれど、全員が違う役割を持てる。
だからこそ、パーティは機能する。
マルチエージェント開発も同じだ。
Claude Code が Agent Teams(Research Preview) を発表して、複数エージェント協調は「できるかどうか」から「どう使うか」へ進んだ。
このままもう一歩、考えてみたい。
もし、役割が違うなら、エージェントも違っていいとしたら?
設計を強く握れるエージェントがいる。
実装とテストを前線で回せるエージェントがいる。
仕様変更を追いかけて裏取りできるエージェントがいる。
違うまま、協力できればいい。
この記事では、Claude Code・Codex・Gemini を連携させ、群れ──いやパーティとして動かすマルチエージェント開発のやり方を紹介する。
使うのは Synapse A2A。各エージェントを一切改造せず、Google A2A Protocol で繋ぐフレームワークだ。仲間はそのまま、連携だけを足す──まさにパーティ編成の魔法。
物語に入る前に:Synapse A2A を入れておこう
この先の話は、Synapse A2A が入っている前提で進める。
冒険の前の準備だと思って、サクッと済ませてしまおう。
- インストール
pip install synapse-a2a
- 初期設定
設定ファイルや初期インストラクションのテンプレートが .synapse/ に生成される。冒険者ギルドへの登録みたいなものだ。
synapse init
- Skills のインストール
エージェントにパーティ連携の知識を持たせるために、Skill を入れておく。これを入れると、エージェントは A2A 通信や File Safety の使い方を最初から理解してくれる。
npx skills add https://github.com/s-hiraoku/synapse-a2a --skill synapse-a2a
いわば「パーティ連携の魔導書」を渡しておくイメージだ。渡さなくても動くが、渡しておくと察しが良くなる。
Episode 1:パーティ編成 ── 仲間たちの紹介
フリーレン(Claude Code)── 千年の知識を持つ魔法使い
長大なコンテキストを把握し、複雑な設計やリファクタリングを得意とする。「この魔法(コード)、10年前に書いたやつに似ているね」と淡々と言いながら、根本原因を見抜く。
synapse claude # ポート8100で静かに待機

シュタルク(Codex)── 不器用だけど一撃必殺の戦士
「えっ、俺がやるの?」と言いつつ、サンドボックスの中でテストコードをゴリゴリ書く実装の鬼。前衛で黙々と戦う。
synapse codex # ポート8120で待機
フェルン(Gemini)── 真面目で調査に強い弟子
最新の仕様変更を即座に調べ上げ、「フリーレン様、仕様が変わっています」と報告してくれる。Web検索とドキュメント調査はお手のもの。
synapse gemini # ポート8110で待機
Episode 2:エージェントを繋ぐ魔法
パーティの状態を確認する
3つのターミナルでエージェントを起動したら、まずはパーティの状態を見てみよう。
synapse list
フリーレンが静かに待機し、シュタルクが前線で構え、フェルンが後方に控えている──そんな光景が、ターミナルに表示されるはずだ。

これがパーティのステータス画面だ。RPGでいうメニュー画面を開いた感覚に近い。全員のポート番号、状態(READY / PROCESSING)が一目でわかる。
仲間に話しかける
連携の方法はとてもシンプルだ。フリーレン(Claude Code)のターミナルで、こう頼むだけでいい。

フリーレンはパーティの存在を知っている。名前を呼べば、Synapse がメッセージを相手に届けてくれる。呪文の詠唱も、特別な構文もいらない。ただ仲間の名前を呼ぶだけ。
仕組みとしては、各エージェントがそれぞれ A2A サーバーとして動いていて、Synapse がメッセージを相手のエンドポイントに POST している。中央サーバーはない。全員が対等な P2P 構成だ。
魔法使い同士のテレパシーではなく、異なる種族でも通じる共通語。それが Google A2A(Agent-to-Agent)Protocol だ。
Episode 3:パーティで狩る
ここまでで、仲間は揃った。繋がった。
あとは、実際に狩るだけだ。
フリーレンはリーダーだ。仲間の力を把握し、的確に指示を出す。
作戦開始
フリーレン(Claude Code)のターミナルで、こう指示する。
auth.py にバグがある。
シュタルクにユニットテストを書いてもらって。正常系とトークン期限切れの異常系。
フェルンに auth.py が依存しているライブラリの最新仕様を調べてもらって。
フリーレンが一言伝えるだけで、シュタルクはテストを書き始め、フェルンは仕様を調べに走る。
リーダーは全体を見る。前衛は前衛の仕事を、後衛は後衛の仕事をする。
テストと調査結果が揃ったら、フリーレン自身が実装に入る。
シュタルクのテストとフェルンの調査結果をもとに、auth.py を修正して
一つのターミナルから、パーティ全体が動く。
同じファイルには同時に手を出さない
ただし、パーティで動くからこその危険もある。
フリーレンが auth.py を書き直している最中に、シュタルクも auth.py を触ろうとしたら?──衝突して、どちらかの変更が消える。ダンジョンの狭い通路で味方同士がぶつかるようなものだ。
Synapse A2A には File Safety という仕組みがある。
export SYNAPSE_FILE_SAFETY_ENABLED=true
synapse claude
これを有効にすると、あるエージェントがファイルを編集中は、他のエージェントの書き込みがブロックされる。
フリーレン → auth.py のロックを取得 → ✅
シュタルク → auth.py に書き込もうとする → 🚫(フリーレンが編集中)
フリーレン → ロック解放
シュタルク → auth.py のロックを取得 → ✅
リーダーが作戦を立てても、同じ場所に突っ込んだら意味がない。仕組みで守れるものは仕組みで守る。冒険者の基本だ。
エピローグ:旅はまだ続く
フリーレンは知っている。
本当に厄介な魔族は、一人では倒せないことを。
前線で盾になる者がいる。
後方で魔導書を読み解く者がいる。
そして、全員を繋ぐ魔法がある。
違うまま、一緒に戦う。
それがパーティだ。
synapse claude # フリーレン、出発
synapse codex # シュタルク、続け
synapse gemini # フェルン、頼んだ
「また同じバグを倒すの?」
「ええ、でも今度はパーティで」
開発者あとがき
ここからは「相送のフリーレン」の世界を離れて、少しだけ。
Claude Code・Codex・Gemini を普段から併用する中で「これ、お互いに話せたらいいのに」と思って作り始めたもので、ほんとただの趣味です。
実用的かと聞かれると、正直まだわからない。ただ、違うエージェントが連携して動く様子は、眺めているだけで面白かった。
今回はフリーレンのパーティで遊びましたが、Name と Role を変えれば誰でもパーティを組めます。好きな作品のキャラで試してみてください。意外とそれだけで楽しい。もちろんキャラ設定はせず、もっと実用的にも使えます。
興味を持ってくれた方は、ぜひ触ってみてください。Issue も PR も大歓迎です。ちなみにバグもいっぱいです。
この記事を書こうと思ったのは、こちらのブログのおかげです。
デモ環境について
このデモでは VS Code で以下の拡張機能を使って動作させていました。仕事では VS Code を使っているので、AI を使うときにちょっと楽しく便利にできないかなと思って作ったものです。こちらもよかったら触ってみてください。
エージェントスケーリングについて
「マルチエージェント、面白いのはわかったけど、どんなタスクで使うべきなの?」という疑問もあると思います。こちらの記事で、参考になる論文を読みやすくまとめています。エージェントを増やすべきか判断する意思決定フローも用意したので、あわせてどうぞ。
あとXのフォローもよろしくお願いします!
※ 本記事は「葬送のフリーレン」(原作:山田鐘人、作画:アベツカサ)の世界観・キャラクターを比喩として使用した技術記事です。作品の内容を正確に再現するものではありません。
Discussion