Claude

Claude Agent SDK 完全ガイド【2026年最新】|Python・TypeScriptでAIエージェントを構築する実践手法

2026年3月9日 41分で読める AQUA合同会社
Claude Agent SDK 完全ガイド【2026年最新】|Python・TypeScriptでAIエージェントを構築する実践手法

Claude Codeを使って開発を自動化している方なら、こんな疑問を持ったことはありませんか?——「このCLIの力を、自分のアプリケーションに組み込めないだろうか?」

その答えがClaude Agent SDKです。2026年、AnthropicはClaude Codeを駆動する中核エンジンをPythonとTypeScriptのライブラリとして公開しました。ファイル読み書き、コマンド実行、コード編集、Web検索——Claude Codeが持つすべての能力を、わずか数行のコードからプログラマティックに呼び出せます。

この記事では、Claude Agent SDKの導入からマルチエージェント構築、本番デプロイまでを15セクション・コード例15本で完全解説します。Python・TypeScript両方のコード例を掲載しているので、どちらの言語でも即座に実装を始められます。

この記事の内容

Claude Agent SDKとは? — Claude Codeのエンジンをライブラリ化

Claude Agent SDKの位置づけClaude Code CLI、Agent SDK、Claude APIの3層関係図Claude Agent SDKの位置づけ — 3層アーキテクチャClaude Code CLI対話型ターミナルツール|開発者が直接使う|claude コマンド同じエンジンPython SDKclaude-agent-sdk v0.1.48TypeScript SDK@anthropic-ai/claude-agent-sdkClaude Agent SDK ← 今ここAPI呼び出しClaude API(Messages API)基盤API|Opus 4.6・Sonnet 4.6・Haiku 4.5|Bedrock / Vertex AI / Azure対応

Claude Agent SDKは、Claude Codeの内部エンジンをPythonとTypeScriptのライブラリとして公開したものです。Claude Code CLIとまったく同じエージェントループ、ツール実行、コンテキスト管理を、プログラムから呼び出せます。

名称変更について:2026年初頭、「Claude Code SDK」から「Claude Agent SDK」に正式名称が変更されました。パッケージ名はclaude-agent-sdk(Python)および@anthropic-ai/claude-agent-sdk(TypeScript)です。

従来のClaude API(Anthropic Client SDK)との最大の違いは、ツール実行を自分で実装する必要がないことです。Client SDKではツールループを自前で書く必要がありましたが、Agent SDKではClaudeが自律的にファイルを読み、コードを編集し、コマンドを実行します。

項目 Python SDK TypeScript SDK
パッケージ名 claude-agent-sdk @anthropic-ai/claude-agent-sdk
最新バージョン v0.1.48(2026年3月7日) v0.2.71
動作要件 Python 3.10以上 Node.js 18以上
ライセンス MIT License
CLI同梱 Claude Code CLIを自動バンドル
認証 ANTHROPIC_API_KEY + Bedrock / Vertex AI / Azure対応
リポジトリ GitHub GitHub

Agent SDKが解決する3つの課題

  1. ツール実装の重複:ファイル操作、コマンド実行、Web検索など9つのツールが組み込み済み。車輪の再発明は不要
  2. コンテキスト管理の複雑さ:自動圧縮、セッション永続化、フォークを内蔵。長い会話でもコンテキストウィンドウを枯渇させない
  3. 安全な自律実行Hooksと権限モードで、エージェントの行動を細かく制御できる

5分でわかるクイックスタート — Python・TypeScriptで最初のエージェント

ステップ1:インストール

# Python
pip install claude-agent-sdk

# TypeScript
npm install @anthropic-ai/claude-agent-sdk

ステップ2:APIキーを設定

export ANTHROPIC_API_KEY=your-api-key

Amazon Bedrockを使う場合はCLAUDE_CODE_USE_BEDROCK=1、Google Vertex AIならCLAUDE_CODE_USE_VERTEX=1、Azure AI FoundryならCLAUDE_CODE_USE_FOUNDRY=1を設定し、各クラウドの認証情報を構成します。

ステップ3:最初のエージェントを実行

Python版:

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions


async def main():
    async for message in query(
        prompt="Find and fix the bug in auth.py",
        options=ClaudeAgentOptions(allowed_tools=["Read", "Edit", "Bash"]),
    ):
        if hasattr(message, "result"):
            print(message.result)


asyncio.run(main())

TypeScript版:

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Find and fix the bug in auth.py",
  options: { allowedTools: ["Read", "Edit", "Bash"] }
})) {
  if ("result" in message) console.log(message.result);
}

たったこれだけです。Claudeは自律的にファイルを読み込み、バグを特定し、修正を適用します。ツール実行のロジックを自分で書く必要はありません。

Client SDKとの比較:従来のAnthropic Client SDKではwhile response.stop_reason == "tool_use"のループを自分で実装する必要がありました。Agent SDKではquery()を呼ぶだけで、Claudeが自律的にツールを使いながらタスクを完了します。

アーキテクチャ深掘り — エージェントループの内部構造

エージェントループ・アーキテクチャPrompt → Agent Loop → Tool → Responseの循環とHooks介入ポイントエージェントループの内部構造User Promptquery() / client.query()入力Agent LoopClaude推論(Thinking)プロンプト + コンテキスト → 次のアクション決定tool_use🔒 PreToolUse Hook許可/拒否/入力変更検査ツール実行Read / Write / Edit / Bash / Grep / Glob …結果📝 PostToolUse Hookログ/監査/コンテキスト追加記録結果評価完了? → stop_reason判定続行(end_turn以外)🛑 Stop Hook状態保存/通知/クリーンアップend_turnResult Messageテキスト応答 + session_id + costエージェントループHooks(介入ポイント)

Agent SDKの心臓部はエージェントループです。このループは、Claude Codeと同じ仕組みで動作します。

  1. 推論:Claudeがプロンプトとコンテキストを分析し、次のアクションを決定
  2. ツール実行:必要なツールを呼び出し(Read、Edit、Bashなど)、結果を取得
  3. 結果評価:タスクが完了したかを判断。未完了なら1に戻る

このループはClaudeのstop_reasonend_turnになるまで自動的に繰り返されます。max_turnsパラメータでループ回数の上限を設定できます。

メッセージタイプ

query()はAsyncIteratorを返し、以下のメッセージタイプをストリーミングします。

メッセージタイプ 説明 主要フィールド
SystemMessage セッション初期化情報 session_id, mcp_servers, tools
AssistantMessage Claudeの応答(テキスト+ツール呼び出し) content(TextBlock, ToolUseBlock)
UserMessage ユーザーの入力 content
ResultMessage 実行完了の通知 result, session_id, total_cost_usd, subtype

ResultMessagesubtypeで実行結果を判定します:success(成功)、error_max_turns(ターン上限到達)、error_max_budget_usd(予算超過)、error_during_execution(実行中エラー)。

ストリーミングとコスト追跡

すべてのメッセージはリアルタイムでストリーミングされます。ResultMessage.total_cost_usdで実行コストをAPI呼び出し単位で追跡でき、コスト制御に活用できます。

9つのビルトインツール完全リファレンス

Agent SDKには、ファイル操作からWeb検索まで9つのビルトインツールが組み込まれています。これらはClaude Codeが実際に使用しているものと同一です。

ツール名 用途 主要パラメータ 権限レベル
Read ファイル読み取り file_path, offset, limit 読み取り専用
Write 新規ファイル作成 file_path, content 書き込み(要承認)
Edit 既存ファイルの部分編集 file_path, old_string, new_string 書き込み(要承認)
Bash シェルコマンド実行 command, timeout 実行(要承認)
Glob ファイルパターン検索 pattern, path 読み取り専用
Grep ファイル内容の正規表現検索 pattern, path, glob, type 読み取り専用
WebSearch Web検索 query ネットワーク
WebFetch Webページの取得と解析 url, prompt ネットワーク
AskUserQuestion ユーザーへの質問 question, options インタラクション

allowed_toolsパラメータで使用可能なツールを制限できます。セキュリティのベストプラクティスとして、タスクに必要な最小限のツールのみを許可しましょう。

# 読み取り専用エージェント(コードレビュー向き)
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Glob", "Grep"]
)

# コード修正エージェント(書き込み権限あり)
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Write", "Edit", "Glob", "Grep"]
)

# フルアクセスエージェント(Bash実行含む)
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Write", "Edit", "Bash", "Glob", "Grep"]
)

権限モードとセキュリティ設計

Agent SDKは、エージェントの自律性とセキュリティのバランスを権限モードで制御します。

権限モード ファイル読み取り ファイル編集 コマンド実行 推奨シーン
default ✅ 自動 ⚠️ 承認必要 ⚠️ 承認必要 対話型開発、初回テスト
acceptEdits ✅ 自動 ✅ 自動承認 ⚠️ 承認必要 コード修正タスク、CI/CD
plan ✅ 自動 ⚠️ 承認必要 ⚠️ 承認必要 計画立案フェーズ、設計検討
bypassPermissions ✅ 自動 ✅ 自動 ✅ 自動 サンドボックス環境、Docker内

⚠️ セキュリティ警告:bypassPermissionsはすべての安全チェックを無効にします。本番環境では必ずDockerコンテナやサンドボックス内で使用してください。サブエージェントにも伝播するため、特に注意が必要です。

allowed_toolspermission_modeを組み合わせることで、きめ細かなアクセス制御を実現できます。例えば、読み取り専用ツールのみを許可しつつacceptEditsモードにすれば、安全かつ承認不要なコード分析エージェントが作れます。

Hooksで実現するガードレールと監査ログ

Hooksは、エージェントループの各ポイントで実行されるコールバック関数です。ツール呼び出しの前後、セッション開始・終了、サブエージェントのライフサイクルなど、あらゆるイベントに介入できます。

Hookイベント一覧

Agent SDKは18種類以上のHookイベントを提供しています。特に重要なものは以下の通りです:

  • PreToolUse:ツール実行前に許可/拒否/入力変更が可能
  • PostToolUse:ツール実行後にログ記録やコンテキスト追加
  • Stop:エージェント停止時のクリーンアップ
  • Notification:エージェントのステータス通知をSlackやPagerDutyに転送
  • SubagentStart/SubagentStop:サブエージェントのライフサイクル管理

パターン1:危険コマンドのブロック

本番環境でrm -rfDROP TABLEが実行されることを防ぎます。

Python版:

from claude_agent_sdk import ClaudeAgentOptions, HookMatcher


BLOCKED_PATTERNS = ["rm -rf", "DROP TABLE", "DELETE FROM", "format c:"]


async def block_dangerous_commands(input_data, tool_use_id, context):
    command = input_data["tool_input"].get("command", "")
    for pattern in BLOCKED_PATTERNS:
        if pattern.lower() in command.lower():
            return {
                "systemMessage": f"コマンド '{pattern}' はポリシーにより禁止されています。",
                "hookSpecificOutput": {
                    "hookEventName": "PreToolUse",
                    "permissionDecision": "deny",
                    "permissionDecisionReason": f"Blocked pattern: {pattern}",
                },
            }
    return {}


options = ClaudeAgentOptions(
    hooks={
        "PreToolUse": [
            HookMatcher(matcher="Bash", hooks=[block_dangerous_commands])
        ]
    }
)

パターン2:監査ログ(PostToolUse)

すべてのファイル変更操作をタイムスタンプ付きでログに記録します。

TypeScript版:

import { query, HookCallback } from "@anthropic-ai/claude-agent-sdk";
import { appendFile } from "fs/promises";

const auditLogger: HookCallback = async (input, toolUseID, { signal }) => {
  const filePath = (input as any).tool_input?.file_path ?? "unknown";
  const logEntry = `${new Date().toISOString()} | ${input.tool_name} | ${filePath}\n`;
  await appendFile("./agent-audit.log", logEntry);
  return {};
};

for await (const message of query({
  prompt: "Refactor the authentication module",
  options: {
    permissionMode: "acceptEdits",
    hooks: {
      PostToolUse: [{ matcher: "Edit|Write", hooks: [auditLogger] }]
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}

パターン3:.envファイルの保護

機密情報を含む.envファイルへの書き込みを自動ブロックします。

async def protect_env_files(input_data, tool_use_id, context):
    file_path = input_data["tool_input"].get("file_path", "")
    if file_path.split("/")[-1] == ".env":
        return {
            "hookSpecificOutput": {
                "hookEventName": input_data["hook_event_name"],
                "permissionDecision": "deny",
                "permissionDecisionReason": "Cannot modify .env files",
            }
        }
    return {}

options = ClaudeAgentOptions(
    hooks={
        "PreToolUse": [
            HookMatcher(matcher="Write|Edit", hooks=[protect_env_files])
        ]
    }
)

Hooksは配列内の順序で実行されます。単一責任の原則に従い、1つのHookに1つの責務を持たせ、複数のHookをチェーンすることを推奨します。denyaskより優先され、askallowより優先されます。

サブエージェントで専門AIチームを構築

マルチエージェント構成図メインエージェントからコードレビュー・テスト実行・セキュリティ監査の3つのサブエージェントへの委任構造マルチエージェント構成 — 専門AIチームメインエージェントOpus 4.6 | 全ツールアクセス | オーケストレーションAgent ToolAgent ToolAgent Toolcode-reviewerコードレビュー専門model: “sonnet”tools: Read, Glob, Grep🔒 読み取り専用(安全)品質・セキュリティ・パフォーマンスtest-runnerテスト実行専門model: “inherit”tools: Bash, Read, Grep⚡ コマンド実行可テスト実行・カバレッジ分析security-scannerセキュリティ監査専門model: “opus”tools: Read, Grep, Glob🔒 読み取り専用(安全)脆弱性検出・OWASP準拠

サブエージェントは、メインエージェントが生成する専門特化型のAIワーカーです。各サブエージェントは独自のコンテキスト、ツール制限、専用プロンプトを持ち、タスクを完了したら結果だけをメインに返します。

サブエージェントの3つの利点

  • コンテキスト分離:サブエージェントの中間作業がメインの会話を汚さない。数十ファイルを読んでも、親には要約だけが返る
  • 並列実行:複数のサブエージェントを同時実行し、レビュー時間を大幅短縮
  • ツール制限:サブエージェントごとに使えるツールを制限し、意図しない操作を防止

サブエージェントの定義

Python版:

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition


async def main():
    async for message in query(
        prompt="Review the authentication module for security issues",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Grep", "Glob", "Agent"],
            agents={
                "code-reviewer": AgentDefinition(
                    description="Expert code reviewer for quality and security reviews.",
                    prompt="Analyze code quality, identify vulnerabilities, and suggest improvements.",
                    tools=["Read", "Glob", "Grep"],
                    model="sonnet",
                ),
                "test-runner": AgentDefinition(
                    description="Runs and analyzes test suites.",
                    prompt="Run tests, analyze output, identify failures, suggest fixes.",
                    tools=["Bash", "Read", "Grep"],
                ),
            },
        ),
    ):
        if hasattr(message, "result"):
            print(message.result)

asyncio.run(main())

TypeScript版:

import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Review the authentication module for security issues",
  options: {
    allowedTools: ["Read", "Grep", "Glob", "Agent"],
    agents: {
      "code-reviewer": {
        description: "Expert code reviewer for quality and security reviews.",
        prompt: "Analyze code quality, identify vulnerabilities, and suggest improvements.",
        tools: ["Read", "Glob", "Grep"],
        model: "sonnet"
      },
      "test-runner": {
        description: "Runs and analyzes test suites.",
        prompt: "Run tests, analyze output, identify failures, suggest fixes.",
        tools: ["Bash", "Read", "Grep"]
      }
    }
  }
})) {
  if ("result" in message) console.log(message.result);
}

AgentDefinitionの主要フィールドは以下の通りです:

  • description(必須):Claudeがサブエージェントを選択する際の判断基準
  • prompt(必須):サブエージェントのシステムプロンプト
  • tools(任意):使用可能なツール。省略時は親から全継承
  • model(任意):"sonnet" / "opus" / "haiku" / "inherit"。コストとタスク複雑度に応じて選択

注意:サブエージェントは独自のサブエージェントを生成できません(Agentをサブエージェントのtoolsに含めないでください)。また、Agent Teamsとの連携も可能です。

MCP連携:外部ツールとのシームレスな統合

MCP(Model Context Protocol)は、AIエージェントと外部ツール・データソースを接続するオープン標準です。Agent SDKは3つのトランスポートタイプでMCPサーバーに接続できます。

stdio:ローカルプロセス

# Python: GitHub MCPサーバーに接続
import os
from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

options = ClaudeAgentOptions(
    mcp_servers={
        "github": {
            "command": "npx",
            "args": ["-y", "@modelcontextprotocol/server-github"],
            "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},
        }
    },
    allowed_tools=["mcp__github__list_issues", "mcp__github__search_issues"],
)

async for message in query(
    prompt="List the 3 most recent issues in our repository",
    options=options,
):
    if isinstance(message, ResultMessage) and message.subtype == "success":
        print(message.result)

HTTP/SSE:リモートサーバー

// TypeScript: HTTP MCPサーバーに接続
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Explain what hooks are in Claude Code",
  options: {
    mcpServers: {
      "claude-docs": {
        type: "http",
        url: "https://code.claude.com/docs/mcp"
      }
    },
    allowedTools: ["mcp__claude-docs__*"]  // ワイルドカードで全ツール許可
  }
})) {
  if (message.type === "result" && message.subtype === "success") {
    console.log(message.result);
  }
}

SDK MCPサーバー(インプロセス)

Python SDKでは@toolデコレータとcreate_sdk_mcp_server()を使って、外部プロセスなしで独自ツールを定義できます。サブプロセス管理不要、IPC不要、デバッグも容易です。

from claude_agent_sdk import tool, create_sdk_mcp_server, ClaudeAgentOptions, ClaudeSDKClient

@tool("greet", "Greet a user by name", {"name": str})
async def greet_user(args):
    return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]}

server = create_sdk_mcp_server(
    name="my-tools",
    version="1.0.0",
    tools=[greet_user]
)

options = ClaudeAgentOptions(
    mcp_servers={"tools": server},
    allowed_tools=["mcp__tools__greet"]
)

MCPツールの命名規則はmcp__<サーバー名>__<ツール名>です。ワイルドカード(mcp__github__*)でサーバーの全ツールを一括許可できます。

セッション管理:会話の永続化とフォーク

セッションは、エージェントの会話履歴をディスクに自動保存する仕組みです。プロンプト、ツール呼び出し、結果、応答のすべてが記録され、後から再開(resume)や分岐(fork)できます。

continue:直前のセッションを自動再開

# Python: ClaudeSDKClientで自動セッション管理
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

async with ClaudeSDKClient(options=ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob", "Grep"]
)) as client:
    # 最初のクエリ
    await client.query("Analyze the auth module")
    async for message in client.receive_response():
        print_response(message)

    # 2回目:同じセッションを自動的に継続
    await client.query("Now refactor it to use JWT")
    async for message in client.receive_response():
        print_response(message)

resume:特定のセッションIDで再開

// TypeScript: セッションIDを保存して後から再開
let sessionId: string | undefined;

for await (const message of query({
  prompt: "Analyze the auth module",
  options: { allowedTools: ["Read", "Glob", "Grep"] }
})) {
  if (message.type === "result") sessionId = message.session_id;
}

// 後から再開(プロセス再起動後でもOK)
for await (const message of query({
  prompt: "Now implement the suggested refactoring",
  options: { resume: sessionId, allowedTools: ["Read", "Edit", "Write"] }
})) {
  if ("result" in message) console.log(message.result);
}

fork:分岐して別のアプローチを探索

フォークは既存のセッション履歴をコピーした新しいセッションを作ります。元のセッションはそのまま残るため、A/Bテスト的にアプローチを比較できます。

# フォーク:OAuth2アプローチを試す
async for message in query(
    prompt="Instead of JWT, implement OAuth2",
    options=ClaudeAgentOptions(resume=session_id, fork_session=True),
):
    if isinstance(message, ResultMessage):
        forked_id = message.session_id  # 新しいセッションID

# 元のセッションは影響なし
async for message in query(
    prompt="Continue with the JWT approach",
    options=ClaudeAgentOptions(resume=session_id),
):
    pass

実践ユースケース5選

1. PRレビュー自動化

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

async def review_pr():
    async for message in query(
        prompt="Review the latest PR. Check for bugs, security issues, and code quality.",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Glob", "Grep", "Bash", "Agent"],
            agents={
                "security-reviewer": AgentDefinition(
                    description="Security vulnerability scanner",
                    prompt="Check for OWASP Top 10 vulnerabilities, SQL injection, XSS.",
                    tools=["Read", "Grep", "Glob"],
                    model="opus",
                )
            },
        ),
    ):
        if hasattr(message, "result"):
            print(message.result)

asyncio.run(review_pr())

2. コードマイグレーション

async for message in query(
    prompt="Migrate all JavaScript files in src/ to TypeScript. Add proper type annotations.",
    options=ClaudeAgentOptions(
        allowed_tools=["Read", "Write", "Edit", "Glob", "Grep", "Bash"],
        permission_mode="acceptEdits",
        cwd="/path/to/project",
    ),
):
    if hasattr(message, "result"):
        print(message.result)

3. ドキュメント自動生成

for await (const message of query({
  prompt: "Generate API documentation for all exported functions in src/api/",
  options: {
    allowedTools: ["Read", "Write", "Glob", "Grep"],
    permissionMode: "acceptEdits"
  }
})) {
  if ("result" in message) console.log(message.result);
}

4. テスト生成

async for message in query(
    prompt="""Read src/utils/validation.py and generate comprehensive unit tests.
Cover edge cases, error handling, and boundary values. Use pytest.""",
    options=ClaudeAgentOptions(
        allowed_tools=["Read", "Write", "Glob", "Grep", "Bash"],
        permission_mode="acceptEdits",
    ),
):
    if hasattr(message, "result"):
        print(message.result)

5. インシデント対応ボット

async def incident_response(error_log: str):
    async for message in query(
        prompt=f"""Incident detected. Analyze this error and find the root cause:
{error_log}

Steps: 1) Find related code 2) Identify the bug 3) Suggest a fix 4) Check for similar issues""",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Glob", "Grep", "Bash"],
            hooks={
                "Notification": [HookMatcher(hooks=[slack_notifier])]
            },
        ),
    ):
        if hasattr(message, "result"):
            return message.result

コスト計算と最適化戦略

Agent SDKのコストは、Claude APIのトークン単価×使用量で決まります。エージェントはループ内で複数回のAPI呼び出しを行うため、適切なモデル選択とコスト制御が重要です。

モデル 入力($/MTok) 出力($/MTok) コンテキスト 特徴
Claude Opus 4.6 $15 $75 200K 最高性能。複雑な推論、セキュリティ監査向き
Claude Sonnet 4.6 $3 $15 200K コスト効率最良。大半のタスクに最適
Claude Haiku 4.5 $0.80 $4 200K 高速・低コスト。単純なタスク・大量処理向き

※ Batch APIでは50%割引が適用されます。プロンプトキャッシュも活用することで、繰り返し処理のコストを大幅に削減できます。

ユースケース別 月間コスト試算

ユースケース 推奨モデル 月間実行数 推定コスト/月 手動工数削減
PRレビュー自動化 Sonnet 200件 $60〜$120 エンジニア40時間/月 削減
テスト生成 Sonnet 100ファイル $30〜$60 テスト作成時間 70% 削減
ドキュメント生成 Haiku 500ファイル $15〜$30 ドキュメント作業 90% 削減
コードマイグレーション Opus 50回 $150〜$300 移行プロジェクト期間 60% 短縮
インシデント対応 Sonnet 30件 $20〜$50 MTTR 50% 改善

※ 上記は典型的なワークロードに基づく試算です。実際のコストは入出力トークン数により変動します。ResultMessage.total_cost_usdで実行ごとのコストを追跡できます。

コスト最適化の4つの戦略

  1. モデル使い分け:サブエージェントでmodel: "haiku"を指定し、単純なタスクにはHaikuを使う
  2. ツール制限allowed_toolsで必要最小限のツールのみ許可し、不要なツール呼び出しを防止
  3. max_turns制限max_turnsパラメータでループ回数に上限を設け、暴走を防ぐ
  4. セッション再開resumeで前のセッションを再開し、コンテキストの再構築コストを節約

フレームワーク横断比較

2026年3月時点で、AIエージェントフレームワークは群雄割拠の状態です。Claude Agent SDKを主要フレームワークと8つの軸で比較します。

比較軸 Claude Agent SDK LangChain/LangGraph CrewAI OpenAI Agents SDK
ツール実行 ✅ 9ツール組み込み ❌ 自前実装 ⚠️ 一部組み込み ✅ 組み込み(code_interpreter等)
マルチエージェント ✅ AgentDefinition ✅ LangGraphで構築 ✅ Crew + Agent ✅ Handoffs
MCP対応 ✅ ネイティブ ⚠️ プラグイン経由 ⚠️ プラグイン経由 ❌ 非対応
セッション管理 ✅ resume/fork ✅ チェックポイント ⚠️ メモリのみ ⚠️ 基本的
Hook/ミドルウェア ✅ 18+イベント ✅ コールバック ⚠️ 限定的 ⚠️ Guardrails
言語サポート Python + TypeScript Python(+ JS実験的) Python Python(+ Node実験的)
モデル選択 Claude専用 マルチモデル マルチモデル OpenAI専用
学習コスト ⭐ 低(query()だけで開始) ⭐⭐⭐ 高(概念が多い) ⭐⭐ 中 ⭐ 低

どれを選ぶべきか?

  • Claude Agent SDK:Claude専用で最速開発。ワークフロー自動化、CI/CD統合、コード操作系タスクに最適
  • LangChain/LangGraph:複数のLLMを切り替えたい、複雑な状態遷移が必要な場合
  • CrewAI:ロールベースのマルチエージェントを素早くプロトタイピングしたい場合
  • OpenAI Agents SDK:GPTモデル専用。OpenAIエコシステムに統一したい場合

Anthropicのマルチエージェント研究によると、専門化されたエージェントチームは単一エージェントと比較して最大90.2%の性能向上を達成しています。

本番デプロイ:Docker化からモニタリングまで

Dockerfile

FROM python:3.12-slim

WORKDIR /app

# Node.js(MCP stdio サーバー用)
RUN apt-get update && apt-get install -y curl && \
    curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
    apt-get install -y nodejs && \
    rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

# 安全な権限設定
RUN useradd -m agent && chown -R agent:agent /app
USER agent

ENV ANTHROPIC_API_KEY=""
CMD ["python", "main.py"]

docker-compose.yml

services:
  agent:
    build: .
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    volumes:
      - ./workspace:/app/workspace
      - agent-sessions:/home/agent/.claude
    restart: unless-stopped
    mem_limit: 2g
    cpus: 1.0

volumes:
  agent-sessions:

モニタリング設計

本番運用では以下の指標を監視しましょう:

  • コスト追跡ResultMessage.total_cost_usdを集計し、日次・週次でダッシュボード化
  • 成功率ResultMessage.subtypesuccess率を監視
  • 実行時間:タスクごとの所要時間を記録し、異常を検知
  • Hookログ:PostToolUse Hookでの監査ログをELKスタックやDatadogに転送

本番環境のセキュリティ:Docker内でbypassPermissionsを使用する場合でも、ネットワーク分離(--network=noneまたは制限付きネットワーク)と最小権限のファイルシステムマウントを設定してください。TDDアプローチでエージェントの動作を事前に検証することも有効です。

よくある質問(FAQ)

Q: Claude Agent SDKとClaude Code CLIの違いは?

CLIはターミナルで対話的に使うツール、SDKはプログラムから呼び出すライブラリです。中身のエンジン(エージェントループ、ツール、コンテキスト管理)は同一です。日常開発にはCLI、CI/CD・カスタムアプリ・本番自動化にはSDKを使うのが一般的です。多くのチームが両方を併用しています。

Q: Agent SDKは無料で使えますか?

SDK自体はMITライセンスの無料OSSです。ただし、Claude APIの利用にはAPIキーが必要で、トークン使用量に応じたAPI料金が発生します。Claude Codeのサブスクリプションとは別にAPIキーを取得してください。

Q: Claude以外のモデルにも対応していますか?

現時点ではClaude専用です。ただし、APIプロバイダーとしてAnthropic直接、Amazon Bedrock、Google Vertex AI、Azure AI Foundryに対応しているため、クラウドプラットフォームの選択肢は豊富です。

Q: MCP経由で接続した外部ツールは、Claude Code CLIのMCP設定と互換性がありますか?

はい。.mcp.jsonファイルの形式はClaude Code CLIと同一です。CLIで設定したMCPサーバーはそのままSDKでも利用できます。setting_sources=["project"]を指定すれば、プロジェクトの.claude/settings.jsonも読み込まれます。

まとめ:AIエージェント開発ロードマップ

Claude Agent SDKは、AIエージェント開発の民主化を実現するツールです。Claude Codeと同じエンジンを、わずか数行のコードから利用できるようになりました。

4週間学習ロードマップ

  • Week 1:インストール → query()で基本クエリ → allowed_toolsでツール制限
  • Week 2:Hooksで監査ログ実装 → PreToolUseで危険操作ブロック → ワークフロー自動化
  • Week 3:サブエージェント定義 → マルチエージェント構成 → Agent Teams連携
  • Week 4:MCP連携 → Docker化 → 本番デプロイ → TDDでテスト駆動開発

関連記事






AI開発・導入のご相談

「何から始めればいいか分からない」「費用感を知りたい」など、AI導入に関するご相談を無料で承っております。大手SIerのような高額な費用は不要。経験豊富なエンジニアが直接対応します。

AIスクール受講生募集中

未経験からAIエンジニアへ。現役エンジニアによるマンツーマン指導で、実践的なAIスキルを最短で習得できます。就職・転職サポートも充実。まずは無料カウンセリングへ。

この記事をシェア