Claude Codeを育てる - Part 5:Subagent実装編

Part 4(拡張編)で Skills と Subagents の使い分け(コンセプト)を扱った。 Subagent は概念は分かっても「どう実装するか」で詰まることが多い。今回はそこに踏み込む。

ただし答える前に、立場をはっきりさせておきたい。


■ 複数エージェントを「対等に」扱う構成には反対

最近、AI界隈ではこういう発信が流行っている。

別の記事(「AIエージェントを『組織化』するのはまだ早い」)でも書いたが、この構成には反対

理由:


■ 一方、階層的な Subagent は「あり」

対等な合議は反対だが、メインエージェントが Subagent を呼び出す階層構造は別の話

この構造なら:

つまり「対等にしない」「会話させない」「最終判断は人間」という制約のもとで使う。 Part 4(拡張編)で書いた発想と同じ。


■ Subagent の使いどころ(おさらい)

向いているケース:

避けたいケース:


■ Step 1:ディレクトリを作る

project-root/
  .claude/
    agents/
      code-reviewer.md
      security-reviewer.md
      research-explorer.md

.claude/agents/ に1ファイル=1つのSubagent。 ファイル名(拡張子除く)と frontmatter の name を揃えておくと管理が楽(厳密には必須ではないが、揃えないと「どのファイルがどの Subagent か」が分からなくなる)。

frontmatter とは、Markdown ファイルの冒頭に --- で囲んで書く YAML メタデータブロックのこと。Subagent の場合、ここに name / description / tools / model などの設定を書く。実物は次の Step 2 で出てくる。


■ Step 2:Subagent ファイルを書く

.claude/agents/code-reviewer.md:

---
name: code-reviewer
description: コードレビューを責務分離・KISS/SOLID・セキュリティ・
  エラーハンドリング・テスト容易性の観点で実施する。
  メインエージェントが「レビューを依頼」する時に呼び出される。
  最終的な採用判断はメインエージェント+人間が行う。
tools: Read, Grep, Glob, Bash
model: sonnet
---

# Code Reviewer

あなたはコードレビュー専任のエージェントです。
メインエージェントから依頼されたコード/差分をレビューし、
指摘事項をリストで返してください。

## レビュー観点

- 責務分離(1ファイル/1関数の責任が肥大化していないか)
- KISS / SOLID(過剰抽象化・複雑な継承)
- セキュリティ(入力検証、認可、シークレット混入)
- エラーハンドリング(握り潰し、再raise、エラー型)
- テスト容易性(依存注入、副作用の局所化)

## 出力フォーマット

| ID | Severity (high/medium/low) | Category | Problem | Required Action | Verification |

## 制約

- 最終的な採用/不採用の判断はしない(メインに渡すだけ)
- ファイル編集はしない(読み込みと指摘のみ)
- 独自の判断で他のSubagentを呼ばない

ポイント:


■ Step 3:メインエージェントから呼び出す

メインエージェントは Agent ツール(旧 Task ツール、v2.1.63 でリネーム)経由で Subagent を呼ぶ。

自動呼び出し(description がトリガー):

ユーザー: src/auth/login.ts をレビューして
メイン: code-reviewer Subagent を起動 → 指摘リストを取得 →
  ユーザーに提示 → 「採用しますか?」と確認

明示呼び出し:

ユーザー: code-reviewer に src/auth/login.ts を見せて

注意:呼び出すのはメインエージェントの判断で行う。 Subagent から別の Subagent を呼ばせない(階層を崩さない)。


■ Step 4:上下関係の制約を CLAUDE.md で明文化する

メインエージェント側の CLAUDE.md に書く:

# Subagent 利用ルール

- Subagent はメインエージェントから一方向に呼び出す
- Subagent 同士を直接会話させない
- Subagent の結果を採用するかはメインエージェント+ユーザーが判断
- Subagent に最終判断や本番デプロイ等の重い操作をさせない

これは Part 3(説得編)の延長。 「対等にしない」を仕組みで明文化する

書かないと、Claude が「組織化された複数エージェント」のパターンを学習しているので、勝手に Subagent 同士を協調させようとすることがある。


■ Step 5:動作確認(再現テスト)

  1. Subagent ファイルを配置
  2. 簡単なタスクをメインから依頼
  3. 期待通り Subagent が呼ばれるか確認
  4. 別セッションでも呼び出せるか確認(Part 6 で扱う再現テストと同じ考え方)

呼び出されない場合の典型的な原因:


■ 最初に作ると効く Subagent

逆に作らないほうがいいもの:


■ アンチパターン

実装で詰まる代表例:


■ 今回のまとめ

複数エージェントを対等に扱う構成には反対。 だが、階層的な Subagent はあり

実装の鍵:

この制約のもとで Subagent を使うと、メインの context を汚さず、合議による精度低下も避けられる。

これがシリーズで一貫して言ってきた「上下関係を明確にする」の実装側。

次回 Part 6 はシリーズ最終回 — 運用編。仕組みを使い続けるための改善ループとアンチパターンを扱う。