「なぜこの答えになったのか」が見えると、AIへの信頼感が大きく変わります。
Claude 4 に搭載された拡張思考(Extended Thinking)は、モデルが答えを出すまでの推論プロセスを開示する機能です。ただ「使える」というだけでなく、実際に本番コードに組み込んだときに「どの場面で役立つか」「どこに落とし穴があるか」を知っておかないと、コストだけが膨らむ結果になりかねません。
ここでは拡張思考の基本的な使い方から、Claude Code での実践的な活用まで、実際に手を動かしながら学べるように整理しました。
拡張思考とは(何が変わるのか
通常の Claude API レスポンスでは、最終的な回答テキストだけが返ってきます。拡張思考を有効にすると、回答の前に thinking タイプのブロックが追加され、そこにモデルが辿った推論の過程が記録されます。
これは単なる「説明の追加」ではありません。モデルが思考プロセスを持てるようになることで、複雑な問題に対する答えの精度自体が上がります。特に数学的推論、多段階の判断が必要なコードレビュー、競合する要件の整理といったタスクで、その差が出やすいです。
ただし、思考プロセスはトークンを消費します。budget_tokens の設定次第でコストが大きく変わるため、使いどころの判断が重要です。
基本的な実装
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-6", # 拡張思考は Opus 4 / Sonnet 4 で利用可能
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000 # 思考に使えるトークン上限
},
messages=[{
"role": "user",
"content": "このコードのセキュリティ脆弱性を全て指摘してください:\n\n```python\ndef authenticate(username, password):\n query = f'SELECT * FROM users WHERE name={username} AND pass={password}'\n return db.execute(query)\n```"
}]
)
# レスポンスブロックを分類して処理
for block in response.content:
if block.type == "thinking":
print("=== 思考プロセス ===")
print(block.thinking)
print()
elif block.type == "text":
print("=== 回答 ===")
print(block.text)budget_tokens は max_tokens の上限内に収まるように設定します。上記の例では max_tokens=16000 に対して budget_tokens=10000 としているため、思考に最大1万トークン、回答に最大6千トークンが割り当てられます。
ストリーミングとの組み合わせ
長い思考プロセスをリアルタイムで受け取る場合はストリーミングが実用的です。
import anthropic
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=8000,
thinking={
"type": "enabled",
"budget_tokens": 5000
},
messages=[{
"role": "user",
"content": "この要件を満たす最適なデータベーススキーマを設計してください: [要件の詳細]"
}]
) as stream:
current_block_type = None
for event in stream:
# ブロックの開始イベントでタイプを記録
if hasattr(event, 'type') and event.type == 'content_block_start':
if hasattr(event.content_block, 'type'):
current_block_type = event.content_block.type
if current_block_type == 'thinking':
print("\n[思考中...]", flush=True)
elif current_block_type == 'text':
print("\n[回答]", flush=True)
# テキストデルタを出力
elif hasattr(event, 'type') and event.type == 'content_block_delta':
if hasattr(event.delta, 'thinking'):
print(event.delta.thinking, end='', flush=True)
elif hasattr(event.delta, 'text'):
print(event.delta.text, end='', flush=True)思考ブロックのストリーミングは、「AIが今どこまで考えているか」をユーザーに見せる UX として活用できます。特に時間がかかるタスクでの離脱防止に効果的です。
budget_tokens の設定指針
budget_tokens は「多ければ多いほど良い」わけではありません。タスクの複雑さに応じた設定が、コストと品質の最適なバランスを生みます。
1,000〜3,000トークン: 単純な質問の整理、短いコードの修正 5,000〜10,000トークン: 中程度の複雑さのコード設計、要件整理 15,000〜30,000トークン: 大規模システム設計、複雑な数学的問題
過大な budget_tokens を設定しても、モデルが必要以上の思考をするわけではありません。実際には「必要な思考量」で完了します。ただしトークン消費の上限が増えるため、予期せぬコスト増加を避けるために適切な上限設定を心がけてください。
Claude Code での実践的な活用シーン
Claude Code(CLI ツール)から拡張思考を直接制御する方法はまだ限られていますが、API を経由した活用は今すぐ実践できます。以下は実際に効果を感じているシーンです。
本番デプロイ前のコードレビュー
「このPRをマージしていいか」という最終判断を Claude に委ねるとき、拡張思考を有効にすると「なぜ問題なのか」の説明が格段に充実します。表面的なバグだけでなく、設計上の問題や将来の拡張性への懸念も丁寧に言語化してくれます。
複雑な要件定義のレビュー
複数の利害関係者からの要件が競合しているとき、拡張思考モデルに整理を任せると、「このトレードオフをどう考えたか」という判断プロセスが見えて、チーム内の合意形成に役立ちます。
ガイドの前提知識として、Claude Code のモデル選択戦略とトークン使用量の最適化管理を参照していただくと、コスト面での実践的な補完になります。
注意点:思考内容はキャッシュされない
現時点では、thinking ブロックの内容はプロンプトキャッシュの対象外です。マルチターンの会話で思考内容を次のターンに渡すことは技術的には可能ですが、キャッシュが効かないためコストが増大します。
実用上は「1ターンで完結するタスク」に拡張思考を使い、会話的なやりとりには通常モードを使うという切り分けが現実的です。
まず試してほしい一歩
既存のコードベースで「一番難しい」と感じているコードレビューに、拡張思考付きの Opus 4 を使ってみてください。思考ブロックの中身を読むだけで、「なぜこのコードが危ないのか」の新しい視点が得られるはずです。それだけでも、拡張思考の価値を体感できると思います。