Claude Code サブエージェントの最適構成:Opus で考え、Sonnet で動かす

Claude Codeのサブエージェントを「Opusで計画、Sonnetで実行」の構成で最適化。バックグラウンド並列実行とドキュメント出力で、トークン節約と時間効率を両立する実践的な設計手法を解説します。

はじめに

ども!GitHub CopilotとClaude Codeの間で反復横跳びしつつ、夜はしっぽりClaude Codeにすり寄っている龍ちゃんです。

前回・前々回と、Claude Codeのトークン消費を抑える話をしてきました。

でも、まだトークン消費が気になる場面があるんですよね。特にサブエージェントを使うとき。

そういえばサブエージェントについて、しっかり調べて設計を考えたことがなかったなと反省しまして。今回はサブエージェントの最適構成について話していきます。

結論から言うと:

  • 計画はOpus、実行はSonnetがベスト
  • バックグラウンド実行で待ち時間ゼロ
  • ドキュメント出力で非同期でも結果を取得

これ、調べたらClaude Code公式も推奨していて、内部でも実際そうなっているらしいんですよね。


なぜ Opus + Sonnet 構成なのか

Opus は最高(お気持ち表明)

正直に言います。Opusと話すのがめちゃくちゃ楽しいんですよ。

Sonnetだと、自分の意図を正確に理解してもらうのに労力が必要だったんですよね。でもOpusは雑なプロンプトでも意図を察してくれるし、「こういうことですか?」って確認を取ってくれる。

Claude Codeの利用制限(5時間制限、Sonnet制限など)を意識するようになって、トークンを馬鹿食いしている箇所を調べるようになりました。そこで気づいたんです。全部Opusでやる必要はないってことに。

Sonnet のポジション

公式のモデル比較を見てみましょう。

モデル入力 ($/M tokens)出力 ($/M tokens)SWE-bench
Opus 4.5$5$2580.9%
Sonnet 4.5$3$1577.2%
Haiku 4.5$1$573.3%

SWE-benchで見ると、Opus 80.9%に対してSonnet 77.2%。差は3.7ポイントしかないんですよね。実行系タスクには十分な性能です。

数ヶ月前はSonnetをずっと使っていたので、Sonnetでも十分なのは体感としてわかっていました。

実際、モデルの組み合わせについては外部の分析でも言及されています。

“Mixing models works best. Switching between models depending on task type made workflows faster and safer. Haiku for setup, Sonnet for builds, Opus for reviews — that combo just works.”

— Claude Haiku 4.5 Deep Dive

公式も推奨している

Claude Codeには opusplan というモデル設定があります。

The opusplan model alias provides an automated hybrid approach:

  • In plan mode – Uses opus for complex reasoning and architecture decisions
  • In execution mode – Automatically switches to sonnet for code generation and implementation

— Claude Code Model Configuration

つまり、計画時はOpus、実行時はSonnetに自動で切り替わるモードです。公式がこの構成を推奨しているってことですね。

さらに、Anthropicのマルチエージェント研究によると:

指標結果
単一Opus比でのパフォーマンス向上90.2%
並列化による時間削減最大90%

A multi-agent system with Claude Opus 4 as the lead agent and Claude Sonnet 4 subagents outperformed single-agent Claude Opus 4 by 90.2% on their internal research eval.

— Multi-Agent Research System

Opus + Sonnetの組み合わせは、単一Opusより性能が高い。これ、めっちゃ重要な知見ですよね。


サブエージェントとは

Claude CodeのTask toolを使うと、サブエージェントにタスクを委譲できます。

特徴:

  • 独立したコンテキストウィンドウ:メイン会話とは別のコンテキストで動く
  • モデル指定が可能:model: sonnet や model: haiku を指定できる
  • ビルトインエージェント:Explore(コードベース探索)、Plan(設計計画)などが用意されている

エージェント定義の例(公式ドキュメントより):

---
name: code-reviewer
description: Reviews code for quality and best practices
tools: [Read, Glob, Grep]
model: sonnet  # sonnet, opus, haiku, inherit から選択
permissionMode: acceptEdits  # ファイル書き込みを自動許可
---

model: sonnet を指定するだけで、そのエージェントはSonnetで動きます。簡単ですね。


バックグラウンド実行のメリット

サブエージェントの設計を考えていて気づいたんですが、タスクを分割するとバックグラウンドで実行できるんですよね。

待ち時間ゼロ

フォアグラウンドで実行すると、その処理をずっと占有してしまいます。レビュー待ちの間、ただ待っているのはもったいない。

バックグラウンドで実行すると:

  • サブエージェントを起動したらすぐ次の作業へ
  • レビュー待ちの間にコードを書ける
  • 完了したら自動で通知が届く

並列実行

複数のエージェントを同時に起動できます。

メイン会話 (Opus)
    ├─→ technical-accuracy-reviewer (Sonnet) [バックグラウンド]
    ├─→ content-reviewer (Sonnet) [バックグラウンド]
    └─→ seo-reviewer (Sonnet) [バックグラウンド]

3つのレビューを並列で回せば、時間効率が大幅に向上します。

制約を理解する

ただし、バックグラウンド実行には制約があります。

項目フォアグラウンドバックグラウンド
権限プロンプト都度確認事前に一括取得
MCPツール✅ 使用可❌ 使用不可
AskUserQuestion✅ 可能❌ 失敗(継続はする)
WebSearch/WebFetch✅ 使用可✅ 使用可

Background subagents run concurrently while you continue working. Before launching, Claude Code prompts for any tool permissions the subagent will need, ensuring it has the necessary approvals upfront.

— Create custom subagents

MCPツールが使えないのは注意ポイントです。MCP使う系のサブエージェントはフォアグラウンドで動かすしかありません。

ただ、リポジトリ内の作業やレビューはMCP不要で実現可能です。WebSearchやWebFetchはバックグラウンドでも使えるので、外部情報の取得も問題ありません。


ドキュメントベースの進捗管理

フォアグラウンドのいいところは、進捗がすぐわかることですよね。バックグラウンドだとどうするか?

解決策:ドキュメントベースで結果を吐き出させる

なぜファイル出力が良いのか

  • バックグラウンドだと会話に直接返せない
  • 応答に書いてもらうとコピペが面倒
  • コンパクト(要約)すると参照できなくなる
  • レビュー系は議論になることもあるので、ドキュメント出力が重要

僕もClaude Codeと「俺はこう考えてるんだけど」みたいな議論をよくするんですが、そういうときにドキュメントがあると便利なんですよね。

出力形式の設計

僕が使っているレビューエージェントでは、こんな形式で出力しています。

---
type: review
agent: content-reviewer
model: sonnet
target: docs/article/xxx/article.md
timestamp: 2026-02-02T14:45:00+09:00
status: completed
scores:
  content_quality: 82
---

ポイント:

  • YAMLフロントマターでメタデータを構造化
  • タイムスタンプ付きファイル名で競合回避(content-2026-02-02T1445.md)
  • 機械的に抽出可能:スコアなど取得したい情報をプログラムで取り出せる
  • Git管理できる(履歴が残る)

実践:レビューエージェントを作る

実際に僕が使っているブログレビューエージェントの構成を紹介します。

エージェント定義

.claude/agents/content-reviewer.md:

---
name: content-reviewer
description: 技術ブログ記事のコンテンツ品質を評価します。結果はファイル出力します。
tools: [Read, WebSearch, WebFetch, Write]
model: sonnet
permissionMode: acceptEdits
---

# Content Reviewer Agent

あなたは技術ブログ記事のコンテンツ品質を専門的に評価するエージェントです。

## 出力形式

レビュー結果は以下の形式でファイルに出力してください:

1. **出力先**: `{対象ファイルのディレクトリ}/review/`
2. **ファイル名**: `content-{YYYY-MM-DDTHHMM}.md`
3. **ディレクトリ作成**: `review/` ディレクトリがない場合は作成

**重要**: 会話への直接出力ではなく、必ずファイルに書き出してください。

ポイント:

  • model: sonnet でSonnetを指定
  • permissionMode: acceptEdits でファイル書き込みを自動許可
  • tools: [Read, WebSearch, WebFetch, Write] で必要なツールを指定
  • 出力先を明確に指示(これがないとファイル出力してくれない)

3エージェント構成

僕は以下の3つのエージェントを並列で動かしています。

エージェント役割出力ファイル
technical-accuracy-reviewer技術的正確性チェックtechnical-accuracy-*.md
content-reviewerコンテンツ品質評価content-*.md
seo-reviewerSEO最適化、タイトル生成seo-*.md

それぞれが独立して評価し、ファイルに結果を出力します。


実践:並列レビューの実行

実行方法

Task toolで3エージェントを明示的に「バックグラウンド」と「並列実行」を記入して起動します。

3つのレビューエージェントをバックグラウンドで並列実行して:
- technical-accuracy-reviewer
- content-reviewer
- seo-reviewer

対象: docs/article/rag-retrieval-methods/article.md

実際の結果

僕が検証したときの結果です。

エージェントスコア出力ファイル
technical-accuracy-reviewer88/100technical-accuracy-2026-02-02T1500.md
content-reviewer82/100content-2026-02-02T1445.md
seo-reviewer78/100seo-2026-02-02T1500.md

確認できた動作:

  • ✅ 3エージェントが同時にバックグラウンドで起動
  • ✅ メイン会話はブロックされず、他作業が可能
  • ✅ 各エージェントが独立して完了し、結果ファイルが review/ に出力
  • ✅ 完了通知が自動的に届き、結果サマリーが表示
  • ✅ WebSearch/WebFetchがバックグラウンドでも正常動作

完了順序は、エージェントのタスク内容(Web検索量など)によって変わります。僕の検証ではseo-reviewerが最初に完了し、technical-accuracy-reviewerが最後でした。


注意点とベストプラクティス

バックグラウンドが適さないケース

  • 対話的フィードバックが必要:AskUserQuestionが使えないので、ユーザー確認が必要なタスクには向かない
  • MCPツールが必要:Notion連携、Slack連携など

エージェント設計のコツ

  1. 出力形式を明確に指示
    • 「ファイルに出力して」だけでは不十分
    • 出力先、ファイル名形式、ディレクトリ作成の指示まで書く
  2. ディレクトリ作成も指示に含める
    • review/ ディレクトリがない場合に作成する指示を入れる
  3. Web検索の範囲を限定
    • 毎回同じ検索をさせない(前回記事参照)
    • 静的情報は docs/references/ に保存しておく

最近面白いと思ったコンテンツ

tmuxでClaude Codeを複数セッション使う手法が面白いですね。こちらの記事が参考になります。「中間管理職」的な使い方、めちゃくちゃ面白いなと思って見てます。というかClaude Codeとの会話が面白すぎるのに、ゴリゴリの技術記事ってのが素敵というかずるい。

セッションを使い捨てにする運用も、バックグラウンド実行の考え方に近いですよね。


まとめ

この記事では、サブエージェントの最適構成について共有しました。

構成のポイント

役割モデル実行方式
思考・対話・計画Opusフォアグラウンド
実行・サブタスクSonnetバックグラウンド
軽量タスクHaikuバックグラウンド

キーメッセージ

  1. Opus は最高だけど、全部Opusでやる必要はない
  2. Sonnet で十分な実行系タスクはSonnetに任せる
  3. バックグラウンドで待ち時間をゼロに
  4. ドキュメント出力で非同期でも結果を取得
  5. 結果としてトークン節約と時間効率の両方を実現

前回からの流れ

  • MCP → CLI+Skills(トークン削減)
  • 静的情報活用(さらなるトークン削減)
  • 今回 → Opus+Sonnet構成(時間効率+トークン分散)

Opusともっと長く話したいから、簡単な作業はSonnetに依頼しようぜ、という結論になりました。

ここまで読んでいただき、ありがとうございました!


参考リンク

公式ドキュメント

Anthropic Engineering Blog

関連記事

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。
エンジニア募集中!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です