Claude Codeのセッションを高速化しコストを抑える方法
長時間の Claude Code が遅く高くなる原因は、毎ターン全コンテキストを再送することです。/context で固定コストを確認し、不要な内容を削減してから、意図的にクリアとコンパクションを行います。
長時間の Claude Code セッションが遅くなり、コストも増える理由
長時間の Claude Code セッションが遅くなり、コストも増えるのは、各ターンでコンテキスト全体が再送され、そのコンテキストが増え続けるためです。対策は、決められた順序で整理することです。/contextを実行してウィンドウを圧迫している内容を確認し、リクエストごとに料金が発生する項目を削減します。その後、関係のないタスクの間では/clearを使用し、1つの長いタスクの途中では指示を含めて/compactを使用します。作業は連続して行ってください。プロンプトキャッシュが失われると、安価な読み取りでも、これまでの発言全体を完全に再送することになります。
メーターが動作する理由については、エージェントセッションの背後にあるトークンメーターで説明しています。
変更を加える前に /context を読む
ウィンドウに何が入るかを推測しないでください。Claude Code が通知します。
/context [all] は現在のコンテキスト使用量を色付きのグリッドで表示し、コンテキストを大量に使用するツールとメモリ肥大化に対する最適化の提案を示します。all は項目ごとの内訳を全画面表示で展開します。結果は5つのバケットとして読み取ります。
- システムプロンプト。 Claude Code 自身のハーネス指示です。セッション中は固定されています。
- ツール定義。 エージェントが呼び出せるすべてのツールのスキーマです。接続されているすべての MCP(Model Context Protocol)サーバーも含まれます。
- メモリファイル。 セッション開始時に読み込まれる
CLAUDE.mdと自動メモリです。 - ファイルとツール結果。 読み込んだすべてのファイルと、コマンドが出力したすべての内容です。
- メッセージ履歴。 あなたのターンと、それに対する応答です。
最初の3つは固定コストです。セッション中のすべてのリクエストで支払います。最後の2つは増加します。開始時に固定コストを1度削減し、その後は増加分を継続的に管理してください。
ウィンドウがいっぱいになったことは、次の2つの文字列で確認できます。
Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.最初はハードリミットです。これを超えるとリクエストは拒否され、対応する API(application programming interface)エラーは Prompt is too long です。2つ目はコンパクションウィンドウです。100万トークンモデルでは、実際のコンテキストウィンドウより小さい場合があります。これを超えてもリクエストは成功するため、拒否ではなく警告として扱います。
有料プランでは、/usage によってもう一方の側面も確認できます。長いコンテキストやキャッシュミスなどの動作を検出し、直近の使用量を個々のスキル、サブエージェント、MCP サーバーに割り当てます。使用可能量をすでに使い切ったと表示された場合、どの制限ウィンドウを待っているか によって、コンテキストの削減で今すぐ改善できるのか、それとも作業に戻るために別の方法が必要なのかが決まります。
CLAUDE.md は恒久的な負担になるため、簡潔に保つ
セッション開始時に CLAUDE.md がコンテキストへ読み込まれ、その後も保持されます。詳細なデプロイ手順を記載すると、テストファイルの誤字を修正している間も、そのトークンが存在し続けます。Anthropic は、必須事項だけを記載し、ファイルを 200 行未満に保つことを推奨しています。
手順は skills に移します。skill は呼び出したときだけ読み込まれるため、週に 2 回実行するワークフローでも、それ以外の日にはコストが発生しません。compaction 後も skill には専用の容量があり、各 skill は最大 5,000 トークン、合計で 25,000 トークンまで本文が再注入されます。古いものから削除されます。切り詰め時にはファイルの先頭が保持されるため、最も重要な指示を SKILL.md の先頭付近に置いてください。
compaction 後に残る内容によって、指示を配置する場所が決まります。
- system prompt と出力スタイルは、メッセージ履歴の一部ではないため変更されません。
- プロジェクトルートの
CLAUDE.md、スコープなしのルール、自動メモリは、ディスクから再注入されます。 paths:frontmatter を持つルールは、対応するファイルが再度読み込まれるまで失われます。- サブディレクトリ内のネストされた
CLAUDE.mdは、そのサブディレクトリ内のファイルが再度読み込まれるまで失われます。 - Hooks はコードとして実行され、コンテキストに入らないため影響を受けません。
そのため、依存するルールはプロジェクトルートの CLAUDE.md に置きます。Claude Code は古い tool の出力を先に削除してから要約するため、会話の序盤にある指示が失われることがあります。/memory でメモリを編集します。Claude Code はセッション開始時に読み込んだコピーを保持するため、セッション中に trim しても prompt cache は維持され、次回の /clear、/compact、または再起動まで反映されません。コンテキストの消失は、ルールが守られなくなる理由の 1 つにすぎません。そのため、ルールが明らかにウィンドウ内に残っているのに無視される場合は、書き換える前に 他の原因を順に確認してください。
タスク間では /clear、1 つのタスク内では /compact
この 2 つは同じように見えますが、コストは大きく異なります。
/clear [name] はコンテキストを空にして新しい会話を開始します。リクエストは送信しないため、コストはかかりません。名前を渡すと、直前の会話に名前を付けて /resume の選択画面で表示できます。/reset と /new はエイリアスです。無関係なタスクに切り替えたら、すぐに使用してください。そうしないと、古いタスクが新しいタスクの各メッセージで再送信され、再度課金されます。
/compact [instructions] は、同じ会話を継続しながらコンテキストを解放します。それまでの履歴を要約して置き換えます。継続性が必要な長いタスクの途中で使用してください。
/compact には必ず指示を指定してください。 指示のない /compact は、作業のどの部分がまだ必要かを把握していないデフォルトプロンプトで要約します。指示を付けると、次の内容を維持できます。
/compact focus on the auth bug fix
/compact keep only the plan and the diff毎回同じ理由で compact する場合は、プロジェクトの CLAUDE.md にある # Compact instructions 見出しの下に常用の指示を記載してください。新しいセッションで /compact を実行すると Not enough messages to compact. が表示されます。これは、まだ履歴がないという意味だけです。
ここでは、2 つのコストが混同されがちです。要約リクエストはプレフィックスを共有するため、履歴を再処理せず、既存のキャッシュを読み取ります。処理時間の大部分は要約の生成にかかります。大きなコンテキストの compact は、依然として大きなリクエストです。要約対象の会話自体が入力になるためです。compact の直後のターンが遅いわけではありません。より短いプロンプトのキャッシュを再構築するだけです。
より低コストのコマンドが 2 つあります。/rewind [description] は、チェックポイントまでコードと会話をロールバックします。完全に破棄するパスに対しては、compact より適しています。すでにキャッシュされているプレフィックスまで切り詰めるためです。/recap は、履歴を置き換えず、コマンド出力として要約を追加します。そのため、キャッシュ済みのプレフィックスが維持されます。
自動 compact が何度も実行されると、次の内容が表示されます。
Autocompact is thrashing: the context refilled to the limit...compact は成功しましたが、ファイルまたはツールの出力によってウィンドウが短時間に何度も埋められたため、Claude Code は再試行を停止しました。大きすぎるファイルを行範囲ごとに読み取る、出力を減らす focus を指定して /compact を実行する、その作業をサブエージェントに移す、または以前の会話が不要であれば /clear を実行して復旧します。
MCP サーバーは固定のオーバーヘッドです
接続する MCP サーバーはそれぞれ、セッション全体のすべてのリクエストに追加されます。実際に呼び出すかどうかに関係なく、コストが発生します。
Claude Code ではこの影響が緩和されます。MCP ツール定義はデフォルトで遅延読み込みされるため、Claude が特定のツールを使用するまで、コンテキストに入るのはツール名だけです。/context を実行すると、サーバーが実際に消費している量を確認できます。/mcp disable <name> を実行すると、今日は使用しないサーバーを削除できます。VPS 上で独自の MCP サーバーを運用する場合も、同じ計算上の制約により、1 台のサーバーが公開すべきツール数が決まります。
セッションの開始時に実行してください。定義が遅延されたままであれば、サーバーの接続や切断は会話に追加されるだけで、キャッシュは保持されます。一方、ツール検索が無効になっている場合や、遅延の対象外のサーバーで定義がプレフィックスに読み込まれる場合は、同じ変更によって次のリクエストですべてが再読み込みされます。
コンテキストに入る前に冗長なツール出力を絞り込む
ツールの結果は入力であり、その後のすべてのターンで再送信されます。20,000 tokens の出力をダンプするテスト実行は、1 回限りのコストではありません。ウィンドウから消えるまで、各ターンで再度コストが発生します。
出力元で絞り込みます。Claude が見る前にテスト実行の結果を失敗だけに縮約する hook を使えば、画面いっぱいの出力を、このターンと再送信されるすべてのターンで数百 tokens にできます。
npm test 2>&1 | grep -E "FAIL|Error:" | head -40hook 自体がコンテキストに入ることはありません。コードとして実行されるためです。出力が 1 画面を超えるツールには、すべてこの方法を使います。3,000 行のファイルにも同じ考え方を適用できます。必要な行範囲だけを要求してください。ファイル全体が到着すると、そのままウィンドウに残るためです。
エージェントが読み取る範囲を限定し、出力量の多い作業を委譲する
ファイル名と症状を指定したプロンプトは、そのファイルを読み取ります。プロジェクトの整理を求めるだけの曖昧な依頼では、エージェントが関連すると判断したファイルを読み取り、それらの読み取り結果がすべてコンテキストに残ります。
出力量の多い作業はサブエージェントに委譲します。テストの実行やログの処理はどちらも実際のコンテキストを消費します。サブエージェントを使うと、その出力をサブエージェント自身のコンテキストに保持し、要約だけを返せます。ただし、サブエージェントは独自のキャッシュを構築するため、最初の呼び出しではキャッシュヒットがありません。また、subscription でも5分間のキャッシュ有効期間が適用されます。委譲により、メインのコンテキストは確実に保護できます。ただし、合計トークン数が常に減るとは限りません。
キャッシュの時計: まとまった時間で作業する
プロンプトキャッシュによって、再送のコストを抑えられます。プレフィックスの読み取りは通常の入力料金の 0.1x で、書き込みは 1.25x です。1-hour lifetime で書き込む場合は 2x です。利用するたびに追加料金なしでエントリが更新されるため、時計は最後の利用時点から進みます。これらの倍率から料金の構造は分かりますが、金額までは分かりません。100 万トークンに実際にかかる料金と組み合わせると、コンテキストウィンドウ全体をドル単位の金額に換算できます。
利用できる lifetime は認証方法によって異なります。そのため、「キャッシュは 5 分後に期限切れになる」と一律に説明すると正確ではありません。
- Claude subscription では、Claude Code が one-hour lifetime を自動的に要求します。
- プランの上限を超えて usage credits を使うと、その利用分が課金されるため、5 分に戻ります。
- API key または cloud provider を使う場合は、5 分のままです。
ENABLE_PROMPT_CACHING_1H=1で one-hour lifetime を選択でき、FORCE_PROMPT_CACHING_5M=1で 5 分に戻せます。
どちらの場合も、作業は連続したまとまりとして行うのが基本です。lifetime を超えるアイドル時間があると、次のターンで蓄積したプレフィックス全体が再度書き込まれるためです。tmux 内の切り離した Claude Code セッションはアイドル中に料金がかかりません。アイドル時間によって失われるのは、キャッシュが温存される時間です。
作業中でも、次の操作によってキャッシュが破棄されます。モデルの切り替え、effort level の変更、fast mode の有効化、MCP server の接続または切断、plugin の有効化または無効化、ツール全体の拒否、compacting、Claude Code のアップグレードです。/model は特に見落としやすい点です。各モデルが個別のキャッシュを持つため、内容が同一でも次のリクエストではキャッシュヒットなしで履歴全体が読み込まれます。この再読み込みには移行先モデルの料金が適用されるため、セッション途中で Fable に切り替えると、蓄積した履歴全体にFable 5 の公開入力料金が適用されます。
ファイルの編集、CLAUDE.md の編集、skills と commands の実行、/recap の実行、巻き戻し、subagent の起動ではキャッシュは維持されます。キャッシュの範囲は 1 台のマシンと 1 つのディレクトリに限定されるため、異なるディレクトリにある 2 つのセッションは互いのキャッシュを利用できません。この範囲はアカウントではなく CLI に対応するため、Claude desktop app には引き継がれません。Linux では、Claude desktop app はCLI と併存する別個の beta installです。
キャッシュが機能しているかどうかは、current_usage を確認します。cache_creation_input_tokens は cache write rate で書き込まれ、cache_read_input_tokens は通常の入力料金のおよそ 10 分の 1 で提供されました。読み取り回数が作成回数を大きく上回っていれば正常です。ターンごとに作成回数が高いままなら、プレフィックス内の何かが継続的に変化しています。
より大きなコンテキストウィンドウで解決しますか?
部分的には解決します。現在の複数のモデルは 1 million token のコンテキストウィンドウに対応しており、大きな上限でもコンパクションの動作は変わりません。経済性は変わりません。各ターンでプロンプト全体が再送信され、引き続き課金されるためです。大きなウィンドウは、いつ対応を迫られるかを決めます。コストを決めるのは、コンテキストの整理です。問題が上限ではなく料金なら、作業方法に合う Claude のプランによって、ドルを支払うのかプランの利用枠を使うのかが決まります。
API におけるコンテキスト編集と圧縮は異なる機能です
Messages API で独自のエージェントを構築する場合、スラッシュコマンドは存在しないため、自分で実装する必要があります。この作業を最初から見積もってください。API には少額の登録クレジット以外に無料枠がないため、削除していない履歴はターンごとに全量が課金されます。どのプロバイダーを基盤にするかによって、トリミング前の時点でこの計算が決まります。選択肢が残っている場合は、表示上のトークン単価を比較するのではなく、同じワークロードのコストを両方の API で計算してください。サーバー側の機能でこの処理を行えますが、両者は同じ機能ではありません。
コンテキスト編集は、会話履歴の増加に応じて特定の内容を選択的に消去します。消去した各結果はプレースホルダーテキストに置き換えられるため、Claude は何が削除されたかを把握できます。これはベータ機能です。anthropic-beta: context-management-2025-06-27 を送信し、context_management.edits でストラテジーを設定します。clear_tool_uses_20250919 はツール結果を消去し、clear_thinking_20251015 は思考ブロックを管理します。trigger のデフォルト値は入力トークン 100,000 個、keep のデフォルト値は直近の 3 回のツール使用、clear_tool_inputs のデフォルト値は false です。そのため、入力は残り、結果だけが削除されます。
圧縮は要約を生成し、完全な会話履歴をその要約に置き換えます。これもベータ機能です。anthropic-beta: compact-2026-01-12 を送信し、編集タイプとして compact_20260112 を使用します。トリガーのデフォルト値は {"type": "input_tokens", "value": 150000} で、値は少なくとも 50,000 でなければなりません。
圧縮には、エージェントをひそかに停止させる引き継ぎルールがあります。レスポンスは要約を含む compaction コンテンツブロックで始まり、その後に通常のテキストブロックが続きます。後続のリクエストでは、このブロックを返送する必要があります。API はその後、それより前にあるすべてのコンテンツブロックを削除します。実際には、テキストだけでなく response.content 全体を追加してください。
Anthropic のドキュメントでは、長時間実行する会話でコンテキストを管理する主要な方法としてサーバー側の圧縮を挙げ、何を消去するかを細かく制御する方法としてコンテキスト編集を説明しています。まずモデルの対応状況を確認してください。現在の Opus、Sonnet、Fable モデルは圧縮に対応していますが、claude-haiku-4-5 は対応していません。圧縮のページに最新の対応モデル一覧があります。どちらのベータ機能も、Claude Code 自身の /compact を制御しません。Claude Code のドキュメントでは、これはクライアントが送信する 1 回限りの要約リクエストと説明されています。
FAQ
Claude Code のセッションは、長く実行するほど遅くなり、費用も増えるのはなぜですか?
毎ターン、会話全体が再送信されるためです。朝から開いたままのセッションでは、1 行の質問にもその日の会話全体が含まれます。プロンプトキャッシュが有効な間は、読み取り時の入力料金が基本料金の 0.1x になるため、このコストを抑えられます。キャッシュを利用できないターンでは、同じプレフィックスが 1.25x で再度書き込まれます。何がコンテキストウィンドウを占有しているかは /context で確認できます。仕組みについては、Claude Code セッションの課金対象を参照してください。
Claude Code の /clear と /compact の違いは何ですか?
/clear は、コンテキストが空の新しい会話を開始します。リクエストを送信しないため費用はかからず、関係のない作業へ移るときに適しています。/compact は同じ会話を維持し、履歴を要約に置き換えます。そのため、1 つの長い作業の途中で使うのに適しています。/compact keep only the plan and the diff のように対象を指定してください。指定した内容によって、要約に何を残すかが決まります。
Claude Code のコンテキストウィンドウを何が消費しているか確認するにはどうすればよいですか?
/context を実行してください。項目ごとの詳細を確認するには /context all を実行します。システムプロンプト、ツール定義、MCP サーバー、メモリーファイル、履歴を色付きのグリッドで表示し、コンテキストを大量に消費するツールやメモリーの肥大化に関する提案も示します。有料プランでは、/usage により、最近の使用量を個々のスキル、サブエージェント、MCP サーバーに割り当てて確認できます。
コンパクションの代わりに 1 million token のコンテキストウィンドウを使うべきですか?
大きなウィンドウは問題を解決するのではなく、先送りするだけです。現在の複数のモデルは 1 million token のコンテキストウィンドウに対応しており、その中には Opus 4.8 と Sonnet 5 も含まれます。そこでもコンパクションの動作は変わりません。毎ターン、完全なプロンプトが再送信され、その分の料金も発生します。そのため、400,000-token の会話は、収まるかどうかにかかわらず高額になります。
Claude API のコンテキスト編集とコンパクションの違いは何ですか?
コンテキスト編集は、古い内容、主にツールの結果を選択的に削除します。削除した各項目の位置にはプレースホルダーテキストを残すため、Claude は何が削除されたかを把握できます。コンパクションは要約を生成し、完全な履歴をその要約に置き換えます。Anthropic のドキュメントでは、長時間実行する会話にはコンパクションを主要な戦略として使用し、コンテキスト編集を細粒度の選択肢として位置付けています。どちらも固有のヘッダーを使用するベータ機能であり、Claude Code の /compact とは別の機能です。