本文へ移動
BenriWorks Lab

連載

Claude Code 集中講座

12回 / 全16

12/16

ガイド公開日

サブエージェントで、調べものを別の文脈へ追い出す

複数の作業が並んだ画面を背に、こちらを向いて立っている男性の開発者

Claude Code 集中講座の第12回。別の文脈で動くサブエージェントの仕組みと、組み込みの種類、自分で定義する方法を扱います。何が渡って何が渡らないかと、分けてはいけない作業も整理します

第8回で、会話が長くなると返答の質が落ちるという話をしました。対策として /compact を挙げましたが、あれは埋まったあとの手当てです。

そもそも埋めない、という手もあります。

「この関数はどこから呼ばれているか」を調べるために20個のファイルを読ませたとして、本流の会話に要るのは結論の1行です。読んだ20個の中身は要りません。サブエージェントは、この20個を別の場所で読ませるための仕組みです。

別の文脈で動く作業者

サブエージェントは、独立した文脈で動く作業者です。本流とは別の文脈を持つので、そこで何をどれだけ読んでも、本流の文脈は増えません。

終わると、結果だけが本流へ返ります。

サブエージェントの文脈の分離を示した図。本流の会話から依頼が渡り、サブエージェント側で多数のファイル読み取りが行われ、結論だけが本流へ返ることが示されている。会話履歴は渡らないことが注記されている
行きは依頼、帰りは結論。途中の読み取りは本流に入らない

組み込みで3つある

自分で定義しなくても、最初から使えるものがあります。

種類何をするか使える道具
Exploreコードベースの検索と把握読み取りだけ
Planプランモードの前の調査読み取りだけ
general-purpose複数の手順にまたがる作業全部

上の2つには、書く道具がありません。調べるだけの作業者には、書く道具を渡さない。第5回で見た「範囲を先に狭める」という考え方が、ここにも現れています。

何が渡り、何が渡らないか

サブエージェントを使うときに知っておくべきなのは、渡らないもののほうです。

渡るものは、前書きの本文から作られるシステムプロンプト、Claude からの依頼、CLAUDE.md の階層(Explore と Plan を除く)、Git の状態、前もって読み込むよう指定したスキルです。

渡らないものは、会話の履歴、本流の自動メモリ、これまでに呼ばれたスキル、そして本流の文脈の大きさです。

会話の履歴が渡らないことが、効き目の源であり、同時に制約でもあります。「さっき話したあの件」は通じません。依頼の文に必要なことを全部書く必要があります。第7回で整理した3つ、文脈と制約と完了の条件が、ここではより効きます。

自分で定義する

.claude/agents/ にマークダウンのファイルを置くと、自分のサブエージェントになります。

---
name: code-reviewer
description: 変更をレビューする。差分の確認を頼まれたときに使う。
tools: Read, Grep, Glob
model: sonnet
permissionMode: plan
---

あなたはこのリポジトリのレビュー担当です。
振る舞いの変化と、足りていないテストに重点を置いて指摘してください。

必須なのは namedescription の2つです。名前は小文字とハイフンで書きます。説明文は、いつ任せるべきかを書く場所で、第10回のスキルと同じくここが呼ばれるかどうかを決めます

任意の指定でよく使うものを挙げます。

項目何を決めるか
tools使わせるツールの一覧
modelsonnetopushaikufable など
permissionModeそのサブエージェントの権限モード
effort考える深さ
isolationworktree にすると独立した作業ツリーで動く
backgroundtrue で背後に回す
memory自分専用の自動メモリを持たせる

置き場所は .claude/agents/ がプロジェクト用、~/.claude/agents/ が個人用です。

呼び方は3通り

自動。作業の内容と description が合えば、Claude が自分で使います。

名指し@code-reviewer のように打つと、そのサブエージェントを指定できます。

セッション全体--agent code-reviewer を付けて起動するか、設定に書きます。

巻き戻しが効かないことを忘れない

第8回で挙げた制約を、ここでもう一度出します。

公式ドキュメントによれば、通常のサブエージェントの編集は、セッションのチェックポイントに入りません/rewind を選んでも戻りません。Git で戻すことになります。

例外は、前面で走るフォークのスキルです。第10回で触れた context: forkbackground: false で走らせた場合、あなたの回の中で作業ツリーを編集するので、巻き戻しの対象になります。

つまり、書かせるサブエージェントを使うときは、その前にコミットしておくのが安全です。これは面倒に見えますが、逆に言えば、コミットの粒度を依頼の単位に揃えておけば自然に満たされます。

分けてよい作業、分けてはいけない作業

分けてよいのは、結論が短くまとまる作業です。調査、検索、レビュー、特定の条件に合うファイルの列挙。どれも、途中で読んだものは要らず、結果だけが要ります。

分けてはいけないのは、本流の判断とかみ合っている作業です。「この設計でよいか一緒に考える」をサブエージェントに投げると、会話の履歴が渡らないので、それまでの検討が全部抜け落ちます。同じ議論をもう一度することになります。

判断の目安は、その作業を人に頼むとして、背景の説明にどれくらいかかるかです。1段落で足りるなら分けられます。30分の説明が要るなら、分けないほうが速く終わります。

会話全体を引き継がせたいとき

背景の説明が長い場合の逃げ道が1つあります。フォークです。

フォークのサブエージェントは、本流の会話全体を引き継ぎます。システムプロンプト、ツール、モデル、そしてメッセージの履歴です。/subtask から始められます。

使いどころは、「いまの流れのまま、別のやり方も試してみたい」という場面です。第8回の /branch が会話そのものを分岐させるのに対し、フォークは作業だけを分けて結果を本流へ返します。

並べたときに何が起きるか

サブエージェントを複数動かすと、同時に複数の作業が進みます。速くなるように見えますが、そうとは限りません。

読む側が1人だからです。3つのサブエージェントが同時に結果を返しても、それを読んで判断するのはあなたです。出てくる速さが上がっても、読む速さは変わりません。

第14回で並行作業をまとめて扱いますが、結論を先に書いておくと、並べて効くのは「待ち時間が長く、結果が短い」作業だけです。調査は向きます。実装は向きません。

次の回

サブエージェントは、作業を分ける仕組みでした。ただ、どれも Claude が判断して動くものです。

第13回では、判断を挟まずに必ず起きることを決めます。フックという仕組みです。第9回で「CLAUDE.md は強制ではない」と書いた、その先の話になります。

参照した公式情報

  • Anthropic「Subagents」「Checkpointing」「Skills」(code.claude.com/docs、2026年9月時点)

よくある質問

サブエージェントは何のためにありますか
長い調査や大量の検索の結果で、本流の会話が埋まるのを防ぐためです。別の文脈で作業させ、結論だけを本流へ返します。第8回で扱ったとおり、会話が長くなるほど返答の質は落ちるので、埋めなくてよいものは外へ出すのが効きます。
サブエージェントの編集は巻き戻せますか
多くの場合は戻せません。公式ドキュメントによれば、通常のサブエージェントの編集はセッションのチェックポイントに入らないため、`/rewind` では戻りません。Git で戻すことになります。前面で走るフォークのスキルだけが例外です。
自分で定義するには何が要りますか
`.claude/agents/` にマークダウンのファイルを1つ置きます。前書きに `name` と `description` が必須で、使えるツール、モデル、権限モードなどを任意で指定できます。本文がそのサブエージェントのシステムプロンプトになります。

こんな記事も読まれています