Claude Code エージェントのアーキテクチャ

Claude Codeは単なるコーディングアシスタントではなく、汎用的なエージェントフレームワークである。本記事では、Claude Codeの4つの主要コンポーネント(Subagent, Skills, Task, MCP)について、それぞれの役割、関係性、実践的な使い方を解説する。


目次

  1. 全体像:4つのコンポーネントの関係
  2. Task:サブエージェント呼び出しのメカニズム
  3. Subagent:独立したコンテキストを持つ専門エージェント
  4. Skills:オンデマンドで読み込まれる専門知識
  5. MCP:外部システムとの接続プロトコル
  6. 実践的な組み合わせパターン
  7. ベストプラクティスと注意点

全体像:4つのコンポーネントの関係

┌─────────────────────────────────────────────────────────────────┐
│                    Claude Code メインエージェント                  │
│                                                                 │
│  ┌──────────┐    ┌──────────┐    ┌──────────┐                  │
│  │  Skills  │    │   Task   │    │   MCP    │                  │
│  │(専門知識) │    │(委譲ツール)│    │(外部接続) │                  │
│  └────┬─────┘    └────┬─────┘    └────┬─────┘                  │
│       │               │               │                        │
│       │         ┌─────▼─────┐         │                        │
│       │         │ Subagent  │◄────────┘                        │
│       └────────►│(専門エージェント)│                              │
│                 │ 独自コンテキスト│                              │
│                 └───────────┘                                  │
└─────────────────────────────────────────────────────────────────┘
コンポーネント 役割 特徴
Task サブエージェントを起動するツール メインエージェントのみが使用可能
Subagent 独立して作業する専門エージェント 独自のコンテキストウィンドウ、結果を返却
Skills 専門知識・ワークフローの定義 オンデマンド読み込み、再利用可能
MCP 外部システムへの接続層 GitHub, Slack, DB等へのブリッジ

Task:サブエージェント呼び出しのメカニズム

Taskとは

TaskはClaude Codeがサブエージェントを呼び出すために使用する内部ツールです。「電話をかける」行為に相当し、サブエージェントは「電話を受ける専門家」に相当します。

動作の仕組み

[メインエージェント] ──(Taskツール)──> [サブエージェント]
                                         │
                                         ▼
                                    [独立して作業]
                                         │
                                         ▼
                              [結果をメインに返却]

Taskの呼び出し方

サブエージェントは以下の方法で呼び出されます:

  1. 自動呼び出し:タスクの説明がサブエージェントのdescriptionにマッチした場合
  2. 明示的呼び出し:「code-reviewerサブエージェントを使って」と指示
# 明示的な呼び出し例
> code-reviewerサブエージェントを使って、この変更をレビューして

# 複数サブエージェントの並列呼び出し
> 複数のサブエージェントを使って、各マイクロサービスのログを分析して

重要な制約


Subagent:独立したコンテキストを持つ専門エージェント

Subagentとは

サブエージェントは、独自のコンテキストウィンドウを持ち、特定のタスクに特化した専門エージェントである。メインエージェントから委譲されたタスクを独立して実行し、結果のみを返却する。

サブエージェントの利点

  1. コンテキスト分離:メインの会話を汚染しない
  2. 並列実行:複数タスクを同時に処理
  3. 専門化:特定ドメインに最適化された指示
  4. ツール制限:必要最小限のツールアクセス

サブエージェントの定義

.claude/agents/(プロジェクト)または~/.claude/agents/(グローバル)にMarkdownファイルとして配置:

---
name: code-reviewer
description: コード品質、セキュリティ、ベストプラクティスのレビュー。
             コード変更後に自動的に使用。
tools: Read, Grep, Glob
model: sonnet
---

You are a senior code reviewer with 15+ years of experience.

## Responsibilities
- Analyze code for security vulnerabilities
- Check adherence to coding standards
- Identify potential performance issues
- Suggest improvements and optimizations

## Review Checklist
1. Security: Check for SQL injection, XSS, CSRF
2. Performance: Identify N+1 queries, inefficient algorithms
3. Style: Verify consistent naming, proper commenting
4. Testing: Ensure adequate test coverage

ツールアクセスの設定

# 役割別の推奨ツール設定
Read-onlyエージェント: Read, Grep, Glob
リサーチエージェント: Read, Grep, Glob, WebFetch, WebSearch
コードライター: Read, Write, Edit, Bash, Glob, Grep
ドキュメントエージェント: Read, Write, Edit, Glob, Grep, WebFetch, WebSearch

組み込みサブエージェント

Claude Codeには以下の組み込みサブエージェントがあります:

結果の返却

サブエージェントは独立して作業し、結果のみをメインに返却します:

[メイン] → [検索サブエージェント×3(並列)]
              │
              ├─ サブ1: 認証関連ファイルを検索 → 関連ファイルリスト
              ├─ サブ2: テストパターンを検索 → テスト構造の要約
              └─ サブ3: 設定ファイルを検索 → 設定の概要
              │
              ▼
         [メインが結果を統合して回答]

フルコンテキストではなくサマリーのみを返すことで、メインのコンテキストをクリーンに保ちます。

非同期実行

サブエージェントはバックグラウンドで実行可能です:

# Ctrl + B でバックグラウンドに送る
# 完了後に結果が返ってくる

Skills:オンデマンドで読み込まれる専門知識

Skillsとは

Skillsは、指示・スクリプト・リソースをまとめたフォルダで、Claudeが動的に読み込んで特定のタスクでのパフォーマンスを向上させます。「新人メンバーに渡すオンボーディングガイド」のようなものです。

Skillsの特徴

段階的開示(Progressive Disclosure)

Skillsは効率的なコンテキスト管理のため、段階的に読み込まれる:

1. 起動時:name と description のみ読み込み(~100トークン)
     ↓
2. タスクマッチ時:SKILL.md の本文を読み込み
     ↓
3. 必要に応じて:補足ファイル(スクリプト、テンプレート等)を読み込み

Skillの定義

---
name: pdf-processing
description: PDFファイルからテキストやテーブルを抽出、フォーム入力、
             ドキュメントのマージ。PDFファイルやフォーム、
             ドキュメント抽出に関する作業時に使用。
---

# PDF Processing Skill

## Instructions
1. Use pypdf for text extraction
2. Use pdfplumber for table extraction
3. Use fillpdf for form filling

## Best Practices
- Always validate PDF structure before processing
- Handle encrypted PDFs gracefully
- Preserve original formatting when possible

## Examples
[具体的な使用例]

descriptionの重要性

Skillが適切に呼び出されるかはdescriptionの書き方に依存します:

# ❌ 悪い例(曖昧すぎる)
description: Helps with documents

# ✅ 良い例(具体的なアクションとキーワード)
description: Extract text and tables from PDF files, fill forms, 
             merge documents. Use when working with PDF files or 
             when the user mentions PDFs, forms, or document extraction.

プリビルトSkills

Anthropicが提供する組み込みSkills:

SubagentからのSkills呼び出し

サブエージェントもSkillsを参照できます:

[code-reviewサブエージェント]
    │
    ├─ 独自のコンテキストウィンドウ
    ├─ 指定されたツール
    └─ Skillsを参照可能
         ├─ Python best practices Skill
         ├─ Security review Skill
         └─ etc.

MCP:外部システムとの接続プロトコル

MCPとは

MCP(Model Context Protocol)は、AIアプリケーションと外部ツール・データソースを接続する標準プロトコルです。USB-Cのような「ユニバーサルアダプター」として機能します。

MCPのアーキテクチャ

┌─────────────────────────────────────────┐
│         Claude Code / Apps              │
│                                         │
│  ┌───────────────────────────────────┐  │
│  │          MCP Client               │  │
│  └──────────┬──────────┬─────────────┘  │
│             │          │                │
└─────────────┼──────────┼────────────────┘
              │          │
       ┌──────▼────┐  ┌──▼────────┐
       │MCP Server │  │MCP Server │
       │ (GitHub)  │  │(Postgres) │
       └───────────┘  └───────────┘

MCPサーバーの設定

// .mcp.json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["-y", "@playwright/mcp@latest"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "your-token"
      }
    }
  }
}

MCPの主な用途

MCPの注意点

❌ 重いMCP使用(20kトークン以上はコンテキストを圧迫)
❌ ツールの無制限継承(意図的にホワイトリストを作成)

実践的な組み合わせパターン

パターン1:基本的なワークフロー

[ユーザー] → 「競合分析レポートを作成して」

[メインエージェント]
    │
    ├─ MCP接続:Google Driveで競合ブリーフを検索、GitHubデータを取得
    │
    ├─ Skills適用:competitive-analysis Skillが分析フレームワークを提供
    │
    └─ Subagent実行(並列)
         ├─ market-researcher:業界データを収集
         └─ technical-analyst:技術実装をレビュー
         │
         ▼
    [結果を統合してレポート生成]

パターン2:マイクロサービス開発

# 複数リポジトリを参照
claude --add-dir ../user-service --add-dir ../auth-service --add-dir ../common-lib
[メインエージェント]
    │
    ├─→ [Explorerサブエージェント]
    │     - ../user-service を探索
    │     - ../auth-service を探索
    │     → 関連ファイルのマップを返す
    │
    ├─→ [Architectサブエージェント]
    │     → API契約・スキーマ設計を返す
    │
    ├─→ [Implementerサブエージェント] (並列)
    │     ├─ user-service側の実装
    │     └─ auth-service側の実装
    │
    └─→ [Test-automatorサブエージェント]
          → 統合テストを生成

パターン3:Hooksによるチェーン化

サブエージェントのネストはできませんが、Hooksを使って順次チェーン化できます:

pm-spec → (ファイル出力) → architect-review → (ファイル出力) → implementer-tester
   │                           │                           │
   ▼                           ▼                           ▼
仕様作成              アーキテクチャ検証              実装・テスト
READY_FOR_ARCH         READY_FOR_BUILD                  DONE

パターン4:Git Worktreeによる並列開発

# 並列作業用のworktreeを作成
git worktree add ../project-feature-a -b feature-a
git worktree add ../project-feature-b -b feature-b

# 別々のターミナルでClaude Codeを起動
cd ../project-feature-a && claude
cd ../project-feature-b && claude

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

推奨パターン

パターン 説明
サブエージェント委譲 Task(…)クローンパターンから始める
Git worktrees 独立した機能の並列開発
マルチClaude検証 書き込み/レビュー用に別コンテキスト
Skillsにユーティリティスクリプト 即使用可能なツールを添付
生きたドキュメント 実装中に計画を更新

避けるべきパターン

パターン 理由
複雑なマルチエージェントシステム デバッグが悪夢になる
重いMCP使用(>20kトークン) コンテキストを圧迫
曖昧な指示 曖昧な結果につながる
計画をスキップ いきなりコードを書かない
コンテキストを限界まで埋める 品質が劣化する

コンテキスト管理の重要性

# コンテキストの確認
/context

# コンテキストのクリア
/clear

# コンパクト化
/compact

トークンコストの考慮


まとめ:いつ何を使うか

状況 推奨コンポーネント
外部サービスとの連携が必要 MCP
並列処理・コンテキスト分離が必要 Subagent (Taskで呼び出し)
再利用可能な専門知識が必要 Skills
特定ワークフローを手動トリガー Slash Commands
自動的なルール適用 Hooks

アーキテクチャの進化

以前:Claude ←→ MCP(外部ツール直接呼び出し)

現在:Claude ←→ Subagent ←→ MCP(サブエージェントがMCPを使う)
      Claude ←→ Skills(専門知識をオンデマンド読み込み)

MCPは「外部接続の標準プロトコル」として残りつつ、Task/Subagent + Skillsがワークフローの主軸になっています。MCPを直接メインコンテキストで使うより、サブエージェントに閉じ込めてコンテキスト汚染を防ぐパターンが推奨されます。


参考リンク