Claude Code SDKを使いこなせ!
tl;dr
- Claude Code SDKはClaude Codeに内包されている(追加インストール不要)
- オプション「-p」の非対話モードで使える
- 実際のスクリプト例を参考にして使いこなそう(私含めて)
はじめに
日本時間2025年5月23日に開催されたAnthropic社のCode w/ Claude。その中で、Mastering Claude Code in 30 minutesというセッションがありました。
Claude Codeを使いこなせ!に上記セッションの内容を解説しています。ただし、Claude Code SDKについては触れていません。この記事では、Claude Codeにフォーカスできればと思います。
Claude Code SDKってなに?
Claude Code SDKは、Anthropic社の「Claude Code」をプログラミング言語から自動的に呼び出せるようにする仕組みです。通常はターミナルで対話的に使うClaude Codeを、スクリプトやCIパイプラインに組み込めます。現状はコマンドライン経由で呼び出しができます。
具体的な方法としては、マンド「claude」にオプション「-p」を付けます。
現在の「SDK」の実態
SDK(Software Development Kit)というと、通常ライブラリを含むことが多いですが、現在のClaude Code SDKは異なります。Claude Codeに完全に内包されており、非対話モード(-p
オプション)を指しています。
- 追加インストール不要 - Claude Codeがインストールされていればそのまま使える
- 言語非依存 - どんなプログラミング言語からでもCloude Codeの非対話モードを呼び出せる
- TypeScript/Python SDK - 近日公開予定(より直感的なライブラリ形式)
使ってみる
それでは、実際に使ってみましょう。
まずはHello World的に
単一のプロンプトを実行してみましょう。
claude -p "フィボナッチ数を計算する関数を教えてください。ファイルへの出力は不要です。"
上記を実行すると、「対話モード」の「Claude Code」とは異なり、結果の出力のみされます。
実際の出力結果は下記でした。
フィボナッチ数を計算する関数の例をいくつか示します:
再帰的な実装(シンプルだが効率は低い):
def fibonacci_recursive(n): if n <= 1: return n return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)
反復的な実装(効率的):
def fibonacci_iterative(n): if n <= 1: return n a, b = 0, 1 for _ in range(2, n + 1): a, b = b, a + b return b
メモ化を使った実装(再帰的だが効率的):
def fibonacci_memoized(n, memo={}): if n in memo: return memo[n] if n <= 1: return n memo[n] = fibonacci_memoized(n-1, memo) + fibonacci_memoized(n-2, memo) return memo[n]
使用例:
print(fibonacci_iterative(10)) # 55
ターミナルから上記コマンドを実行したのですが、実際の様子はこちら。
単一のプロンプトを実行している様子
json形式で出力
json形式でも出力ができます。メタデータが付与されます。
claude -p "フィボナッチ数を計算する関数を教えてください。フ ァイルへの出力は不要です。" --output-format json
出力結果は下記の通り。メタデータも含まれていて、最後にsession_id
も付与されていますね。
{
"type": "result",
"subtype": "success",
"cost_usd": 0.27359730000000004,
"is_error": false,
"duration_ms": 5546,
"duration_api_ms": 6770,
"num_turns": 1,
"result": "```python\ndef fibonacci(n):\n if n <= 0:\n return 0\n elif n == 1:\n return 1\n else:\n return fibonacci(n-1) + fibonacci(n-2)\n```\n\nより効率的な実装:\n\n```python\ndef fibonacci(n):\n if n <= 0:\n return 0\n elif n == 1:\n return 1\n \n a, b = 0, 1\n for * in range(2, n + 1):\n a, b = b, a + b\n return b\n```",
"total*cost": 0.27359730000000004,
"session_id": "e7e7057e-94ea-4ec0-8a9e-507ee94c5c7a"
}
json形式でストリーミング出力
ストリーミング出力もできます。ただし、詳細なログを有効にする--verbose
が必要だそうです。
claude -p "フィボナッチ数を計算する関数を教えてください 。ファイルへの出力は不要です。" --output-format stream-json --verbose
出力結果は下記の通り。
{
"type": "system",
"subtype": "init",
"session_id": "bf9ea9b4-8bb9-4437-9ec8-f09e28e7fe76",
"tools": [
"Task",
"Bash",
"Glob",
"Grep",
"LS",
"Read",
"Edit",
"MultiEdit",
"Write",
"NotebookRead",
"NotebookEdit",
"WebFetch",
"TodoRead",
"TodoWrite",
"WebSearch"
],
"mcp_servers": []
}
{
"type": "assistant",
"message": {
"id": "msg_01D4HMEvq4Dmtp3nrsh5rmpJ",
"type": "message",
"role": "assistant",
"model": "claude-opus-4-20250514",
"content": [
{
"type": "text",
"text": "フィボナッチ数を計算する関数の例を示します:\n\n```python\ndef fibonacci(n):\n if n <= 0:\n return 0\n elif n == 1:\n return 1\n else:\n return fibonacci(n-1) + fibonacci(n-2)\n```\n\nより効率的な実装(メモ化):\n\n```python\ndef fibonacci(n, memo={}):\n if n in memo:\n return memo[n]\n if n <= 0:\n return 0\n elif n == 1:\n return 1\n else:\n memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)\n return memo[n]\n```"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 3,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 13982,
"output_tokens": 185,
"service_tier": "standard"
}
},
"session_id": "bf9ea9b4-8bb9-4437-9ec8-f09e28e7fe76"
}
{
"type": "result",
"subtype": "success",
"cost_usd": 0.0351266,
"is_error": false,
"duration_ms": 6659,
"duration_api_ms": 8361,
"num_turns": 1,
"result": "フィボナッチ数を計算する関数の例を示します:\n\n```python\ndef fibonacci(n):\n if n <= 0:\n return 0\n elif n == 1:\n return 1\n else:\n return fibonacci(n-1) + fibonacci(n-2)\n```\n\nより効率的な実装(メモ化):\n\n```python\ndef fibonacci(n, memo={}):\n if n in memo:\n return memo[n]\n if n <= 0:\n return 0\n elif n == 1:\n return 1\n else:\n memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)\n return memo[n]\n```",
"total_cost": 0.0351266,
"session_id": "bf9ea9b4-8bb9-4437-9ec8-f09e28e7fe76"
}
出力形式の使い分け
- text: 人間が読む場合
- json: プログラム処理用
- stream-json: プログラム処理が必要かつ、進捗表示をしたい場合
会話の継続
2つのやり方があります。
-
--continue
: 最新の会話を再開する -
--resume
: Session IDで会話を再開する
--continue
を使った例は下記です。
claude -p "やりとりした内容を教えて。ファイルへの出力は不要です。" --output-format text --continue
何回か同じ質問をしており、下記のような回答が出力されました。
今回のやりとりの内容:
1. **あなた**: フィボナッチ数を計算する関数を教えてください
2. **私**: 3種類のフィボナッチ関数を提示(再帰、動的計画法、最適化版)
3. **あなた**: やりとりした内容を教えて
4. **私**: 会話の要約を提供
5. **あなた**: やりとりした内容を教えて(2回目)
6. **私**: 会話の要約を提供(2回目)
7. **あなた**: やりとりした内容を教えて(3回目)
現在、同じ質問を3回繰り返していただいています。
--resume
を使った例は下記です。
claude -p "やりとりした内容を教えて。ファイルへの出力は不要です。" --output-format text --resume ce05eb12-3d12-48fb-b316-36d8c61ebc95
同じ質問をする前のSession IDを使ったので、繰り返しているという指摘がなかったです。
これまでのやりとり内容:
1. **あなたの質問**: フィボナッチ数を計算する関数を教えてください(ファイルへの出力は不要)
2. **私の回答**: 3つの異なるアプローチでフィボナッチ数を計算する関数を提示
- 再帰的アプローチ(シンプルだが効率が悪い)
- 動的計画法(効率的)
- スペース最適化版(最も効率的)
3. **現在の質問**: やりとりした内容を教えて(ファイルへの出力は不要)
実装例
下記のように様々なプログラミング言語からターミナルで使えるコマンド実行をすることで、Claude Codeの非対話モード( = Claude Code SDK)を実行できます。
import subprocess
# Claude Code CLIの非対話モードを使用
result = subprocess.run(
['claude', '-p', 'コードレビュー', '--output-format', 'json'],
capture_output=True
)
直近の事例
Claude Code SDKは、開発ワークフローとの強力な統合を可能にします。例として、Claude Code GitHub Actionsがあります。これはSDKを使用して、GitHub内で直接自動コードレビュー、PR作成、課題トリアージ機能を提供します。
おわりに
いかがでしたか。Claude Code SDKを使っていきたい方の参考に少しでもなれると幸いです!
公式ドキュメントは下記となります。この記事でキャッチアップできている状態で読むと理解度が違うと思いますので、ぜひ目を通してみてください!
Discussion