← ミライズ労務コンサルティング開発知識シリーズ 目次(全6部)
第 5 部
hokama@mirise ~/miraise-crm $ /context

コンテキストとトークン

なぜ長いセッションは高くなるのか。
なぜ切り替えたほうが安いのか。そして、なぜ切りすぎても損なのか。
Claude Code の費用構造を、仕組みから追います。

この資料について
  • 数値と挙動は Anthropic の公式ドキュメントで確認したものだけを使っています
  • ただし価格と仕様は変わります。金額は比率を掴むためのものとして読んでください
  • 結論は第8章にあります。急ぐ場合はそこだけで用が足ります
$ /context

毎回、全部を送り直している

すべてはこの一点から始まります。

この章の要点
  • モデルはリクエスト間で何も記憶していない
  • だから毎ターン、コンテキスト全体を送り直している
  • コンテキストは置いてあるのではなく、毎回運んでいる

メッセージを送るたびに、Claude Code は新しい API リクエストを作ります。モデルはリクエストとリクエストの間で何も覚えていないため、システムプロンプト、プロジェクト文脈、これまでの全メッセージとツール結果、そして新しい発言を、毎回まとめて送り直しています

50回目の発言では、あなたが打った1行だけでなく、それまでの全部をもう一度運びます。素朴に計算すると、費用はターン数の二乗で効いてきます。

ターンその時点のコンテキスト
1回目10K
10回目46K
50回目206K

1ターンあたり4K増えるとすると、50ターンの累計処理量は約540万トークン。Opus 5 の入力単価5ドル/100万で計算すると約27ドルです。1セッションでこれは重い。

この構造をそのままにすると成立しないので、プロンプトキャッシュがそれを打ち消しています。以降はその仕組みの話です。

$ prefix match

3層構造とプレフィックス一致

キャッシュは「先頭からの一致」で働きます。

この章の要点
  • キャッシュは先頭からの完全一致で判定される
  • ファイル単位・区間単位のキャッシュは存在しない
  • 前方で1箇所変わると、それ以降がすべて無効になる
  • だから変わりにくいものが前、変わりやすいものが後ろに並べてある

API はリクエストの先頭部分(プレフィックス)を、最近処理した内容と照合します。通常のターンでは、プレフィックスは前回のリクエスト全体であり、新しいのは最後のやりとりだけです。

照合は完全一致です。プレフィックスのどこか1箇所が変われば、そこから後ろはすべて再計算されます。ファイルごと、区間ごとのキャッシュというものはありません。

1ターン目 2ターン目 3ターン目 4ターン目 全部やり直し キャッシュ読み出し(0.1倍) 新規処理(満額) 4ターン目でシステムプロンプトが変わったため、一致が崩れて全体が再処理される
2・3ターン目では、伸びていくグレーの部分が10分の1の価格で読まれています。これが効いている限り、長いセッションでも費用は膨らみません。

並び順

この仕組みを最大限使うため、Claude Code は変わりにくい内容が先に来るようリクエストを並べています。

システムプロンプト 中核の指示・ツール定義・出力スタイル 滅多に変わらない プロジェクト文脈 CLAUDE.md・auto memory・ルール セッション単位 会話 発言・応答・ツール結果 毎ターン
変化は下へしか波及しません。会話が増えても上2層は無傷ですが、システムプロンプトが変わると下は全部やり直しになります。
プロンプト本文に含まれない2つ

モデルeffort(思考量)は、プロンプトの文章ではありませんが、どちらもキャッシュキーの一部です。

モデルごとに別のキャッシュがあり、切り替えると内容が同一でもリクエスト全体が再計算されます。effort も同じモデル内で水準ごとに別のキャッシュを持ちます。

$ pricing

価格の構造と、キャッシュの逆転

キャッシュは、使い方を誤ると「使わないより高い」。

この章の要点
  • 読み出しは基本入力の0.1倍。書き込みは1.25倍(5分)または2倍(1時間)
  • 書き込みは素の入力(1.0倍)より高い
  • 毎ターン壊していると、キャッシュしないより高くつく
  • コストを決めるのは大きさではなく安定性
種別倍率Opus 5(100万トークンあたり)
基本入力1.0倍5.00ドル
5分キャッシュ書き込み1.25倍6.25ドル
1時間キャッシュ書き込み2.0倍10.00ドル
キャッシュ読み出し0.1倍0.50ドル
出力25.00ドル

逆転が起きる

ここが見落とされやすい点です。書き込みは素の入力より高い。読み出しに到達せず毎ターン書き直していると、1.25倍を払い続けることになります。

状態50ターンの概算
キャッシュなし27ドル
キャッシュが効いている2.7ドル
毎ターン壊れている34ドル

つまり「コンテキストが多いと高い」は半分だけ正しい。正確には ──

大きくても安定していれば0.1倍で済み、小さくても毎回壊れていれば1.25倍を払います。

サブスクリプションの場合

Claude サブスクリプションでは利用がプランに含まれるため、上の金額がそのまま請求されるわけではありません。

ただし使用量の上限には効きます。壊れたキャッシュは、そのぶん枠を余分に消費します。金額として現れなくても、構造は同じです。

$ cache miss

キャッシュを壊すもの

壊れると、次の1ターンが遅く高くなります。その後は新しいプレフィックスがキャッシュされます。

操作内容
/model でモデル切替モデルごとに別キャッシュ。内容が同一でも履歴全体が再計算される
opusplan 設定plan モードで Opus、実行時に Sonnet へ解決される。つまりplan モードの切替ごとにモデル切替が起きる
/effort 変更モデルと並ぶキャッシュキー。会話開始後は確認ダイアログが出る
fast mode の有効化リクエストヘッダがキャッシュキーに入る。費用は会話につき1回だけ。深くなってから入れるほど高い
MCP の接続・切断ツールがプレフィックスに載っている場合のみ。既定の遅延読み込みなら壊れない
プラグインの有効化MCP サーバーを提供するプラグインのみ。スキル・コマンド・フック等は壊さない
ツール名そのものの denyBash のような裸の名前、Bash(*)"*" のみ
Claude Code の更新再起動後の最初のターンが未キャッシュになる
最も高価になりうる操作

更新後に古いセッションを再開すること。履歴が別のシステムプロンプトの後ろに来るため、全履歴がキャッシュ不一致で再処理されます。

費用は再開する会話の長さに比例します。長い会話に戻る最初の1ターンが、そのセッションで送る中で最も高いリクエストになりえます。

MCP は既定では壊さない

ここは誤解されやすい点です。対応モデルでの既定である遅延読み込みでは、サーバーの接続・切断・ツール一覧の変更は末尾に追記されるだけで、キャッシュ済みの部分を乱しません。

壊れるのはツール定義がプレフィックスに載っている場合で、これは tool search が使えない環境(Google Cloud の Agent Platform、独自ゲートウェイ経由など)や、alwaysLoad を指定した場合に起きます。

その状態では、こちらが何もしなくても壊れることがあります。stdio サーバーのプロセスが終了した、HTTP セッションが期限切れになった、一時的な失敗から自動再接続した、といった場合です。

なお MCP の設定ファイルを編集しただけでは変わりません。新しい設定は再起動時に反映され、そのときに接続・切断が起きます。

$ cache hit

キャッシュを壊さないもの

実用上は、こちらの一覧のほうが役に立ちます。

操作挙動
リポジトリのファイル編集変更通知が末尾に追記されるだけ。過去の読み込み履歴は書き換わらない
CLAUDE.md の編集壊さない。ただし反映もされない
出力スタイルの変更同上。壊さないが、反映もされない
権限モードの切替安全。ただし opusplan 使用時の plan モードだけは例外
スキル・コマンドの呼び出し呼び出し地点にメッセージとして挿入される
/recap履歴を置き換えず、出力として追記する
/rewind過去のキャッシュに当たる
サブエージェント親のキャッシュは影響を受けない
/advisor定義がキャッシュ区切りより後ろにあるため無傷
「壊さないが反映もされない」の意味

CLAUDE.md と出力スタイルは、セッション開始時に一度読まれてメモリに保持されます。途中で編集してもキャッシュは壊れませんが、Claude は開始時に読み込んだ版のまま動き続けます

「CLAUDE.md を直したのに効かない」の正体はこれです。反映するには /clear/compact、または再起動が必要です。

ただし例外があります。サブディレクトリの入れ子 CLAUDE.md や paths: 指定のルールは、該当ファイルが読まれた時点で読み込まれるため、読み込まれる前の編集は反映されます

/compact は思ったより安い

圧縮は履歴を要約で置き換えるので、会話層のキャッシュは設計上無効になります。しかし要約を作るリクエスト自体は、あなたの会話と同じシステムプロンプト・ツール・履歴を使うため、プレフィックスを共有して既存のキャッシュを読みます

圧縮の時間のほとんどは要約の生成であって、キャッシュ不一致ではありません。直後のターンも、短くなった要約の分だけ作り直すだけなので、遅い部分ではありません。

/rewind という選択肢

進んだ方向を丸ごと捨てたい場合は、/compact ではなく /rewind です。

圧縮が新しいプレフィックスを作るのに対し、巻き戻しは既にキャッシュ済みのプレフィックスへ戻ります。残る履歴はその時点でキャッシュが作られた内容そのものだからです。しかも、それ以降の全ターンがそのプレフィックスを通して読んできたため、元のターンが TTL より前でもエントリは温かいままです。

$ ttl

寿命と範囲

「5分」という数字は、条件によって変わります。

この章の要点
  • TTL は使うたびにリセットされる。作業を続けている限り切れない
  • サブスクリプションなら自動的に1時間。5分ではない
  • キャッシュはマシンとディレクトリに紐づく。worktree は別扱い

TTL は誰が決めるか

認証方法TTL理由
Claude サブスクリプション1時間(自動)プランに含まれるため、長くしても追加費用がかからない
上限超過で追加クレジット使用中5分へ自動的に降格課金対象になるため
API キー・Bedrock 等5分(既定)トークン課金のため。ENABLE_PROMPT_CACHING_1H=1 で変更可
サブエージェント常に5分自動の1時間は主会話にのみ適用される

そして重要な点として、キャッシュに当たるたびにタイマーがリセットされます。「5分で切れる」のではなく「沈黙が5分続いたら切れる」です。作業を続けている限り、温かいまま保たれます。

席を立って戻ってきた最初の1ターンが目に見えて遅いのは、この期限切れが起きているためです。

キャッシュの範囲 ── worktree に注意

Claude Code のキャッシュは、実質的に1台のマシンと1つのディレクトリに紐づいています。システムプロンプトに作業ディレクトリ、プラットフォーム、シェル、OS バージョンが埋め込まれるためです。

したがって別ディレクトリの2セッションは別のプレフィックスを作り、互いのキャッシュに当たりません。同一リポジトリの worktree も、それぞれ別の作業ディレクトリなので含まれます。

逆に、同じディレクトリで並行して動かすセッションは互いのキャッシュを読みます。連続するセッションは、起動時の git 状態のスナップショットが一致する限りプレフィックスを共有します。

確認方法

応答のたびに2つの数値が返っています。

項目意味
cache_read_input_tokensキャッシュから供給されたトークン。標準入力の約10%で課金
cache_creation_input_tokensそのターンで書き込まれたトークン。書き込み価格で課金

読み出しと書き込みの比率が高ければ機能しています。書き込みが毎ターン高いままなら、プレフィックスの中で何かが変わり続けています。第4章の一覧が原因の候補です。

コンテキストの内訳そのものは /context で確認できます。カテゴリ別の内訳と、どの CLAUDE.md や auto memory が読み込まれたかまで出ます。

$ upside

コンテキストが多いことのメリット

ここまで費用の話をしてきましたが、逆側があります。しかも構造的に強い。

この章の要点
  • キャッシュ読み出しはレート制限に計上されない
  • 維持コストは取得コストの10分の1
  • 薄いコンテキストは、探索の往復として費用が戻ってくる
  • 精度が上がり、やり直しが減る

1. レート制限に計上されない

これが最大の利点です。キャッシュヒットはレート制限から差し引かれません。

つまり200Kの安定したコンテキストは、レート制限上ほぼ「無料で持ち歩ける」ということです。毎ターン200Kを運んでいても、枠を消費するのは新しく足された分だけ。上限に当たりやすくなるのはコンテキストが大きいときではなく、キャッシュが壊れているときです。

2. 維持コストは、取得コストの10分の1

行為30K トークンのファイル(Opus 5)
読み込む(満額の入力)0.15ドル
持ち続ける(キャッシュ読み出し)1ターンあたり0.015ドル

個別のファイル1つで見れば、分岐点は10ターンです。10ターン以内にまた必要になるなら、消さずに持っているほうが安い。

ただしこれはファイル単位の話であって、セッション全体では別の計算になります。第8章で扱います。

3. 薄いコンテキストは、探索として費用が戻ってくる

文脈が足りないと、Claude は探索から始めます。grep して、候補を読んで、違ったのでまた読んで。この探索の1回1回が満額の入力です。

必要なファイルが既に載っていれば、この往復が丸ごと消えます。節約したつもりのコンテキストが、探索コストとして戻ってくるという構図です。

4. 精度が上がり、やり直しが減る

トークンの話より、こちらが本質かもしれません。文脈が足りないモデルは推測します。推測が外れたときのコストは、間違った実装 + デバッグ + やり直しの合計であり、最初から数ファイル多く読ませるコストを容易に上回ります。

5. サブエージェントで両取りできる

サブエージェントは自分のコンテキスト窓で作業し、返ってくるのは最終結果だけです。6,100トークン読んでも、親には420トークンしか戻りません。

つまり「主コンテキストは安定させたまま、探索だけ外に出す」ができます。多いことと軽いことは両立可能です。

なお /rewind でセッションを分岐させる fork は、親のシステムプロンプト・ツール・履歴をそのまま受け継ぐため、最初のリクエストが親のキャッシュを読みます。

$ /clear

切るべきか、続けるべきか

この資料で最も実用的な部分です。

この章の要点
  • 持ち続けるコストは毎ターン発生し、切り直すコストは1回だけ
  • セッション全体で見ると、区切りで切るほうが安い
  • ただし作業の途中で切るのは損。探索をやり直すことになる
  • 軸は時間でもサイズでもなく、関連性が切れたかどうか

コストの形が違う

両者は同じ土俵にありません。

持ち続けるコストは毎ターン発生します。「ターン数 × 全体量 × 0.1倍」。切り直すコストは1回だけ発生します。「読み直す分 × 1.0倍」。

片方は繰り返し費用、もう片方は一時費用です。この違いが効きます。

60ターンのセッション ─ Opus 5 での概算 持ち続ける 3.00ドル 区切りで切る 1.73ドル キャッシュ読み出し(0.1倍) 読み直し(満額)
切ることで発生する金色の再読込より、持ち続けることで毎ターン積み上がるグレーのほうが大きくなります。
平均コンテキスト毎ターン再読込合計
持ち続ける100K0.05ドル3.00ドル
20ターンごとに切る50K0.025ドル3回 × 15K1.73ドル

前章で挙げた「10ターンで元が取れる」は個別のファイル1つを見た話であって、セッション全体では成り立ちません。持ち続ける費用は毎ターン積み上がるからです。

切り替えの固定費は、思ったより小さい

もう一点あります。同じディレクトリで git の状態が変わっていなければ、新しいセッションでもシステムプロンプト層とプロジェクト文脈層のキャッシュに当たります

つまりスレッドを切っても、CLAUDE.md も MCP もスキル定義も満額で払い直すわけではありません。新しく満額になるのは、次の作業で読み直すファイルだけです。

では、いつ持ち続けるのが正しいのか

条件は1つに絞られます。読み直す量が大きいときです。

深い探索の末にたどり着いた状態 ── 20ファイル読んで、grep を10回打って、ようやく原因が見えた ── これを捨てると、その探索を全部やり直すことになります。探索の1回1回は満額の入力です。

逆に、次の作業に必要なファイルが2〜3個なら、切ったほうが安い。

判断表
同じ作業を続けている別の作業に移る
持ち続ける正しい損。無関係な情報に毎ターン払い、精度も落ちる
切る損。探索をやり直すことになる正しい

軸は「頻繁に」でも「長く」でもなく、「関連性が切れたら」です。避けるべきなのは「同じ作業の途中で、サイズが気になって切る」という一点に絞られます。

作業が続いている以上、切った直後に同じファイルを読み直すことになりますし、探索の文脈が失われるので Claude は同じ試行錯誤を繰り返します。

品質の側も、切る方向を支持している

費用とは別に、3つあります。長いコンテキストでは個々の情報への注意が薄まること。自動圧縮まで放置すると、要約が余裕のない状態で作られるので質が落ちること。そして一度誤った前提が入ると履歴に残り続け、後の判断を汚すこと

3つ目が実務では大きいと思います。方向を間違えたセッションは、修正するより切ったほうが早い。ただしその場合は /clear より /rewind のほうが安く済みます。

状況使うもの
作業が終わり、別の対象に移る/clear
進んだ方向を捨てたい/rewind
続けるが、要点だけ残したい/compact(焦点を指定して)
$ checklist

実務チェックリスト

押す前に確認する項目です。

セッションの冒頭で決めておく

項目理由
モデルを決める途中の /model は履歴全体を再計算させる
effort を決める同上
fast mode を使うなら最初に入れる費用は会話につき1回。深くなってから入れるほど高い
CLAUDE.md を確認しておく途中の編集は反映されない

作業中

やること効果
大きな調査はサブエージェントへファイルの中身が主コンテキストに入らない
プロンプトで対象を具体的に指定読むファイルが減る。探索の往復が減る
長く席を離れる前に区切るTTL 切れの再構築を、意図した場所で起こす
/context で内訳を見る何が場所を取っているかが分かる

区切りで

状況操作
別の対象に移る/clear
方向を誤った/rewind
続けるが整理したい/compact 認証まわりの修正に絞って のように焦点を指定
まとめ

費用を決めているのは、コンテキストの大きさではありません。

安定しているか(プレフィックスが壊れていないか)と、関連しているか(今の作業に必要な内容か)の2つです。

大きくても安定していれば10分の1で運べます。小さくても壊れていれば1.25倍を払います。そして無関係な情報は、費用だけでなく精度も下げます。

5部を通して

第1部でシェルの原則、第2部で層の全体像、第3部で実例、第4部で Node と Next.js の内側、そして第5部で費用構造を見てきました。

通底しているのは同じ一点です。仕組みが分かっていれば、判断はその場で導ける。暗記する項目はほとんどありません。