Prompt Cachingの設定方法
Prompt cachingは、同じプレフィックス(システムプロンプト・ドキュメント等)を繰り返し送信するコストと遅延を大幅に削減できる機能です。
2つの設定方法
① 自動キャッシュ(Automatic Caching)
リクエストのトップレベルに cache_control フィールドを1つ追加するだけで、最後のキャッシュ可能なブロックに自動的にブレークポイントが適用されます。会話が長くなるにつれて自動的に前に移動します。マルチターン会話に最適です。 Claude API Docs
python
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"}, # ← これだけ追加
system="長いシステムプロンプト...",
messages=[{"role": "user", "content": "質問"}],
)
② 明示的なブレークポイント(Explicit Cache Breakpoints)
個々のコンテンツブロックに cache_control を配置して、キャッシュする箇所を細かく制御できます。 Claude API Docs
python
# Python
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "長いシステムプロンプト(静的な部分)...",
"cache_control": {"type": "ephemeral"} # ここまでをキャッシュ
}
],
messages=[{"role": "user", "content": "動的な質問"}],
)
typescript
// TypeScript
const response = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: [
{
type: "text",
text: "長いシステムプロンプト...",
cache_control: { type: "ephemeral" },
},
],
messages: [{ role: "user", content: diff }],
});
TTL(キャッシュ保持時間)
| TTL | 設定 | コスト |
|---|---|---|
| 5分(デフォルト) | {"type": "ephemeral"} | 書き込み:通常の1.25倍、読み込み:通常の0.1倍 |
| 1時間(拡張) | {"type": "ephemeral", "ttl": "1h"} | 書き込み:通常の2倍、読み込み:通常の0.1倍 |
5分TTLは2回目以降のリクエストから元が取れます。1時間TTLは3回目以降から元が取れます。リクエスト間隔が10分以内なら5分TTLで十分です。 DEV Community
キャッシュ確認方法
レスポンスの usage フィールドで確認できます:
python
print(response.usage.cache_creation_input_tokens) # 新規キャッシュ作成
print(response.usage.cache_read_input_tokens) # キャッシュから読み込み
print(response.usage.input_tokens) # 通常処理
両方が0の場合、キャッシュされていません(最小トークン数に達していない可能性があります)。 Claude API Docs
最小キャッシュサイズ
Claude Opus 4.8・Claude Sonnet 4.6・Claude Sonnet 4.5などは 1,024トークン以上 必要です。これ未満のプロンプトはキャッシュされず、エラーも返りません。 Claude API Docs
キャッシュが無効になるケース
- システムプロンプトの内容を変更した
- ツール定義を変更した
- プロンプト内の画像の有無が変わった
tool_choiceを変更した

1. キャッシュの仕組み(イメージ)
Claudeのプロンプトキャッシュは、「毎回変わらない長文(取扱説明書や共通ルールなど)」をあらかじめClaudeに記憶させておく仕組みです。
- 1回目(初回): データを読み込ませるため、通常通りの料金と時間がかかります。
- 2回目以降: 記憶したデータ(キャッシュ)を使い回すため、料金が最大90%安くなり、返答スピードも圧倒的に早くなります。
2. 最も重要なルール:「配置の順番」
キャッシュを成功させる最大のコツは、「固定の長文を上に、毎回変わる質問を下に書く」ことです。Claudeは上から順番に文字をチェックするため、途中で1文字でも変わると、それ以降のキャッシュがすべて無効になってしまいます。
- ⭕️ 成功パターン:
[共通マニュアル(キャッシュ化)]+[今日の質問] - ❌ 失敗パターン:
[今日の質問]+[共通マニュアル](上に質問が来ると、下のマニュアルが毎回未読扱いになります)
3. 設定コードの書き方(超シンプル版)
設定は、キャッシュしたいブロックの最後に "cache_control": {"type": "ephemeral"} を1行足すだけです。
JSON
{
"model": "claude-3-7-sonnet-20250219",
"system": [
{
"type": "text",
"text": "ここに数万文字の固定データ(マニュアルや自社ルールなど)を入れます。",
"cache_control": {"type": "ephemeral"} // 👈 これを付けるだけ!
}
],
"messages": [
{
"role": "user",
"content": "今日の売上データを分析して?" // 毎回変わる質問
}
]
}
4. これだけは注意! 2つの条件
- 文字数の制限: 長文専用の機能です。
SonnetやOpusを使う場合、キャッシュする部分が約700〜800文字以上(1,024トークン以上)ないと、設定してもキャッシュされません。 - 有効期限(TTL): 記憶の寿命は 5〜10分間 です。最後の質問から10分以上あくと忘れてしまうため、定期的に何度も質問を投げるようなシステム(チャットボットや、連続したデータ処理など)で最大の効果を発揮します。

小学生でもわかるように説明するね😊
🍱 Prompt Cachingって何?
お弁当を毎日作るのに例えると…
毎日「ごはん」「卵焼き」「ウインナー」は同じ。でも「今日のおかず」だけ変わる。
→ 毎日同じものを一から作るのは大変!だから、同じ部分だけ先に作り置き(キャッシュ)しておくのが Prompt Caching です。
⚙️ 設定の手順
ステップ1:いつもの命令文(システムプロンプト)を用意する
python
システムプロンプト = "あなたは親切なアシスタントです。(長い説明...)"
ステップ2:cache_control という「作り置きシール」を貼る
python
system=[
{
"type": "text",
"text": システムプロンプト,
"cache_control": {"type": "ephemeral"} # ← これが「作り置きシール」!
}
]
ステップ3:ふつうにAPIを呼び出す(それだけ!)
python
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "あなたは親切なアシスタントです。(長い説明...)",
"cache_control": {"type": "ephemeral"} # ← ここだけ追加!
}
],
messages=[
{"role": "user", "content": "今日の質問はこれです!"}
]
)
🔍 ちゃんと動いてるか確認する
python
print(response.usage.cache_creation_input_tokens) # 初回:ここに数字が出る
print(response.usage.cache_read_input_tokens) # 2回目以降:ここに数字が出る
- 🥇 1回目:「作り置き」を保存中 →
cache_creationに数字 - 🚀 2回目以降:「作り置き」を使ってる →
cache_readに数字(安い!)
📝 まとめ
| やること | むずかしさ |
|---|---|
cache_control を書き足す | ★☆☆(1行追加するだけ!) |
| 効果が出るまで待つ | ★☆☆(2回目から自動的に安くなる) |
| 確認する | ★☆☆(数字を見るだけ) |
つまり、やることは「シールを1枚貼る」だけです! 🎉

cache_control はどこで設定するのか Claude or Claude Code?
Claudeが返答しました: どちらでもなく、あなたが書くプログラム(コード)の中で設定します!
どちらでもなく、あなたが書くプログラム(コード)の中で設定します!
整理すると…
| サービス | 役割 | cache_control の設定 |
|---|---|---|
| Claude.ai | ブラウザで使うチャット画面 | ❌ できない(設定する場所がない) |
| Claude Code | コーディング補助ツール | ❌ 直接設定するものではない |
| Claude API | 開発者向けの窓口 | ✅ ここに送るリクエストの中に書く |
イメージ図
あなたのプログラム
↓
└─ cache_control を書いたリクエストを送る
↓
Claude API(Anthropicのサーバー)
↓
Claudeが返答
つまり
cache_control は「Claude や Claude Code の画面で設定するもの」ではなく、PythonやTypeScriptなどで自分でコードを書いて、APIにリクエストを送るときに含めるものです。
API キーを取得して自分でコードを書く「開発者向けの機能」なので、Claude.ai のチャット画面を使っているだけでは関係ない設定です。
PythonでClaude APIにリクエストを書く方法
ステップ1:ライブラリをインストール
ターミナル(黒い画面)で実行:
bash
pip install anthropic

ステップ2:APIキーを取得
- https://console.anthropic.com にアクセス
- アカウント作成 → ログイン
- 「API Keys」→「Create Key」でキーをコピー
ステップ3:コードを書く
python
import anthropic
# クライアントを作る(APIキーを設定)
client = anthropic.Anthropic(api_key="sk-ant-ここにAPIキーを貼る")
# リクエストを送る
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=[
{
"type": "text",
"text": "あなたは親切なアシスタントです。",
"cache_control": {"type": "ephemeral"} # ← キャッシュ設定!
}
],
messages=[
{"role": "user", "content": "こんにちは!"}
]
)
# 返答を表示
print(response.content[0].text)
# キャッシュの状況を確認
print("キャッシュ作成:", response.usage.cache_creation_input_tokens)
print("キャッシュ読込:", response.usage.cache_read_input_tokens)
ステップ4:実行
bash
python ファイル名.py
⚠️ APIキーの注意点
APIキーは絶対にコードに直書きしないのがベストです。代わりに環境変数を使いましょう:
bash
# ターミナルで設定(Mac/Linux)
export ANTHROPIC_API_KEY="sk-ant-ここにキー"
python
import anthropic
import os
# 環境変数から自動で読み込んでくれる(api_key の指定不要)
client = anthropic.Anthropic()






コメント