BUILD AGENTS · LEVEL 10
Agent SDK でプログラマティックに使う
TypeScript / Python から Claude を呼ぶ。
- FOR
- Claude を製品に組み込む開発者
- DURATION
- 90分
この概念を 2 分前後で
このコースで作るもの
- 01SDK 最小サンプル(query() + ClaudeSDKClient)
- 02カスタムツール + MCP 接続のソースコード
- 03コスト / テレメトリ計測スクリプト
達成目安
全 5 レッスンを読み、コース完了マークを付ける
未完了
クイズ 6 問に挑戦し、正答率 80% 以上
未挑戦
成果物 3 個を実際に手元に作る
自己チェック
このレベルが
終わると
- query() と ClaudeSDKClient を使い分けられる
- カスタムツールと MCP サーバーを宣言できる
- Hooks / Permissions / Subagents を SDK で扱える
- コストとテレメトリをエクスポートできる
01 / 05
最小の query()
ストリーミング応答とツール呼び出しを最短で書く例です。
typescriptimport { query } from "@anthropic-ai/claude-agent-sdk"; for await (const msg of query({ prompt: "src/ の TODO コメントを一覧して", options: { cwd: process.cwd(), permissionMode: "plan", }, })) { if (msg.type === "result") console.log(msg.result); }理解度チェック
Q1.query() の戻り値の扱い方として正しいのは?
Q2.SDK で読取専用の調査を安全に実行したい場合、最初に設定すべき option は?
02 / 05
カスタムツール定義
tool() で型安全なツールを宣言し、createSdkMcpServer() でひとまとめに公開できます。
typescriptimport { tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk"; import { z } from "zod"; const getWeather = tool({ name: "get_weather", description: "都市名から天気を返す", inputSchema: z.object({ city: z.string() }), handler: async ({ city }) => fetchWeather(city), }); export const server = createSdkMcpServer({ tools: [getWeather] });理解度チェック
Q1.tool() で inputSchema に zod を使うメリットは?
03 / 05
セッション継続
continue / resume / fork の3つで、状態の継承パターンを完全に制御できます。`continue: true` で直前を継ぐ、ID 指定で resume、`forkSession: true` で履歴を保ったまま分岐。
typescriptimport { ClaudeSDKClient } from "@anthropic-ai/claude-agent-sdk"; const client = new ClaudeSDKClient({ cwd: process.cwd(), continueLatest: true, // 直前のセッションを継承 }); // 任意の時点でフォーク(履歴を残しつつ別 ID で分岐) const forkId = await client.forkSession(); console.log("forked:", forkId);理解度チェック
Q1.履歴を保ったまま分岐させたい場合、SDK で使うのは?
04 / 05
ストリーミング応答とツール呼出をハンドル
AI 応答の各イベント(assistant の delta、tool_use、tool_result、result)をストリームで受け取ります。チャット UI の「タイプライター効果」も、Slack ボットの「考え中…」表示も、すべてここから組み立てます。
typescriptfor await (const msg of query({ prompt, options: { stream: true } })) { if (msg.type === "assistant") process.stdout.write(msg.delta ?? ""); if (msg.type === "tool_use") console.log("\n[tool]", msg.name); if (msg.type === "result") console.log("\n[done]", msg.usage); }理解度チェック
Q1.チャット UI のタイプライター効果を作るときに使うイベント種別は?
05 / 05
コスト追跡を運用に組み込む
毎クエリの `total_cost_usd` と `usage`(input/output/cache)を集計し、ユーザー単位でクォータをかけたり、上限ヒット時に effort level を下げたりするのが本番運用の定石。
理解度チェック
Q1.本番運用でユーザー単位のクォータ管理に最も有効なのは?
last updated
2026-05-10
公式ドキュメント (出典)


