インストール
query()
と ClaudeSDKClient
の選択
Python SDK は Claude Code とやり取りする2つの方法を提供します:
簡単な比較
機能 | query() | ClaudeSDKClient |
---|---|---|
セッション | 毎回新しいセッションを作成 | 同じセッションを再利用 |
会話 | 単一の交換 | 同じコンテキストで複数の交換 |
接続 | 自動的に管理 | 手動制御 |
ストリーミング入力 | ✅ サポート | ✅ サポート |
割り込み | ❌ サポートなし | ✅ サポート |
フック | ❌ サポートなし | ✅ サポート |
カスタムツール | ❌ サポートなし | ✅ サポート |
チャット継続 | ❌ 毎回新しいセッション | ✅ 会話を維持 |
使用例 | 一回限りのタスク | 継続的な会話 |
query()
を使用する場合(毎回新しいセッション)
最適な用途:
- 会話履歴が不要な一回限りの質問
- 以前の交換からのコンテキストを必要としない独立したタスク
- シンプルな自動化スクリプト
- 毎回新しい開始が必要な場合
ClaudeSDKClient
を使用する場合(継続的な会話)
最適な用途:
- 会話の継続 - Claude にコンテキストを記憶させる必要がある場合
- フォローアップ質問 - 以前の応答に基づいて構築する場合
- インタラクティブアプリケーション - チャットインターフェース、REPL
- 応答駆動ロジック - 次のアクションが Claude の応答に依存する場合
- セッション制御 - 会話のライフサイクルを明示的に管理する場合
関数
query()
Claude Code との各やり取りで新しいセッションを作成します。メッセージが到着するとそれらを yield する非同期イテレータを返します。query()
への各呼び出しは、以前のやり取りの記憶なしに新しく開始します。
パラメータ
パラメータ | 型 | 説明 |
---|---|---|
prompt | str | AsyncIterable[dict] | 文字列またはストリーミングモード用の非同期イテラブルとしての入力プロンプト |
options | ClaudeAgentOptions | None | オプションの設定オブジェクト(None の場合は ClaudeAgentOptions() がデフォルト) |
戻り値
会話からのメッセージを yield する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] | [] | 許可されたツール名のリスト |
max_thinking_tokens | int | 8000 | 思考プロセスの最大トークン数 |
system_prompt | str | None | None | システムプロンプト設定。カスタムプロンプトには文字列を渡すか、Claude Code のシステムプロンプトにはプリセット形式を使用 |
mcp_servers | dict[str, McpServerConfig] | str | Path | {} | MCP サーバー設定または設定ファイルへのパス |
permission_mode | PermissionMode | None | None | ツール使用の権限モード |
continue_conversation | bool | False | 最新の会話を継続 |
resume | str | None | None | 再開するセッション ID |
fork_session | bool | False | resume で再開する際、元のセッションを継続する代わりに新しいセッション 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 がアクセスできる追加ディレクトリ |
extra_args | dict[str, str | None] | {} | CLI に直接渡す追加の CLI 引数 |
can_use_tool | CanUseTool | None | None | ツール権限コールバック関数 |
hooks | dict[HookEvent, list[HookMatcher]] | None | None | イベントをインターセプトするためのフック設定 |
agents | dict[str, AgentDefinition] | None | None | プログラム的に定義されたサブエージェント |
setting_sources | list[SettingSource] | None | None (設定なし) | SDK がどのファイルシステム設定を読み込むかを制御。省略時は設定を読み込まない |
SettingSource
SDK がファイルシステムベースの設定ソースから設定を読み込む際の制御。
値 | 説明 | 場所 |
---|---|---|
"user" | グローバルユーザー設定 | ~/.claude/settings.json |
"project" | 共有プロジェクト設定(バージョン管理対象) | .claude/settings.json |
"local" | ローカルプロジェクト設定(gitignore対象) | .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
メッセージ型
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
入力:
MultiEdit
ツール名:MultiEdit
入力:
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 リファレンス - コマンドラインインターフェース
- 一般的なワークフロー - ステップバイステップガイド