← レッスンに戻る
第10章 · エコシステムと次のステップ

Agent SDK でカスタムエージェントを作る

Agent SDK · 約 14 分

重要キーワード

English日本語説明
Agent SDK エージェントSDK Claude Code のコアを再利用してカスタムエージェントを構築できる SDK
Loop ループ 計画→ツール実行→観察 を繰り返す基本構造
Memory メモリ セッションを跨いで保持する状態
Headless ヘッドレス 対話 UI なしで動かすモード

Claude Agent SDK

Agent SDK は、Claude Code の中核 (計画 → ツール → 観察 ループ) を 任意のアプリに組み込める SDK。 ターミナルだけでなく、Slack ボット・社内ツール・SaaS の中で動くエージェントが作れます。

なぜ Agent SDK?

インストール

pip install claude-agent-sdk
# or
npm install @anthropic-ai/claude-agent-sdk

Hello World (Python)

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    options = ClaudeAgentOptions(
        system_prompt="あなたはコード解析の専門家です。",
        allowed_tools=["Read", "Glob", "Grep"],
        cwd="/path/to/repo",
    )
    async for msg in query(
        prompt="このリポジトリの依存関係を要約して",
        options=options,
    ):
        print(msg)

asyncio.run(main())

主要オプション

オプション 用途
system_prompt エージェントの役割
allowed_tools 利用可能ツール (Read/Edit/Bash...)
cwd 作業ディレクトリ
mcp_servers MCP サーバー設定
hooks フック登録
permission_mode default / acceptEdits / plan
model 使用モデル
max_turns 自律ループの上限

Streaming で受信

async for msg in query(prompt=user_input, options=options):
    if msg.type == "assistant_message":
        print(msg.content[0].text)
    elif msg.type == "tool_use":
        print(f"[Tool] {msg.name}({msg.input})")
    elif msg.type == "result":
        print(f"[Done] {msg.usage}")

Slack ボット例

from slack_bolt import App
from claude_agent_sdk import query, ClaudeAgentOptions

app = App(token=SLACK_TOKEN)

@app.event("app_mention")
async def handle_mention(event, say):
    options = ClaudeAgentOptions(
        system_prompt="あなたは社内ヘルプデスクです。",
        allowed_tools=["WebFetch", "Read"],
    )
    answer = ""
    async for msg in query(prompt=event["text"], options=options):
        if msg.type == "assistant_message":
            answer += msg.content[0].text
    say(answer)

TypeScript 版

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

const options: ClaudeAgentOptions = {
  systemPrompt: "...",
  allowedTools: ["Read", "Glob"],
};
for await (const msg of query({ prompt: "...", options })) {
  console.log(msg);
}

Hooks との組み合わせ

Agent SDK でも .claude/settings.json の hooks が動きます。 ファイル編集 → 自動 lint、危険コマンドブロック、ロギング等が SDK から動く。

Headless モード

-p フラグ的なワンショット呼び出し:

result = await query_oneshot(prompt="..." , options=options)

CI ジョブや バッチ処理向け。

Multi-Agent パターン

複数のエージェントを協調させる: - Researcher: 情報収集 - Writer: 草案作成 - Critic: レビュー - Editor: 仕上げ

各エージェントを Claude Agent SDK の query で動かし、結果を別エージェントに渡す。

セキュリティ

Use Case

Claude Code との関係

試す

カスタムエージェントの設計を Claude に。

▶ Agent 設計依頼
「社内 GitHub の PR を毎晩レビューして翌朝の Slack に要約投稿する」エージェントの設計を Agent SDK 想定で書いてください。必要な ClaudeAgentOptions / 主要ロジックの擬似コード / リスクと緩和策を順に。

演習問題

演習 1: 最小エージェントを書く

Agent SDK で 30 行以内のミニエージェントを書いてください。

  • 用途: 「指定フォルダの README.md を集めて 5 行で要約する」
  • 利用ツール: Read, Glob のみ
  • 出力: Markdown
スタータープロンプト:
Python で claude-agent-sdk を使った最小エージェントを書いてください。
- system_prompt: 「あなたはドキュメント要約の専門家」
- allowed_tools: ['Read', 'Glob']
- 動作: cwd 配下の **/README.md を全て探し、各内容を 1 行で要約 → 全体要約 5 行を Markdown 出力
- async/await で書く
完全コードを示してください。
ヒントを見る

pip install claude-agent-sdk が必要 (パッケージ名は環境により異なる場合あり、Anthropic 公式 GitHub で要確認)。エラー処理は最小で。

理解度チェック

  1. Agent SDK の核心となる仕組みは?
    1. 計画 → ツール実行 → 観察 のループ
    2. GPU の自動割当て
    3. GUI ウィンドウ管理
    4. DB トランザクション制御
  2. Claude Code と Agent SDK の関係は?
    1. 全く別物
    2. Claude Code = Agent SDK + ターミナル UI + 公式 Hooks/Skills
    3. Claude Code は Agent SDK の旧名
    4. Agent SDK は Claude Code を非推奨にする
  3. Agent SDK で危険な無限ループを防ぐオプションは?
    1. max_turns
    2. max_tokens
    3. temperature
    4. top_p
  4. Agent SDK のセキュリティ推奨でないのは?
    1. ツール許可リストを最小化
    2. 全ツール allow
    3. Hooks でガード
    4. サンドボックス化
解答と解説を見る
  1. A — ReAct 型のエージェントループが核です。
  2. B — Claude Code は Agent SDK のコアにターミナル UI と公式拡張が乗ったもの、と捉えるのが正確です。
  3. A — max_turns でエージェントの自律ループ回数に上限をかけられます。
  4. B — 全ツール allow は危険。最小権限が原則です。