- AI ⚙️
- Claude
- 技術 💻
Claude Codeサブエージェントの使い方|実測で見る委任とコンテキスト節約
Claude Codeのサブエージェントとは、メインの会話とは別のコンテキスト(作業用の記憶領域)で動き、結果だけを返してくれる専門の作業役です。 たくさんのファイルを読む調査や、ログの読み込みのように「途中経過は多いが、欲しいのは結論だけ」という作業を任せると、メインの会話をすっきり保てます。
この記事では、Claude Code v2.1.283 で、12ファイル・約97KBの小さなサンプルリポジトリを使って実測しました。メインが自分でファイルを読んだ場合と、サブエージェントに任せた場合で、メインのコンテキストがどれだけ増えたか、descriptionの書き方で自動委任されるかどうか、4つのExploreを並列で動かした結果を数字で紹介します。frontmatterの項目は公式ドキュメント(code.claude.com/docs)の最新版で確認しています。
Claude Codeサブエージェントの早見表
.claude/agents/<名前>.md の先頭(frontmatter)に書ける項目の一覧です。必須は name と description の2つだけで、残りは必要に応じて足します。
| 項目 | 必須 | 書ける値 | 役割 |
|---|---|---|---|
name |
○ | 英小文字とハイフンなど | 識別名。hookでは agent_type として届く |
description |
○ | 文章 | いつ任せるかの判断材料。自動委任の精度を左右する |
tools |
ツール名のリスト | 使えるツールを限定。省略時は使えるツールをすべて継承 | |
disallowedTools |
ツール名のリスト | 特定のツールだけ外す | |
model |
sonnet / opus / haiku / fable / inherit / モデルID |
使うモデル。省略時はメインと同じ | |
permissionMode |
default / acceptEdits / auto / dontAsk / bypassPermissions / plan / manual |
権限モード | |
maxTurns |
正の整数 | 最大ターン数(v2.1.246以降) | |
skills |
スキル名のリスト | 起動時に読み込むスキル | |
mcpServers |
サーバー名や定義 | このエージェントで使うMCPサーバー | |
hooks |
hook設定 | このエージェントの実行中だけ効くhook | |
memory |
user / project / local |
セッションをまたいで学習を残す範囲 | |
background |
true |
常にバックグラウンドで動かす | |
omitClaudeMd |
true |
CLAUDE.mdを読み込まずに起動(v2.1.271以降) | |
effort |
low / medium / high / xhigh / max |
思考の深さ | |
isolation |
worktree |
一時的なgit worktreeで隔離して動かす | |
color |
red / blue / green など8色 |
一覧での表示色 | |
initialPrompt |
文章 | --agent でメインとして起動したときの最初の入力 |
本文(frontmatterの下)はそのエージェント専用のシステムプロンプトになります。本文はエージェントが動くときにだけ読み込まれるので、細かい手順はdescriptionではなく本文に書くのがコツです。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Claude Codeサブエージェントの使い方|実測で見る委任とコンテキスト節約」
サブエージェントのしくみ
サブエージェントは、メインから「依頼文」を受け取り、自分専用のコンテキストでファイルを読んだりコマンドを実行したりして、最後の回答だけをメインに返します。
flowchart LR
U[あなた] --> M[メインの会話]
M -- 依頼文 --> S[サブエージェント<br>別のコンテキスト]
S -- Read / Grep / Bash --> F[(ファイル群)]
S -- 結論だけ --> M
M --> U
メインから見ると、ファイルの中身や途中の試行錯誤は自分のコンテキストに入らないのがポイントです。そのかわり、サブエージェントはメインの会話の流れを知りません。必要な前提は依頼文に含める必要があります(Claudeが依頼文を組み立てます)。
置き場所と優先順位
同じ名前のエージェントが複数ある場合は、優先順位の高いほうが使われます。
| 置き場所 | 効く範囲 | 優先順位 |
|---|---|---|
| 管理設定(組織配布) | 組織全体 | 1(最優先) |
--agents フラグ(JSON) |
そのセッションだけ | 2 |
.claude/agents/ |
そのプロジェクト(コミットして共有) | 3 |
~/.claude/agents/ |
自分のすべてのプロジェクト | 4 |
プラグインの agents/ |
プラグイン有効時 | 5 |
作り方は、Markdownファイルを直接置くか、Claudeに「〜するサブエージェントを .claude/agents/ に作って」と頼むだけです。なお v2.1.198以降、/agents は対話式の作成ウィザードを開かず、作り方の案内を表示するだけになりました。ファイルの形式は変わっていません。編集したファイルは数秒で自動的に読み込まれます。
組み込みのサブエージェント
自分で作らなくても、最初から次のエージェントが用意されています。
| 名前 | モデル | ツール | 主な用途 |
|---|---|---|---|
| Explore | メインを継承 | 読み取り専用 | ファイル探索・コード検索。CLAUDE.mdは読まない |
| Plan | メインを継承 | 読み取り専用 | プランモードでの下調べ |
| general-purpose | メインを継承 | すべて | 調査と変更を伴う複数手順の作業 |
| claude | メインを継承 | すべて | どれにも当てはまらない作業の受け皿 |
| statusline-setup | Sonnet | — | /statusline の設定 |
| claude-code-guide | Haiku | — | Claude Code自体の使い方の質問 |
「調べるだけ」ならExploreを指名すると、書き込み系のツールを持たないので安心して任せられます。
実測:サブエージェントでメインのコンテキストはどれだけ減るか
検証の条件
| 項目 | 内容 |
|---|---|
| Claude Code | v2.1.283(claude -p の非対話モード、--output-format stream-json) |
| メインのモデル | Sonnet |
| サンプル | 4ディレクトリ・12ファイルのPython(合計約97KB)。TODOコメントは全32件 |
| 依頼文(共通) | 「src 配下のすべての Python ファイルの中身を確認し、モジュールごとの概要(1行)と、TODO コメントの一覧(ファイルパス:行番号 と関数名)および総数を報告してください。」 |
| 測り方 | メインの会話が最初と最後にモデルへ送った入力トークン数(キャッシュ分を含む合計)の差 |
使ったサブエージェント(具体的なdescription版)は次のとおりです。
---
name: code-surveyor
description: コードベースの棚卸し専門。複数ファイルを読んで概要・TODO/FIXMEの一覧・件数をまとめる依頼を受けたら、必ずこのエージェントに任せる(use proactively)。読み取り専用。
tools: Read, Grep, Glob
model: haiku
---
あなたはコード棚卸しの担当です。
- 指定範囲のファイルを読み、モジュールごとの概要を1行で書く
- TODO/FIXME をすべて拾い、`ファイルパス:行番号 関数名` の形式で列挙し、総数を数える
- 最終回答は表と総数だけを簡潔に返す(途中経過やファイル全文は返さない)
結果
| パターン | 委任 | メインのツール呼び出し | メインの入力(最初→最後) | 増加分 | ターン数 | TODO総数 |
|---|---|---|---|---|---|---|
| A. サブエージェントなし(Agentツールを無効化) | なし | Read 12回など計14回 | 39,051 → 86,226 | +47,175 | 15 | 32(正解) |
| B. 具体的なdescription | code-surveyorへ自動委任 | Agent 1回+Read 2回 | 42,592 → 52,541 | +9,949 | 4 | 32(正解) |
| C. あいまいなdescription(「補助エージェント。」) | 委任されず | Bash・Grep・Readなど計15回 | 42,517 → 64,130 | +21,613 | 16 | 32(正解) |
(A の開始時点が約3,500トークン少ないのは、Agentツールを無効にしたため、その説明文とエージェント一覧が入っていないからです。開始時点の値は環境のツール構成で変わるので、増加分で比べるのがおすすめです。)
サブエージェントに任せたBでは、メインの増加が約1万トークンで、自分で全ファイルを読んだAの約5分の1でした。Bでメインが2回Readしているのは、Claudeが「概要がどのファイルもほぼ同じだったので確認する」と判断して抜き取り確認をしたためです。サブエージェントの報告をうのみにせず確かめる動きも見られました。
一方で、サブエージェントの中ではHaikuが約4.5万トークン分のファイルを読んでいます。全体のトークン量が必ず減るわけではなく、「メインの会話を軽く保つ」ための仕組みと考えるのが正確です。なお model: haiku の指定どおり、サブエージェントの応答はHaikuで生成されていました。
descriptionの書き方で自動委任が変わる
BとCは、本文もツールもモデルも同じで、descriptionだけを変えています。
| description | 結果 | |
|---|---|---|
| B | 「コードベースの棚卸し専門。〜の依頼を受けたら、必ずこのエージェントに任せる(use proactively)」 | 自動で委任された |
| C | 「補助エージェント。」 | 委任されず、メインが自分で調査した |
Claudeは依頼内容とdescriptionを照らし合わせて委任先を決めます。公式ドキュメントでも「use proactively」のような言い回しを入れると積極的に任せやすくなると案内されています。各パターン1回ずつの結果なので確率的な差までは言えませんが、書き方の方向性は次の表のとおりです。
| 書き方 | 例 |
|---|---|
| 何の専門かを最初に書く | 「コードベースの棚卸し専門」 |
| どんな依頼で使うかを具体的に書く | 「概要・TODO一覧・件数をまとめる依頼を受けたら」 |
| 任せてほしいことを明言する | 「必ずこのエージェントに任せる(use proactively)」 |
| 性質を短く添える | 「読み取り専用」 |
| 長い手順は本文へ | descriptionは短く保つ(全エージェント合計が大きいと起動時に警告) |
コンテキストの中身は /context で確認できる
対話中は /context で、いまのコンテキストの内訳(システムプロンプト、ツール定義、会話メッセージ、空き容量など)を表で確認できます。claude -p "/context" のように非対話でも動き、この検証環境では次のような表が出ました(抜粋)。
**Tokens:** 35.4k / 500k (7%)
| Category | Tokens | Percentage |
| System prompt | 4.7k | 0.9% |
| System tools | 29.1k | 5.8% |
| Messages | 8 | 0.0% |
| Free space | 431.6k | 86.3% |
大きな調査の前後で /context を見て「Messages」が大きく増えているなら、その種の作業はサブエージェントに任せる候補です。
並列実行:4つのExploreを同時に動かす
依頼文で「別々のサブエージェントで並列に」と指示すると、メインは1回の応答の中でAgentツールを複数同時に呼び出します。実際に次の依頼で試しました。
src/inventory, src/shop, src/users, src/report の4ディレクトリを、それぞれ別の Explore サブエージェントで並列に調査してください。各サブエージェントには、担当ディレクトリの TODO コメントの件数と該当関数名だけを返させ、最後に合計を表にまとめてください。
実行結果の要点は次のとおりです。
| 項目 | 結果 |
|---|---|
| Agent呼び出し | 同じ応答(同じメッセージID)の中で4回。すべて subagent_type: "Explore" |
| 各エージェントの件数 | inventory 10件、shop 7件、users 12件、report 3件、合計32件(すべて正解) |
| メインの入力の増加 | 42,517 → 45,354(+2,837) |
| 所要時間 | 約24秒 |
返してほしい内容を「件数と関数名だけ」と絞ったことで、メインの増加は3,000トークン弱に収まりました。並列にするときは、担当範囲が重ならないように分けることと、返す形式を指定することの2点を意識すると、まとめやすくなります。
並列数や入れ子には上限があります。
| 項目 | 既定値 | 変え方 |
|---|---|---|
| 同時に動かせるサブエージェント | 20 | 環境変数 CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS |
| サブエージェントがさらに呼べる深さ | メインから3段まで | 環境変数 CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH(1で入れ子なし) |
呼び出し方:自動・指名・セッション全体
| 方法 | 書き方 | 特徴 |
|---|---|---|
| 自動委任 | 普通に依頼するだけ | descriptionに合えばClaudeが選ぶ |
| 自然文で指名 | 「code-surveyor サブエージェントで調べて」 | Claudeが従うかどうかを判断する |
| @メンション | @agent-code-surveyor 〜を調べて |
必ずそのエージェントが動く |
| セッション全体 | claude --agent code-surveyor |
メインのシステムプロンプトがそのエージェントに置き換わる |
| その場限りで定義 | claude --agents '{"reviewer": {...}}' |
ファイルを作らずに試せる |
フォアグラウンドとバックグラウンドも選べます。フォアグラウンドは完了までメインが待ち、バックグラウンドは並行して動いて、完了すると後のターンで通知されます。frontmatterの background: true で常にバックグラウンドにできるほか、実行中に Ctrl+B で切り替えられます。終わったサブエージェントには SendMessage で続きを依頼でき(組み込みのExploreとPlanは除く)、それまでの経緯を引き継いで再開します。
ツール制限とモデル指定の考え方
| 目的 | 設定例 | ねらい |
|---|---|---|
| 調査専用にする | tools: Read, Grep, Glob |
書き込みやコマンド実行をさせない |
| 一部だけ外す | disallowedTools: Bash |
ほかは継承しつつ危険な操作だけ外す |
| 入れ子を防ぐ | tools に Agent を含めない |
そのエージェントからさらに委任させない |
| 軽い作業を速く | model: haiku |
量は多いが判断は単純な作業向け |
| メインと同じ賢さで | model: inherit |
設計判断を含む作業向け |
| 変更を隔離する | isolation: worktree |
本体の作業ツリーを汚さずに試す |
モデルは「呼び出し時の指定 → frontmatterの model → 環境変数 CLAUDE_CODE_SUBAGENT_MODEL → メインのモデル」の順で決まります。どのモデルで動いたかは /tasks で確認できます。
よくある失敗と対処
| よくある失敗 | 起きること | 対処 |
|---|---|---|
| descriptionが短すぎる・抽象的 | 自動で委任されない(実測C) | 専門・使う場面・「use proactively」を書く |
| 手順をdescriptionに全部書く | 全エージェント分が常に読み込まれて重くなる | 手順は本文へ移す |
| 返す形式を指定しない | 長い報告が返り、メインが結局重くなる | 「表と総数だけ」など形式を本文で指定 |
| 会話の前提が伝わっていない | 的外れな調査になる | 前提は依頼文に書く(サブエージェントは会話履歴を見ない) |
tools を省略したまま調査を任せる |
書き込み系ツールも使える状態になる | 調査専用なら Read, Grep, Glob に絞る |
| 並列の担当範囲が重なる | 同じファイルを何度も読み、結果の統合が難しい | ディレクトリなどで範囲を分ける |
| 結果をうのみにする | 数え漏れなどに気づけない | 件数の確認など、メイン側で軽い検算をする |
なお、使い分けを一言で言うと、CLAUDE.mdやSkillsは「メインに知識や手順を足す」仕組み、サブエージェントは「別の担当者に任せて結果だけ受け取る」仕組みです。
よくある質問
Q. サブエージェントを使うと料金は安くなりますか?
A. 安くなるとは限りません。サブエージェントも自分のコンテキストでファイルを読むため、その分のトークンを使います。実測でも、メインの増加は約5分の1になった一方、サブエージェント側で約4.5万トークンを読み込んでいました。model: haiku のように軽いモデルを指定すると、全体の負担を抑えやすくなります。
Q. サブエージェントはメインの会話やCLAUDE.mdを見られますか?
A. 会話の履歴は見られません。CLAUDE.mdは、ExploreとPlanを除き通常は読み込まれます(omitClaudeMd: true で読み込まないようにもできます)。
Q. 自動で委任されないときは、どうすればよいですか?
A. まずdescriptionを具体的にします。確実に動かしたいときは @agent-名前 で指名するのが確実です。
Q. /agents で作成画面が開きません。
A. v2.1.198以降は仕様として作成ウィザードが開かなくなりました。.claude/agents/ にファイルを置くか、Claudeに作成を頼んでください。
まとめ
- サブエージェントは別のコンテキストで動き、結論だけを返す専門の作業役
- frontmatterの必須は
nameとdescriptionだけ。手順は本文に書く - 実測では、任せたほうがメインのコンテキスト増加が約5分の1(+47,175 → +9,949)
- descriptionを具体的にすると自動委任され、あいまいだと委任されなかった
- 並列実行は「範囲を分ける」「返す形式を絞る」で、4並列でもメインの増加は3,000トークン弱
- 調査は
toolsを読み取り系に絞り、軽い作業はmodel: haikuで任せる - 全体のトークンが必ず減るわけではない。メインを軽く保つための仕組みとして使う
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Claude Codeサブエージェントの使い方|実測で見る委任とコンテキスト節約」
株式会社RJCでは、AIエージェントに仕事をうまく任せる設計のコツを、プロジェクトの中で仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。