QR Send

スマホとPCのChrome間で、URLやテキストをQRコード1回のペアリングで送り合える自作Chrome拡張。アカウント不要・無料。

使ってみる →

Claude Codeの「Agent Teams」って何?subagent・git worktreeとの違いと使い分け

Selenium・自動化

サブエージェントは使っている。でも「チーム」にはなっていない

Claude Codeのサブエージェント(.claude/agents/*.mdで役割を絞ったエージェント)は毎日使っています。設計はfable5、実作業とテストはsonnet5、というくらいには自分の運用にも組み込んでいます。ただ、サブエージェントは基本的に親セッションから見て「投げたら要約が返ってくる箱」です。サブエージェント同士が直接会話することはありませんし、親を経由せずに勝手に連携することもありません。

正直、これで困ったことはあまりありませんでした。ただ最近「Agent Teams」という機能名をちらほら見かけるようになり、じゃあこれはサブエージェントと何が違うのか、気になって公式ドキュメントと複数の解説記事を読み比べてみました。結論から言うと、思っていたより別物でした。

まずサブエージェントのおさらい

サブエージェントは1つのセッションの中で動きます。親セッションが仕事を切り出して渡し、サブエージェントがその場で処理して、結果を要約して親に返す。それで終わりです。

親セッション
 └─ サブエージェントA(コードレビュー)を起動 → 結果を要約して返す
 └─ サブエージェントB(テスト実行)を起動 → 結果を要約して返す

コンテキストを汚さずに重い調査や単発の作業を任せられるのが強みで、通信経路は常に「親↔子」だけです。子同士が横でやり取りすることはありません。ここまでは以前の記事(スラッシュコマンド総まとめ)でも触れた通りで、私の日々の運用も基本これです。

Agent Teamsは何が違うのか

Agent Teamsは、複数のClaude Codeセッションが1つの共有タスクリストを介して協調する仕組みです。WebSearchで複数の解説記事を照合したところ、次のような構造で説明されています。

  • 1つのセッションが「チームリード」になり、目標をタスクに分解して共有タスクリストに積む
  • 他のメンバー(チームメイト)は、それぞれ独立したセッション・独立したコンテキストウィンドウとして起動する
  • メンバーはタスクリストからタスクを取り、実行し、完了にして、次のタスクを取る
  • メンバー同士はリードを経由せず、共有タスクリスト経由で直接メッセージし合える

ここが一番の違いだと思いました。サブエージェントは「親→子」の一方向的な委任ですが、Agent Teamsは「メンバー同士が直接会話する」設計です。実装的にはTeamCreate・TaskCreate・SendMessageといったツールが使われている、という記述を複数の記事で見かけました(この3つの名前は執筆時点の解説記事に基づくもので、今後変わる可能性はあります)。

執筆時点では実験的機能、というのを正直に書いておきます

複数の記事で共通して書かれていたのが、Agent Teamsは執筆時点で実験的機能であり、デフォルトでは無効という点です。有効化には環境変数が要るという記述が複数の記事に出てきました。

{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}

settings.jsonにこう書くか、シェルで同名の環境変数をエクスポートしてから起動する、という方法が紹介されていました。有効化したうえで「PR #142をレビューして。セキュリティ担当・パフォーマンス担当・テストカバレッジ担当の3人チームを組んで」のようにプロンプトで頼むと、Claude Code側が必要と判断したタイミングでチームを組んでくれる、という動き方のようです。実験的機能なので、フラグ名や挙動は今後変わる可能性があります。使う前に必ず公式ドキュメント(code.claude.com/docs/en/agent-teams)で最新の状態を確認してください。

git worktreeは「土台」。Agent Teamsとは別の話

ここで整理しておきたいのがgit worktreeです。Agent TeamsとセットでWebで語られることが多いのですが、worktree自体はAgent Teams専用の機能ではありません。git本体の仕組みで、同じリポジトリを複数のブランチ・複数のディレクトリで同時にチェックアウトできる、というものです。

Claude CodeにはこのworktreeをCLIから直接使うオプションが用意されています。

claude --worktree

これを使うと、Claude Codeが自分専用のworktree(=専用の作業ディレクトリ)の中でセッションを開始してくれます。名前を自分で付けることも、Claudeに決めさせることもできるようです。デスクトップアプリでは新しいセッションごとに自動でworktreeが割り当てられる、という記述も見かけました。同じリポジトリで複数のセッションを並行して走らせても、片方の編集がもう片方のファイルを巻き込まない、という点が要になります。

なぜ「組み合わせる」と便利なのか

ここで最初の疑問に戻ります。サブエージェント止まりだった自分が次に持つ疑問は「複数のClaude Codeを本当にチームとして協調させるにはどうするのか」でした。答えはこうです。

  • Agent Teamsが担当するのは仕事の割り振りと会話(共有タスクリスト・メンバー間メッセージ)
  • git worktreeが担当するのはファイルの衝突回避(メンバーごとに専用の作業ディレクトリ)

複数の解説記事では、Agent Teamsのメンバーごとに別のworktreeを割り当てる運用がセットで紹介されていました。メンバーAがフロントの修正、メンバーBがAPIの修正を同時に進めても、それぞれ自分のworktreeで作業しているので、同じファイルを取り合って壊す、という事故が起きにくくなるという理屈です。逆に言うと、Agent Teamsだけを有効にしてworktreeを使わなければ、複数メンバーが同じ作業ディレクトリのファイルを同時に触りにいってしまう可能性がある、ということでもあります。ここは「組み合わせて初めて安心して回せる」構成だと理解しました。

worktreeを使う場合は、.gitignore.claude/worktrees/を足しておく、という注意書きも見かけました。worktreeの中身がメインの作業ツリーに未追跡ファイルとして出てきてしまうのを防ぐためのようです。

3つの違いを表にまとめる

仕組み 実行単位 やり取りの経路 ファイル分離
サブエージェント 親セッション内で動く 親↔子(要約のみ) 特になし
Agent Teams メンバーごとに独立セッション 共有タスクリスト経由で直接メッセージ それ自体は担当しない
git worktree (機能ではなく土台) 該当なし メンバーごとに専用の作業ディレクトリ

こう並べると、Agent Teamsとworktreeはレイヤーが違うことがよく分かります。Agent Teamsが「誰が何をやるか」を決め、worktreeが「それぞれどこで作業するか」を決めている、という役割分担です。

正直、まだ全部を使いこなせていません

ここまで調べておいて言うのもなんですが、私自身はAgent Teamsをまだ本番運用に組み込めていません。今の自分のタスクは、1コマンドで終わるものと、サブエージェントに投げて要約をもらえば十分なものがほとんどで、複数メンバーが直接会話しながら並行作業する規模の仕事がまだ来ていない、というのが正直なところです。トークン消費もサブエージェント単体より重くなる、という記述を複数の記事で見かけたので、小さい作業にAgent Teamsを持ち出すのはかえって高くつく可能性があります。「大きく複雑な仕事で役割分担がはっきりしている場合はAgent Teams、それ以外はサブエージェントで十分」というのが、今のところの自分の感覚です。

実験的機能である以上、環境変数の名前もツールの挙動も、この記事を書いている数ヶ月後には変わっているかもしれません。試す際は必ず公式ドキュメントの最新版を確認してください。

まとめ

サブエージェントは1セッション内で完結し、親に要約だけを返す仕組みです。Agent Teamsはそれとは別物で、メンバーそれぞれが独立したセッションとして起動し、共有タスクリストを介して直接やり取りします。git worktreeはAgent Teams専用の機能ではなく、同じリポジトリを複数のディレクトリで同時に触るための土台で、Agent Teamsと組み合わせるとメンバーごとに専用の作業場所を持てるようになります。まずは自分の手元でclaude --worktreeを試して、worktreeの感覚をつかんでおくのがいいと思います。Agent Teamsを実際に回してみた話は、また改めて書きたいと思っています。

コメント

タイトルとURLをコピーしました