Claude Codeを使って開発を自動化している方なら、こんな疑問を持ったことはありませんか?——「このCLIの力を、自分のアプリケーションに組み込めないだろうか?」
その答えがClaude Agent SDKです。2026年、AnthropicはClaude Codeを駆動する中核エンジンをPythonとTypeScriptのライブラリとして公開しました。ファイル読み書き、コマンド実行、コード編集、Web検索——Claude Codeが持つすべての能力を、わずか数行のコードからプログラマティックに呼び出せます。
この記事では、Claude Agent SDKの導入からマルチエージェント構築、本番デプロイまでを15セクション・コード例15本で完全解説します。Python・TypeScript両方のコード例を掲載しているので、どちらの言語でも即座に実装を始められます。
この記事の内容
- 1. Claude Agent SDKとは? — Claude Codeのエンジンをライブラリ化
- 2. 5分でわかるクイックスタート — Python・TypeScriptで最初のエージェント
- 3. アーキテクチャ深掘り — エージェントループの内部構造
- 4. 9つのビルトインツール完全リファレンス
- 5. 権限モードとセキュリティ設計
- 6. Hooksで実現するガードレールと監査ログ
- 7. サブエージェントで専門AIチームを構築
- 8. MCP連携:外部ツールとのシームレスな統合
- 9. セッション管理:会話の永続化とフォーク
- 10. 実践ユースケース5選
- 11. コスト計算と最適化戦略
- 12. フレームワーク横断比較
- 13. 本番デプロイ:Docker化からモニタリングまで
- 14. よくある質問(FAQ)
- 15. まとめ:AIエージェント開発ロードマップ
Claude Agent SDKとは? — Claude Codeのエンジンをライブラリ化
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が自律的にファイルを読み、コードを編集し、コマンドを実行します。
Agent SDKが解決する3つの課題
- ツール実装の重複:ファイル操作、コマンド実行、Web検索など9つのツールが組み込み済み。車輪の再発明は不要
- コンテキスト管理の複雑さ:自動圧縮、セッション永続化、フォークを内蔵。長い会話でもコンテキストウィンドウを枯渇させない
- 安全な自律実行: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が自律的にツールを使いながらタスクを完了します。
アーキテクチャ深掘り — エージェントループの内部構造
Agent SDKの心臓部はエージェントループです。このループは、Claude Codeと同じ仕組みで動作します。
- 推論:Claudeがプロンプトとコンテキストを分析し、次のアクションを決定
- ツール実行:必要なツールを呼び出し(Read、Edit、Bashなど)、結果を取得
- 結果評価:タスクが完了したかを判断。未完了なら1に戻る
このループはClaudeのstop_reasonがend_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 |
ResultMessageのsubtypeで実行結果を判定します: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_toolsとpermission_modeを組み合わせることで、きめ細かなアクセス制御を実現できます。例えば、読み取り専用ツールのみを許可しつつacceptEditsモードにすれば、安全かつ承認不要なコード分析エージェントが作れます。
Hooksで実現するガードレールと監査ログ
Hooksは、エージェントループの各ポイントで実行されるコールバック関数です。ツール呼び出しの前後、セッション開始・終了、サブエージェントのライフサイクルなど、あらゆるイベントに介入できます。
Hookイベント一覧
Agent SDKは18種類以上のHookイベントを提供しています。特に重要なものは以下の通りです:
- PreToolUse:ツール実行前に許可/拒否/入力変更が可能
- PostToolUse:ツール実行後にログ記録やコンテキスト追加
- Stop:エージェント停止時のクリーンアップ
- Notification:エージェントのステータス通知をSlackやPagerDutyに転送
- SubagentStart/SubagentStop:サブエージェントのライフサイクル管理
パターン1:危険コマンドのブロック
本番環境でrm -rfやDROP 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をチェーンすることを推奨します。denyはaskより優先され、askはallowより優先されます。
サブエージェントで専門AIチームを構築
サブエージェントは、メインエージェントが生成する専門特化型の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つの戦略
- モデル使い分け:サブエージェントで
model: "haiku"を指定し、単純なタスクにはHaikuを使う - ツール制限:
allowed_toolsで必要最小限のツールのみ許可し、不要なツール呼び出しを防止 - max_turns制限:
max_turnsパラメータでループ回数に上限を設け、暴走を防ぐ - セッション再開:
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.subtypeでsuccess率を監視 - 実行時間:タスクごとの所要時間を記録し、異常を検知
- 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でテスト駆動開発
関連記事
- Claude Code 初心者完全ガイド【2026年最新】
- Claude Code 上級テクニック完全ガイド
- Claude Code × MCP 実践活用ガイド
- Claude Code Agent Teams完全ガイド
- Claude Code 実践ワークフロー完全ガイド
- Claude Code テスト駆動開発 完全ガイド
- Claude Code vs Codex 徹底比較
- バイブコーディング完全ガイド
- Claude Opus 4.6完全ガイド