2026.03.04

Claude CodeによるAI駆動開発 〜Subagents と Agent Teamsの比較〜

導入

こんにちは。グループ研究開発本部 次世代システム研究室のH.Oです。ここ最近、AIエージェントのツールの技術的トレンドは一気にAnthropicのClaude Codeへシフトしました。これを受けて全社的にClaude Codeの活用を進める取り組みが始まりました。
今回はClaude CodeのSubagentsとAgent Teamsという二つのマルチエージェント機能を、実際のプロジェクトに投入して比較検証した結果についてご紹介したいと思います。
私のプロジェクトでは、NestJS(サーバー)・Next.js 15(クライアント)・AWS CDK(インフラ)という3つのレポジトリを横断するような実装タスクも多く、一つのIssueがclient・server・infraにまたがることが珍しくありません。こうした状況でAI駆動開発をさらに推し進めるために、Claude Codeを使用するのであればどちらの仕組みが実際の開発業務に適しているのかを実践的に検証しました。

結論ファースト

・小中規模の独立したIssueを複数こなすには、Subagents + Git Worktreeの組み合わせが安定していて品質が高い。
・Agent Teamsはclient・server・infraをまたいだ実装を40分程度で並列に進める爆発力があるが、現時点では出力品質が60〜70%程度にとどまり、手戻りが生じやすい。
・どちらの方式であっても、Claude Codeの設定(permissions・hooks・カスタムAgent)を適切に整えることが、品質の土台として不可欠である。

アジェンダ

・前提:プロジェクト構成とClaude Code設定
・Claude Code SubagentsとAgent Teamsとは
・検証タスク1:Subagentsで12個のIssueを処理する
・検証タスク2:CSV一括登録機能の実装でAgent TeamsとSubagentsを比較する
・設定の詳細
・今後
・まとめ
・最後に

1. 前提:プロジェクト構成

私のプロジェクトでは、以下の4つのレポジトリをmonorepoに近い形で管理しています。
project/
├── client/ # Next.js 15 (TypeScript, Tailwind CSS)
├── server/ # NestJS (TypeScript, GraphQL, TypeORM)
├── infra/ # AWS CDK (TypeScript)
└── .claude/ # Claude Code設定(全体共通)
.claude/ディレクトリがproject配下のルートに置かれており、client・server・infraの3レポジトリに共通するClaude Codeの設定をここで管理しています。こうすることで、各レポジトリにまたがった実装をClaude Codeが一気通貫で行えるようになっています。

2. Claude Code SubagentsとAgent Teamsとは

まず、SubagentsとAgent Teamsという二つの機能の概念的な違いを整理します。
Anthropicの公式ドキュメントには、両者のアーキテクチャの違いを示す以下のような図が掲載されています。
図の通り、Subagentsはメインエージェントが生成し、メインエージェントにのみ結果を報告する、という一方向の関係です。一方、Agent Teamsではチームメイト同士が共有タスクリストを通じて調整し、互いに直接通信することができます。
以下、両者の特性を整理します。

Subagents

SubagentsはClaude Codeのセッション内で動作する特化型のAIアシスタントです。それぞれが独自のコンテキストウィンドウ・カスタムシステムプロンプト・ツールアクセス・独立した権限を持ちます。タスクが完了すると、結果はメインエージェントに返されます。Subagentsはセッション内で動作するため、他のSubagentと直接話すことはなく、すべての調整はメインエージェントが担います。
主な用途は以下の通りです。
・コンテキストを保持しながら、探索と実装をメインの会話から分離する
・使用できるToolを制限することで、動作の安全性を担保する
・特定のドメイン向けの焦点を絞ったシステムプロンプトで、動作を特化させる
Subagentsの動作はカスタムAgentのfrontmatterで細かく制御できます。主なフィールドを以下に示します。
model -> 使用するモデル : inherit(親セッションを引き継ぐ)、claude-opus-4-5
memory -> 知識の蓄積スコープ:project(リポジトリ固有)、global(全プロジェクト共通)
permissionMode -> 権限モード:bypassPermissionsdefault
isolation -> 実行環境の隔離:worktree(独立したGit Worktreeで実行)
maxTurns -> 最大ターン数制限:50など数値で指定
hooks -> ライフサイクルフック:PreToolUse、PostToolUse等
なお、Anthropicが公式に提供しているビルトインSubagentとして Explore(高速コードベース調査・Edit/Write不可)、Plan(実装計画設計)、General-purpose(全ツール利用可の汎用Agent)の3種類が存在します。カスタムAgentはこれらを補完する形でプロジェクト固有の知識・設定を付与できます。

Agent Teams

Agent Teamsは複数のClaude Codeインスタンスをチームとして協調させる仕組みです。1つのセッションがリーダーとして機能し、作業を調整・タスクを割り当て・結果を統合します。チームメイトはそれぞれ独立したコンテキストウィンドウを持ち、共有タスクリストを通じて互いに直接通信します。さらにメールボックスシステムによる非同期メッセージングも行われるため、リーダーを介さずにチームメイト同士が自律的に調整できる点がSubagentsとの最大の違いです。なお、Agent Teamsは現時点では実験的な機能であり、settings.jsonCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1"を設定することで有効化できます。
Agent Teamsには表示モードが2種類あります。デフォルトのIn-processモードはターミナルマルチプレクサ不要で各チームメイトの出力がリーダーセッションに集約されます。一方、Split-paneモードではtmuxまたはiTerm2が必要ですが、チームメイトが独立したターミナルペインで表示され、並行実行の様子を視覚的に確認できます。

 

項目 Subagents Agent Teams
コンテキスト 独自ウィンドウで実行され、結果は呼び出し元エージェントに返される 独自ウィンドウで実行され、完全に独立した状態で動作する
通信 メインエージェントにのみ報告 共有タスクリストとメールボックスを通じて双方向通信
調整 メインエージェントがタスクを管理 共有タスクリストを使ってエージェント同士が自己調整
最適な用途 結果のみが重要な、焦点を絞ったタスク 議論や協力が必要な複雑な作業
トークンコスト 低い 高い(各チームメイトが独立してトークンを消費)
安定性 Stable(本番利用可) Experimental(検証用途)
ネスト 可能(再帰的にSubagentを起動できる) 不可
セッション再開 対応 非対応

3. 検証タスク1:AWS Step Functions / Lambdaを使用したバッチ処理の構成

ここからは実際にClaude Codeにタスクをアサインし、検証した結果を見ていきたいと思います。
まず、Subagentsを用いた検証を行いました。タスクはAWS Step Functions / Lambdaを使用したバッチ処理の構成です。DBからデータを読み取り、加工して別テーブルに書き込み、Applicationがこれを読み取って表示するという一連の実装で、合計12個のIssueを生成しました。データの加工処理は複数のLambdaを構成し、Step Functionで連携することで実装しています。Lambdaのコード・レイヤーの作成、Step Functionの構成、設定等もAWS CDKのコードを実装させることで、Applicationの実装とインフラの構築を区別することなくClaude Codeに委任しました。
タスクの内容は、まずClaude Codeとの対話を通じて仕様を詰めるところから始めています。最終的に確定した要件を元にIssueを生成し、そのIssueを元に実装を行うというフローです。
コーディングとPR作成については、プロンプトをいちいち入力するのは大変面倒なので、以下の処理手順を定義したカスタムコマンドを使いました。
### 実装手順
1. 前処理(対象ブランチをcheckout・pull)
2. Git Worktreeの作成(feature/issue-{番号}-by-subagentブランチ)
3. Worktree環境のセットアップ(husky install / yarn install)
4. 実装(最適なSubagentを選択して実装、テスト・lint・typecheckを実行)
5. PR作成(gh pr createでPRを作成)
6. 後処理(Worktreeの削除)
このコマンドをClaude Codeに読み込ませた上で、Subagentに一つ一つのIssueをこなさせるよう指示しました。
どのIssueを並列で、直列で行うかは私が考えて実行しました。Subagentは実装の際にissueの内容を確認して、frontend-engineernestjs-backend-expertaws-cdk-infra-expertの3つのカスタムAgentの中から最適なものを自律的に選択します。さらに、Subagent自身がIssueの対応順序を考え、並行・直列を判断してGit Worktreeを活用した実装を進めます。
ここで重要なのが、カスタムAgentのfrontmatterにisolation: worktreeを指定するのではなく、コマンドのプロンプト内で明示的にGit Worktreeの作成・削除を定義している点です。これにより、Subagentが処理するIssueごとに独立したブランチが切られ、並行実装の際にファイル競合が発生しないという構造になっています。
結果として、4時間程度でほぼ修正なしに完了することができました。Git Worktreeを使うことで、複数のIssueを並行して進められるため、人間が一件ずつ対応する場合と比べて大幅に効率化されています。

4. 検証タスク2:CSV一括登録機能の実装

次に、Agent Teamsを検証しました。タスクはアプリケーションにCSVインポート機能を追加するというもので、client(Next.js)とserver(Nest.js)にまたがる実装が必要なものです。
こちらもタスクの内容は、まずClaude Codeとの対話を通じて仕様を詰めるところから始めています。最終的に確定した要件を元にIssueを生成し、そのIssueを元に実装を行うというフローです。

Agent Teamsでの検証

Agent Teamsを使用するよう指示を出すと、Claude Codeはまず自律的にタスクをWAVE1とWAVE2というグルーピングに分けて実行順序を提案し、そのままそれを実行しました。clientとserverにまたがるタスクをWAVEに分けることで、依存関係のある実装を先行させながら並行可能なものは同時に進めるという判断を自律的に行いました。
結果は、40分程度での完了という驚異的な速さでしたが、アウトプットの品質は60%程度にとどまり、手戻りが発生しました。速度の観点では非常に優れていましたが、現時点では品質の安定性に課題がある、という判断となりました。
また、Agent Teamsの既知の制限として、セッションの再開(resume)に対応していないという点も実際の業務投入を検討する上で重要な制約です。長時間のタスクを中断してから続きを再開する、という使い方ができないため、一連のタスクを一気に完走させる前提で使う必要があります。

Subagentsでの検証

Agent Teamsで期待できる質のoutputが得られなかったので、同じCSVインポート機能を先ほどと同じコマンドを用いたSubagentsで実装してみました。こちらは3時間程度かかりましたが、アウトプットは70%程度まで品質が向上しました。Agent Teamsよりも時間はかかるものの、品質の安定性という点で現時点でのAgent Teamsよりは優れていました。

5. 設定の詳細

Claude Codeの動作の質は、設定の作り込みに大きく依存します。私のプロジェクトで実際に設定した内容について、ポイントを絞って紹介します。
settings.jsonでは、permissions と hooks を設定しています。
project配下の.claude/settings.jsonには以下のような設定をしています。
{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  },
  "permissions": {
    "allow": [
      "Bash(yarn test)",
      "Bash(yarn lint *)",
      "Bash(yarn build *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "WebSearch",
      "WebFetch",
      "TodoWrite",
      "Task"
    ],
    "deny": [
      "Bash(git add .)",
      "Bash(git add -A)",
      "Bash(git push -f *)",
      "Bash(git reset *)",
      "Bash(rm -rf *)",
      "Bash(*deploy*)",
      "Edit(./.env.*)",
      "Read(./.env.*)"
    ],
    "ask": ["Bash(yarn install *)"]
  },
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit",
        "hooks": [
          {
            "type": "command",
            "command": "FILE=$(jq -r '.tool_input.file_path // empty'); case \"$FILE\" in *.ts|*.tsx) npx prettier --write \"$FILE\"; npx eslint --fix \"$FILE\";; esac"
          }
        ]
      }
    ]
  }
}
permissionsのdenyにはgit add .git add -Aを設定しています。これは、AIが意図しないファイルをステージングしてしまうリスクを防ぐためです。また、.env.*ファイルへのReadとEditを明示的に拒否することで、環境変数の意図しない参照・書き換えを防止しています。一方でもう一つASKというoptionがあり、コマンド実行前に実行可否を実装者に問いかえしてくれるような設定があります。こちらは意図せぬコマンドの実行を防ぐという意味で効果的ではありますが、使いすぎると常に実行状況を監視しなければならなくなるため、Claude Codeにタスクを委任するメリットを享受しにくくなります。
hooksのPreToolUseには、.ts・.tsxファイルの編集前にprettierとeslintを自動実行する設定を入れています。これにより、Subagentが生成したコードに対して自動的にフォーマットとlintの修正が走るため、コード品質の底上げが図れます。
また.claude/agents/配下に、プロジェクトの技術スタックに対応した3つのカスタムAgentを定義しています。Agentの定義ファイルはMarkdownのfrontmatterとシステムプロンプトで構成されており、.claude/agents/(プロジェクト固有)と~/.claude/agents/(グローバル)の両方に配置できます。
frontend-engineer(赤): Next.js 15 / Feature-Sliced Design / GraphQLを専門とするAgent。FSDのlayer boundary違反のチェック、TypeScriptの型安全性の確認、GraphQLのcodegen後の整合性確認などに特化しています。
nestjs-backend-expert(青): NestJS / クリーンアーキテクチャ / TypeORMを専門とするAgent。Domain → Usecases → Infrastructure → Presentersという4層のレイヤー分離を徹底し、TypeORMのmigrationやGraphQL resolverの実装を担います。
aws-cdk-infra-expert(緑): AWS CDKを専門とするAgent。IAMの最小権限原則・暗号化設定・Well-Architected Frameworkの観点からインフラのレビューと実装を行います。
これら3つのAgentはいずれもmemory: projectを設定しているため、過去のセッションで得た知見を.claude/agent-memory/<agent名>/ディレクトリに蓄積し、次回以降のセッションで参照できるようになっています。コードベースのパターン・アーキテクチャ上の決定・よく遭遇するバグなど、プロジェクト固有の知識がAgentの中に積み上がっていく仕組みです。
カスタムコマンドでは、Git Worktreeを活用したSubagentによる実装フローを定義しています。このコマンドが実行されると、Subagentはdevelopブランチを最新化した上でWorktreeを作成し、カスタムAgentを用いて実装を行い、lint・typecheck・testを通過した後にPRを作成し、Worktreeを削除する、という一連の処理を自律的に実行します。

6. 今後の展望

・今回は実装のタスクに注目しましたが、今後はまだ対話的に行っている仕様策定 -> Issue生成のタスクをClaude Codeのskillsに詰め込むことで、実装タスクと合わせて一気通貫で実行できる仕組みに発展させていきたいと考えています。

7. まとめ

・小中規模のIssueを安定して処理するには、Subagents + Git Worktreeの組み合わせが有効。4時間程度でほぼ修正なしに12個のIssueを完了できた。
・Agent Teamsはclient・server・infraをまたいだ実装を40分程度で爆速で処理できた一方で、現時点では出力品質が60〜70%程度にとどまり、手戻りが生じやすい。
・どちらの方式を採用するにせよ、settings.jsonによるpermissions・hooksの設定と、プロジェクト固有のカスタムAgentの定義が品質の土台として不可欠である。
・なお、現時点でのどちらを使うべきかの判断指針をまとめると、品質・安定性が最優先ならSubagents一択と言える状況で、複数レポジトリを同時並行で実装する必要があり、かつ速度を品質より優先できる(手戻りを許容できる)場面でのみAgent Teamsを試す価値がある、という位置付けです。その場合Agent Teamsはリーダーがリポジトリ全体の設定(GitHooks・MCPサーバー・カスタム権限)を引き継ぐため、settings.jsonの整備が前提条件としてより重要になります。

最後に

グループ研究開発本部 次世代システム研究室では、最新のテクノロジーを調査・検証しながらインターネット上の高度なアプリケーション開発を行うエンジニア・アーキテクトを募集しています。募集職種一覧 からご応募をお待ちしています。
  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事