インストール
query() と ClaudeSDKClient の選択
Python SDKは、Claude Codeと対話するための2つの方法を提供します。
クイック比較
| 機能 | query() | ClaudeSDKClient |
|---|---|---|
| セッション | 毎回新しいセッションを作成 | 同じセッションを再利用 |
| 会話 | 単一の交換 | 同じコンテキスト内での複数の交換 |
| 接続 | 自動的に管理 | 手動制御 |
| ストリーミング入力 | ✅ サポート | ✅ サポート |
| 割り込み | ❌ サポートなし | ✅ サポート |
| フック | ❌ サポートなし | ✅ サポート |
| カスタムツール | ❌ サポートなし | ✅ サポート |
| チャット続行 | ❌ 毎回新しいセッション | ✅ 会話を維持 |
| ユースケース | 1回限りのタスク | 継続的な会話 |
query() を使用する場合(毎回新しいセッション)
最適な用途:
- 会話履歴が不要な1回限りの質問
- 前の交換からのコンテキストが不要な独立したタスク
- シンプルな自動化スクリプト
- 毎回新しく始めたい場合
ClaudeSDKClient を使用する場合(継続的な会話)
最適な用途:
- 会話の継続 - Claudeがコンテキストを記憶する必要がある場合
- フォローアップ質問 - 前の応答に基づいて構築
- インタラクティブなアプリケーション - チャットインターフェース、REPL
- 応答駆動ロジック - 次のアクションがClaudeの応答に依存する場合
- セッション制御 - 会話ライフサイクルを明示的に管理
関数
query()
Claude Codeとの各インタラクションに対して新しいセッションを作成します。メッセージが到着するにつれてメッセージを生成する非同期イテレータを返します。query() への各呼び出しは、前のインタラクションのメモリなしで新しく開始します。
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
prompt | str | AsyncIterable[dict] | 入力プロンプト(文字列またはストリーミングモード用の非同期イテラブル) |
options | ClaudeAgentOptions | None | オプションの設定オブジェクト(Noneの場合は ClaudeAgentOptions() がデフォルト) |
戻り値
会話からメッセージを生成するAsyncIterator[Message] を返します。
例 - オプション付き
tool()
型安全性を備えたMCPツールを定義するためのデコレータ。
パラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
name | str | ツールの一意の識別子 |
description | str | ツールが何をするかの人間が読める説明 |
input_schema | type | dict[str, Any] | ツールの入力パラメータを定義するスキーマ(以下を参照) |
入力スキーマオプション
-
シンプルな型マッピング(推奨):
-
JSONスキーマ形式(複雑な検証用):
戻り値
ツール実装をラップし、SdkMcpTool インスタンスを返すデコレータ関数。
例
create_sdk_mcp_server()
Pythonアプリケーション内で実行されるインプロセスMCPサーバーを作成します。
パラメータ
| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
name | str | - | サーバーの一意の識別子 |
version | str | "1.0.0" | サーバーバージョン文字列 |
tools | list[SdkMcpTool[Any]] | None | None | @tool デコレータで作成されたツール関数のリスト |
戻り値
ClaudeAgentOptions.mcp_servers に渡すことができる McpSdkServerConfig オブジェクトを返します。
例
クラス
ClaudeSDKClient
複数の交換にわたって会話セッションを維持します。 これはTypeScript SDKの query() 関数が内部的にどのように機能するかのPython相当です - 会話を継続できるクライアントオブジェクトを作成します。
主な機能
- セッション継続性: 複数の
query()呼び出しにわたって会話コンテキストを維持 - 同じ会話: Claudeはセッション内の前のメッセージを記憶
- 割り込みサポート: 実行中のClaudeを停止できる
- 明示的なライフサイクル: セッションの開始と終了を制御
- 応答駆動フロー: 応答に反応してフォローアップを送信できる
- カスタムツール&フック: カスタムツール(
@toolデコレータで作成)とフックをサポート
メソッド
| メソッド | 説明 |
|---|---|
__init__(options) | オプションの設定でクライアントを初期化 |
connect(prompt) | オプションの初期プロンプトまたはメッセージストリームでClaudeに接続 |
query(prompt, session_id) | ストリーミングモードで新しいリクエストを送信 |
receive_messages() | Claudeからのすべてのメッセージを非同期イテレータとして受信 |
receive_response() | ResultMessageを含むまでのメッセージを受信 |
interrupt() | 割り込み信号を送信(ストリーミングモードでのみ機能) |
disconnect() | Claudeから切断 |
コンテキストマネージャーサポート
クライアントは自動接続管理のための非同期コンテキストマネージャーとして使用できます:
重要: メッセージを反復処理する場合、早期に終了するために break を使用することは避けてください。これはasyncioのクリーンアップの問題を引き起こす可能性があります。代わりに、反復処理を自然に完了させるか、フラグを使用して必要なものを見つけたときを追跡してください。
例 - 会話を継続
例 - ClaudeSDKClientでのストリーミング入力
例 - 割り込みの使用
例 - 高度なパーミッション制御
型
SdkMcpTool
@tool デコレータで作成されたSDK MCPツールの定義。
| プロパティ | 型 | 説明 |
|---|---|---|
name | str | ツールの一意の識別子 |
description | str | 人間が読める説明 |
input_schema | type[T] | dict[str, Any] | 入力検証用のスキーマ |
handler | Callable[[T], Awaitable[dict[str, Any]]] | ツール実行を処理する非同期関数 |
ClaudeAgentOptions
Claude Codeクエリの設定データクラス。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
allowed_tools | list[str] | [] | 許可されたツール名のリスト |
system_prompt | str | SystemPromptPreset | None | None | システムプロンプト設定。カスタムプロンプト用に文字列を渡すか、Claude Codeのシステムプロンプト用に {"type": "preset", "preset": "claude_code"} を使用します。プリセットを拡張するために "append" を追加 |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCPサーバー設定または設定ファイルへのパス |
permission_mode | PermissionMode | None | None | ツール使用のパーミッションモード |
continue_conversation | bool | False | 最新の会話を継続 |
resume | str | None | None | 再開するセッションID |
max_turns | int | None | None | 最大会話ターン数 |
disallowed_tools | list[str] | [] | 許可されていないツール名のリスト |
model | str | None | None | 使用するClaudeモデル |
permission_prompt_tool_name | str | None | None | パーミッションプロンプト用のMCPツール名 |
cwd | str | Path | None | None | 現在の作業ディレクトリ |
settings | str | None | None | 設定ファイルへのパス |
add_dirs | list[str | Path] | [] | Claudeがアクセスできる追加ディレクトリ |
env | dict[str, str] | {} | 環境変数 |
extra_args | dict[str, str | None] | {} | CLIに直接渡す追加のCLI引数 |
max_buffer_size | int | None | None | CLI stdoutをバッファリングする場合の最大バイト数 |
debug_stderr | Any | sys.stderr | 非推奨 - デバッグ出力用のファイルのようなオブジェクト。代わりに stderr コールバックを使用 |
stderr | Callable[[str], None] | None | None | CLIからのstderr出力用のコールバック関数 |
can_use_tool | CanUseTool | None | None | ツールパーミッションコールバック関数 |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | イベント傍受用のフック設定 |
user | str | None | None | ユーザー識別子 |
include_partial_messages | bool | False | 部分的なメッセージストリーミングイベントを含める |
fork_session | bool | False | resume で再開する場合、元のセッションを継続する代わりに新しいセッションIDにフォーク |
agents | dict[str, AgentDefinition] | None | None | プログラムで定義されたサブエージェント |
plugins | list[SdkPluginConfig] | [] | ローカルパスからカスタムプラグインをロード。詳細は Plugins を参照 |
setting_sources | list[SettingSource] | None | None(設定なし) | どのファイルシステム設定をロードするかを制御。省略した場合、設定はロードされません。注: CLAUDE.mdファイルをロードするには "project" を含める必要があります |
SystemPromptPreset
オプションの追加を伴うClaude Codeのプリセットシステムプロンプトを使用するための設定。
| フィールド | 必須 | 説明 |
|---|---|---|
type | はい | プリセットシステムプロンプトを使用するには "preset" である必要があります |
preset | はい | Claude Codeのシステムプロンプトを使用するには "claude_code" である必要があります |
append | いいえ | プリセットシステムプロンプトに追加する追加の指示 |
SettingSource
SDKがロードする設定のファイルシステムベースの設定ソースを制御します。
| 値 | 説明 | 場所 |
|---|---|---|
"user" | グローバルユーザー設定 | ~/.claude/settings.json |
"project" | 共有プロジェクト設定(バージョン管理) | .claude/settings.json |
"local" | ローカルプロジェクト設定(gitignored) | .claude/settings.local.json |
デフォルト動作
setting_sources が 省略 または None の場合、SDKはファイルシステム設定をロード しません。これはSDKアプリケーションの分離を提供します。
setting_sources を使用する理由
すべてのファイルシステム設定をロード(レガシー動作):設定の優先順位
複数のソースがロードされる場合、設定は次の優先順位(高から低)でマージされます:- ローカル設定(
.claude/settings.local.json) - プロジェクト設定(
.claude/settings.json) - ユーザー設定(
~/.claude/settings.json)
agents、allowed_tools など)は常にファイルシステム設定をオーバーライドします。
AgentDefinition
プログラムで定義されたサブエージェントの設定。
| フィールド | 必須 | 説明 |
|---|---|---|
description | はい | このエージェントをいつ使用するかの自然言語説明 |
tools | いいえ | 許可されたツール名の配列。省略した場合、すべてのツールを継承 |
prompt | はい | エージェントのシステムプロンプト |
model | いいえ | このエージェント用のモデルオーバーライド。省略した場合、メインモデルを使用 |
PermissionMode
ツール実行を制御するためのパーミッションモード。
McpSdkServerConfig
create_sdk_mcp_server() で作成されたSDK MCPサーバーの設定。
McpServerConfig
MCPサーバー設定の共用体型。
McpStdioServerConfig
McpSSEServerConfig
McpHttpServerConfig
SdkPluginConfig
SDKでプラグインをロードするための設定。
| フィールド | 型 | 説明 |
|---|---|---|
type | Literal["local"] | "local" である必要があります(現在ローカルプラグインのみサポート) |
path | str | プラグインディレクトリへの絶対パスまたは相対パス |
メッセージ型
Message
すべての可能なメッセージの共用体型。
UserMessage
ユーザー入力メッセージ。
AssistantMessage
コンテンツブロック付きのアシスタント応答メッセージ。
SystemMessage
メタデータ付きのシステムメッセージ。
ResultMessage
コストと使用情報付きの最終結果メッセージ。
コンテンツブロック型
ContentBlock
すべてのコンテンツブロックの共用体型。
TextBlock
テキストコンテンツブロック。
ThinkingBlock
シンキングコンテンツブロック(思考能力を持つモデル用)。
ToolUseBlock
ツール使用リクエストブロック。
ToolResultBlock
ツール実行結果ブロック。
エラー型
ClaudeSDKError
すべてのSDKエラーの基本例外クラス。
CLINotFoundError
Claude Code CLIがインストールされていないか見つからない場合に発生します。
CLIConnectionError
Claude Codeへの接続に失敗した場合に発生します。
ProcessError
Claude Codeプロセスが失敗した場合に発生します。
CLIJSONDecodeError
JSONパースに失敗した場合に発生します。
フック型
HookEvent
サポートされているフックイベント型。セットアップの制限により、Python SDKはSessionStart、SessionEnd、およびNotificationフックをサポートしていません。
HookCallback
フックコールバック関数の型定義。
input_data: フック固有の入力データ(フックドキュメント を参照)tool_use_id: オプションのツール使用識別子(ツール関連フック用)context: 追加情報を含むフックコンテキスト
decision: アクションをブロックするには"block"systemMessage: トランスクリプトに追加するシステムメッセージhookSpecificOutput: フック固有の出力データ
HookContext
フックコールバックに渡されるコンテキスト情報。
HookMatcher
特定のイベントまたはツールにフックをマッチングするための設定。
フック使用例
ツール入出力型
すべての組み込みClaude Codeツールの入出力スキーマのドキュメント。Python SDKはこれらを型としてエクスポートしませんが、メッセージ内のツール入出力の構造を表します。Task
ツール名:Task
入力:
Bash
ツール名:Bash
入力:
Edit
ツール名:Edit
入力:
Read
ツール名:Read
入力:
Write
ツール名:Write
入力:
Glob
ツール名:Glob
入力:
Grep
ツール名:Grep
入力:
NotebookEdit
ツール名:NotebookEdit
入力:
WebFetch
ツール名:WebFetch
入力:
WebSearch
ツール名:WebSearch
入力:
TodoWrite
ツール名:TodoWrite
入力:
BashOutput
ツール名:BashOutput
入力:
KillBash
ツール名:KillBash
入力:
ExitPlanMode
ツール名:ExitPlanMode
入力:
ListMcpResources
ツール名:ListMcpResources
入力:
ReadMcpResource
ツール名:ReadMcpResource
入力:
ClaudeSDKClientを使用した高度な機能
継続的な会話インターフェースの構築
動作修正のためのフックの使用
リアルタイム進捗監視
使用例
基本的なファイル操作(queryを使用)
エラーハンドリング
クライアントでのストリーミングモード
ClaudeSDKClientでのカスタムツールの使用
関連項目
- Python SDKガイド - チュートリアルと例
- SDKの概要 - 一般的なSDKの概念
- TypeScript SDKリファレンス - TypeScript SDKドキュメント
- CLIリファレンス - コマンドラインインターフェース
- 一般的なワークフロー - ステップバイステップガイド