TypeScript
Claude Code TypeScript SDKでカスタムAIエージェントを構築する
前提条件
- Node.js 18+
インストール
NPMから@anthropic-ai/claude-code
をインストールします:
TypeScript SDKのソースコードを表示するには、NPMの@anthropic-ai/claude-code
ページをご覧ください。
基本的な使用方法
TypeScript SDKを介した主要なインターフェースはquery
関数で、メッセージが到着するとそれらをストリーミングする非同期イテレータを返します:
設定オプション
引数 | 型 | 説明 | デフォルト |
---|---|---|---|
abortController | AbortController | 操作をキャンセルするためのアボートコントローラー | new AbortController() |
additionalDirectories | string[] | セッションに含める追加ディレクトリ | undefined |
allowedTools | string[] | Claudeが使用を許可されているツールのリスト | デフォルトで全ツールが有効 |
appendSystemPrompt | string | デフォルトのシステムプロンプトに追加するテキスト | undefined |
canUseTool | (toolName: string, input: any) => Promise<ToolPermissionResult> | ツール使用のカスタム許可関数 | undefined |
continue | boolean | 最新のセッションを継続する | false |
customSystemPrompt | string | デフォルトのシステムプロンプトを完全に置き換える | undefined |
cwd | string | 現在の作業ディレクトリ | process.cwd() |
disallowedTools | string[] | Claudeが使用を許可されていないツールのリスト | undefined |
env | Dict<string> | 設定する環境変数 | undefined |
executable | 'bun' | 'deno' | 'node' | 使用するJavaScriptランタイム | Node.jsで実行時はnode 、Bunで実行時はbun |
executableArgs | string[] | 実行可能ファイルに渡す引数 | [] |
fallbackModel | string | プライマリモデルが失敗した場合に使用するモデル | undefined |
hooks | Partial<Record<HookEvent, HookCallbackMatcher[]>> | カスタマイゼーション用のライフサイクルフック | undefined |
includePartialMessages | boolean | メッセージストリームに部分的なストリーミングイベントを含める | false |
maxThinkingTokens | number | Claudeの思考プロセスの最大トークン数 | undefined |
maxTurns | number | 会話ターンの最大数 | undefined |
mcpServers | Record<string, McpServerConfig> | MCPサーバー設定 | undefined |
model | string | 使用するClaudeモデル | CLI設定からのデフォルトを使用 |
pathToClaudeCodeExecutable | string | Claude Code実行可能ファイルへのパス | @anthropic-ai/claude-code に付属の実行可能ファイル |
permissionMode | PermissionMode | セッションの許可モード | "default" (オプション: "default" , "acceptEdits" , "bypassPermissions" , "plan" ) |
resume | string | 再開するセッションID | undefined |
stderr | (data: string) => void | stderr出力のコールバック | undefined |
strictMcpConfig | boolean | 厳密なMCP設定検証を強制する | undefined |
部分メッセージストリーミング
includePartialMessages
が有効になっている場合、SDKはClaude APIからの生のストリーミングイベントを含むstream_event
メッセージを発行します。これにより、生成中の部分的なコンテンツにアクセスでき、リアルタイムUI更新やプログレスインジケーターの実装に便利です。
各stream_event
メッセージには以下が含まれます:
event
: APIからの生のストリーミングイベントsession_id
: 現在のセッション識別子parent_tool_use_id
: 実行中のツールのID(該当する場合)uuid
: このイベントの一意識別子
部分メッセージストリーミングは主に、ストリーミングレスポンスに対する細かい制御が必要な高度なユースケースに有用です。ほとんどのアプリケーションでは、デフォルトの動作(完全なメッセージを待つ)で十分です。
マルチターン会話
マルチターン会話には2つのオプションがあります。
レスポンスを生成して再開するか、メッセージの配列に対して非同期/ジェネレーターを受け入れるストリーミング入力モードを使用できます。現在のところ、ストリーミング入力モードがメッセージ経由で画像を添付する唯一の方法です。
セッション管理による再開
ストリーミング入力モード
ストリーミング入力モードでは、単一の文字列の代わりに非同期イテラブルとしてメッセージを提供できます。これにより、マルチターン会話、画像添付、動的メッセージ生成が可能になります:
画像付きストリーミング入力
ストリーミング入力モードは、メッセージ経由で画像を添付する唯一の方法です:
カスタムシステムプロンプト
システムプロンプトは、エージェントの役割、専門知識、動作を定義します:
MCPサーバー統合
Model Context Protocol(MCP)により、エージェントにカスタムツールと機能を提供できます:
インプロセスMCPサーバーによるカスタムツール
SDK MCPサーバーを使用すると、アプリケーションプロセス内で直接実行されるカスタムツールを作成でき、別プロセスやネットワーク通信のオーバーヘッドなしに型安全なツール実行を提供します。
カスタムツールの作成
createSdkMcpServer
とtool
ヘルパー関数を使用して型安全なカスタムツールを定義します:
Zodによる型安全性
tool
ヘルパーは、Zodスキーマから完全なTypeScript型推論を提供します:
フック
フックを使用すると、エージェントのライフサイクルの様々な時点でカスタムコールバックを実行することで、Claude Codeの動作をカスタマイズおよび拡張できます。bashコマンドを実行するCLIフックとは異なり、SDKフックはインプロセスで実行されるJavaScript/TypeScript関数です。
フックの定義
フックはイベントタイプ別に整理され、実行タイミングをフィルタリングするオプションのマッチャーがあります:
利用可能なフックイベント
- PreToolUse: ツール実行前に実行。ツールをブロックしたりフィードバックを提供できます。
- PostToolUse: ツール実行成功後に実行。
- UserPromptSubmit: ユーザーがプロンプトを送信したときに実行。
- SessionStart: セッション開始時に実行。
- SessionEnd: セッション終了時に実行。
- Stop: Claudeが応答を停止しようとするときに実行。
- SubagentStop: サブエージェントが停止しようとするときに実行。
- PreCompact: 会話の圧縮前に実行。
- Notification: 通知が送信されるときに実行。
フック入力タイプ
各フックはイベントに基づいて型付けされた入力を受け取ります:
フック出力
フックは実行フローを制御する出力を返します:
実用的な例
ログと監視
ファイル操作の検証
コードの自動フォーマット
プロンプトの強化
カスタム圧縮指示
フック実行動作
- 並列化: マッチするすべてのフックが並列で実行されます
- タイムアウト: フックはオプションからのアボートシグナルを尊重します
- エラーハンドリング: フックエラーはログに記録されますが実行は停止しません
- マッチャー: 正規表現パターンをサポート(例:
"Write|Edit"
)
canUseToolとフックの組み合わせ
canUseTool
が許可制御を提供する一方で、フックはより広範なライフサイクル統合を提供します:
canUseToolによる許可制御
canUseTool
コールバックは、ツール実行に対する細かい制御を提供します。各ツール使用前に呼び出され、ツール入力を許可、拒否、または変更できます:
canUseToolのユースケース
- 許可管理: ツール実行を許可する前にユーザー許可をチェック
- 入力検証: 実行前にツール入力を検証またはサニタイズ
- レート制限: 高コストな操作にレート制限を実装
- 監査ログ: コンプライアンスやデバッグのためのツール使用をログ
- 動的許可: ランタイム条件に基づいてツールを有効/無効化
出力形式
テキスト出力(デフォルト)
JSON出力
入力形式
エージェント統合例
SREインシデント対応エージェント
自動セキュリティレビュー
マルチターン法務アシスタント
メッセージスキーマ
JSON APIから返されるメッセージは、以下のスキーマに従って厳密に型付けされています:
追加のサポート型:
Message
、MessageParam
、Usage
型はAnthropic TypeScript SDKで利用可能です。
関連リソース
- CLI使用方法と制御 - 完全なCLIドキュメント
- GitHub Actions統合 - ClaudeでGitHubワークフローを自動化
- 一般的なワークフロー - 一般的なユースケースのステップバイステップガイド