Claude Agent SDK完全ガイド:PythonとTypeScriptでClaudeのエージェント機能をアプリに組み込む

Claude Agent SDKとは何か

Claude Agent SDK(旧称: Claude Code SDK)は、AnthropicがClaude Codeの中核エンジンをPython・TypeScriptのライブラリとして公開したSDKです。

2026年初頭に正式名称が「Claude Code SDK」から「Claude Agent SDK」に改名されました。パッケージ名はPythonが claude-agent-sdk、TypeScriptが @anthropic-ai/claude-agent-sdk です。

このSDKを使うことで、ファイル読み書き・シェルコマンド実行・Web検索・サブエージェント生成といったClaude Codeが持つエージェント能力を、自分のアプリケーションに直接組み込むことができます。

課金体系の重要ポイント: SDKそのものは無料・オープンソースです。課金はAnthropicのAPIトークン消費分のみ発生します。また、Anthropic APIだけでなく、Amazon Bedrock・Google Vertex AI・Azure OpenAI Serviceにも対応しています。


インストール方法

Python

pip install claude-agent-sdk

TypeScript / Node.js

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

基本的な使い方:query() 関数

Claude Agent SDKのメインエントリポイントは query() 関数です。この関数は非同期イテレータを返すため、async for ループでメッセージをストリーミング受信できます。

Pythonサンプル

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    options = ClaudeAgentOptions(
        model="claude-sonnet-4-6",
        max_turns=5,
    )

    async for message in query(
        prompt="カレントディレクトリのPythonファイルを一覧表示して、最も行数の多いファイルを教えてください",
        options=options,
    ):
        # メッセージタイプ別に処理
        if message.type == "assistant":
            print(message.content)
        elif message.type == "tool_result":
            print(f"[ツール実行結果] {message.tool_name}: {message.output[:100]}...")

asyncio.run(main())

TypeScriptサンプル

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

async function main() {
  const options: ClaudeAgentOptions = {
    model: "claude-sonnet-4-6",
    maxTurns: 5,
  };

  for await (const message of query({
    prompt: "package.jsonを読み込んで、依存パッケージの一覧を表示してください",
    options,
  })) {
    if (message.type === "assistant") {
      console.log(message.content);
    }
  }
}

main();

組み込みツール:10種以上のエージェント機能

Claude Agent SDKには、エージェントが自律的にタスクを実行するための組み込みツールが10種以上用意されています。追加実装なしにそのまま使えます。

ツール名 機能
Read ファイル読み込み(画像・PDF・Jupyterノートブック対応)
Write ファイル作成・上書き
Edit 文字列の差分置換(surgical replacement)
Bash シェルコマンド実行(タイムアウト設定可)
Glob ファイルパターンマッチング
Grep コード・テキスト検索
WebSearch Web検索
WebFetch URL取得・コンテンツ解析
Monitor バックグラウンドプロセス監視
Agent サブエージェント生成(マルチエージェント並列処理)

特に注目すべきは Edit ツールです。ファイル全体を上書きするのではなく、指定した文字列だけを差分置換(surgical replacement)するため、大きなファイルの一部だけを効率的に修正できます。


ライフサイクルフック:ツール実行前後に処理を挟む

SDKはライフサイクルフックに対応しています。ツール呼び出しの前後や、エージェントのターン開始・終了時に独自の処理を挟むことができます。

Pythonでのフック実装例

from claude_agent_sdk import query, ClaudeAgentOptions, LifecycleHooks

class MyHooks(LifecycleHooks):
    async def on_tool_call(self, tool_name: str, tool_input: dict) -> None:
        # ツール呼び出し前にログ記録
        print(f"[HOOK] ツール呼び出し: {tool_name}, 入力: {tool_input}")

    async def on_tool_result(self, tool_name: str, result: str) -> None:
        # ツール実行後に結果をチェック
        print(f"[HOOK] ツール完了: {tool_name}, 文字数: {len(result)}")

async def main():
    options = ClaudeAgentOptions(
        model="claude-sonnet-4-6",
        hooks=MyHooks(),
    )

    async for message in query(
        prompt="src/ディレクトリ内のTypeScriptファイルを検索して",
        options=options,
    ):
        pass

asyncio.run(main())

ログ記録・監査証跡・コスト管理など、プロダクション運用で必要な処理をフックで一元管理できます。


MCPサーバー連携:データベース・外部APIへの接続

MCP(Model Context Protocol) サーバーと連携することで、データベースや外部APIへのアクセスをエージェントに追加できます。

from claude_agent_sdk import query, ClaudeAgentOptions, MCPServerConfig

async def main():
    options = ClaudeAgentOptions(
        model="claude-sonnet-4-6",
        mcp_servers=[
            MCPServerConfig(
                name="postgres",
                command="npx",
                args=["-y", "@modelcontextprotocol/server-postgres"],
                env={"DATABASE_URL": "postgresql://localhost/mydb"},
            )
        ],
    )

    async for message in query(
        prompt="usersテーブルのレコード数を教えてください",
        options=options,
    ):
        if message.type == "assistant":
            print(message.content)

asyncio.run(main())

MCP対応のサーバーは、PostgreSQL・SQLite・GitHub・Slack・Google Driveなど多数が公開されており、エージェントの能力を大幅に拡張できます。


マルチエージェント:並列処理で性能を最大化

Claude Agent SDKの Agent ツール を使うと、サブエージェントを動的に生成して並列実行できます。

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

マルチエージェントの実装イメージ

from claude_agent_sdk import query, ClaudeAgentOptions

ORCHESTRATOR_PROMPT = """
あなたはオーケストレーターです。以下のタスクを並列で実行してください:

1. サブエージェントAに「src/ディレクトリのPythonファイルを解析して品質レポートを作成」を依頼
2. サブエージェントBに「tests/ディレクトリのテストカバレッジを調査してレポートを作成」を依頼

両方の結果を受け取ったら、統合レポートを report.md に書き出してください。
"""

async def run_pipeline():
    options = ClaudeAgentOptions(
        model="claude-sonnet-4-6",
        max_turns=20,  # マルチエージェントは多めのターンを確保
    )

    async for message in query(
        prompt=ORCHESTRATOR_PROMPT,
        options=options,
    ):
        if message.type == "assistant":
            print(message.content)

asyncio.run(run_pipeline())

並列実行する際、各リクエストは tool_use_idagent_id で識別されます。2026年のアップデートで ToolPermissionContext にこれらが公開され、並列処理の制御がより柔軟になりました。


2026年の最新アップデート

get_context_usage() メソッド

コンテキストウィンドウの使用量をカテゴリ別に取得できる新メソッドが追加されました。

from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    options = ClaudeAgentOptions(model="claude-sonnet-4-6")

    session = None
    async for message in query(prompt="大きなプロジェクトを解析して", options=options):
        session = message.session  # セッション情報を保持

    # コンテキスト使用量を確認
    if session:
        usage = session.get_context_usage()
        print(f"システムプロンプト: {usage.system_prompt_tokens} tokens")
        print(f"会話履歴: {usage.conversation_tokens} tokens")
        print(f"ツール定義: {usage.tool_tokens} tokens")
        print(f"合計: {usage.total_tokens} / {usage.max_tokens} tokens")

asyncio.run(main())

長期間のエージェントタスクでコンテキスト枯渇を事前に検知し、適切なタイミングでコンパクション処理を行うといった運用が可能になります。

typing.Annotated でパラメータ説明を付与

カスタムツールを定義する際、typing.Annotated を使ってパラメータの説明を付与できるようになりました。

from typing import Annotated
from claude_agent_sdk import tool

@tool
def calculate_discount(
    price: Annotated[float, "元の価格(円)"],
    rate: Annotated[float, "割引率(0.0〜1.0)"],
) -> float:
    """割引後の価格を計算する"""
    return price * (1 - rate)

Claude がツールの使い方をより正確に理解するため、ツール呼び出しの精度が向上します。


Amazon BedrockやVertex AIで使う

Claude Agent SDKはAnthropicのAPIに限定されず、クラウドプロバイダー経由でも利用できます。

from claude_agent_sdk import query, ClaudeAgentOptions, BedrockConfig

async def main():
    options = ClaudeAgentOptions(
        model="anthropic.claude-sonnet-4-6-v1:0",
        bedrock=BedrockConfig(
            region="us-east-1",
            # AWS認証情報は環境変数 AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY を使用
        ),
    )

    async for message in query(
        prompt="AWSのS3バケット一覧を確認して",
        options=options,
    ):
        if message.type == "assistant":
            print(message.content)

asyncio.run(main())

既存のAWS・GCPインフラにそのまま統合できるため、企業のセキュリティ・コンプライアンス要件を満たしながらエージェント機能を活用できます。


まとめ:どんなユースケースに向いているか

Claude Agent SDKは以下のような用途で特に威力を発揮します。

  • コードレビュー自動化: リポジトリを解析し、品質レポートを生成するエージェント
  • ドキュメント生成: コードベースを読み込み、READMEやAPIドキュメントを自動作成
  • データパイプライン: Webからデータ収集→加工→DB保存を一連のフローで実行
  • インフラ運用: ログを分析してアラート内容を要約・対応手順を提案
  • マルチエージェントCI/CD: テスト・レビュー・デプロイを専門エージェントで並列処理

SDKのセットアップは pip install claude-agent-sdk の一行で完了します。あとは query() に自然言語のプロンプトを渡すだけで、Claude Codeが持つフルエージェント能力がすぐに使えます。まずは小さなスクリプトから試してみてください。