SSD Nodes Learn Hosting plans →
ガイド Matt Connor著者 Matt Connor

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 がコンテキストへ読み込まれ、その状態が維持されます。詳細なデプロイ手順を記載すると、テストファイルの typo を修正している間も、そのトークンが存在し続けます。Anthropic は、必須事項だけを記載し、ファイルを 200 行未満に保つことを推奨しています。

手順は skills に移します。skill は呼び出したときだけ読み込まれるため、週に 2 回実行するワークフローでも、それ以外の日にはコストが発生しません。compaction 後は skill ごとに専用の予算があり、本文は再注入されます。上限は skill 1 つにつき 5,000 tokens、合計 25,000 tokens です。古いものから削除されます。切り詰め時にはファイルの先頭が残るため、SKILL.md の重要な指示は上部に置きます。

compaction 後に残るかどうかで、指示を置く場所が決まります。

  • system prompt と出力スタイルは、message history の一部ではないため変更されません。
  • プロジェクトルートの CLAUDE.md、スコープを指定していないルール、auto memory はディスクから再注入されます。
  • paths: の frontmatter を持つルールは、対応するファイルが再度読み込まれるまで失われます。
  • サブディレクトリ内のネストされた CLAUDE.md は、そのサブディレクトリ内のファイルが再度読み込まれるまで失われます。
  • hook はコードとして実行されるため、実行され続けます。ただし、hook が以前に追加したコンテキストは、会話の他の部分とともに要約されます。

依存するルールはプロジェクトルートの CLAUDE.md に置きます。Claude Code は古い tool output から先に消去してから要約するため、会話の序盤に提示した指示が失われる可能性があります。memory は /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. と表示されます。これは、会話のターン数が少なすぎて要約できないことを示します。コンテキストがいっぱいの場合でも、1 回の大きな貼り付けで埋まると発生することがあります。

ここでは 2 つのコストが混同されがちです。要約リクエストはプレフィックスを共有するため、履歴を再処理せずに既存のキャッシュを読み取ります。そのため、処理時間の大部分は要約の生成に費やされます。大きなコンテキストの compact には、依然として大きなリクエストが必要です。要約対象の会話自体が入力になるためです。compact の直後のターンが遅いわけではありません。より短いプロンプト用にキャッシュを再構築するだけです。

より低コストなコマンドが 2 つあります。/rewind はコードと会話をチェックポイントまでロールバックします。完全に破棄するパスに対しては、compact より適しています。すでにキャッシュされているプレフィックスまで切り詰めるためです。/recap は履歴を置き換えず、コマンド出力として要約を追加します。そのため、キャッシュされたプレフィックスは維持されます。

自動 compact が何度も実行されると、次のように表示されます。

Autocompact is thrashing: the context refilled to the limit...

compact は成功しましたが、ファイルまたはツールの出力によってウィンドウが短時間に何度も再び埋まったため、Claude Code は再試行を停止しました。大きすぎるファイルを行範囲に分けて読み取る、/compact を大きな出力を除外するフォーカスで実行する、その作業をサブエージェントに移す、または以前の会話が不要であれば /clear を使用して復旧します。

MCP サーバーは固定のオーバーヘッドです

接続する MCP サーバーは、それを呼び出すかどうかに関係なく、セッション全体のすべてのリクエストに追加されます。

Claude Code ではこの影響が緩和されます。MCP ツールの定義はデフォルトで遅延されるため、Claude が特定のツールを使用するまで、コンテキストに入るのはツール名だけです。/context を実行すると、サーバーが実際に消費している量を確認できます。/mcp disable <name> を実行すると、今日使用しないサーバーを切断できます。VPS 上で独自の MCP サーバーを運用している場合も、同じ計算により、1 台のサーバーが公開すべきツール数が制限されます。

これはセッションの開始時に実行してください。定義が遅延されたままであれば、サーバーの接続や切断は会話に追記されるだけで、キャッシュも維持されます。一方、ツール検索が無効、利用不可、または auto のしきい値未満であるために定義がプレフィックスへ読み込まれる場合は、同じ変更によって次のリクエストですべての定義が再読み込みされます。

コンテキストに入る前に冗長なツール出力を絞り込む

ツールの結果は入力であり、その後のすべてのターンで再送信されます。20,000 tokens の出力をダンプするテスト実行は、1 回限りのコストではありません。ウィンドウから消えるまで、各ターンで再度コストが発生します。

出力元で絞り込みます。Claude が見る前にテスト実行の結果を失敗だけに縮約する hook を使えば、画面いっぱいの出力を、このターンと再送信されるすべてのターンで数百 tokens にできます。

npm test 2>&1 | grep -E "FAIL|Error:" | head -40

hook 自体がコンテキストに入ることはありません。コードとして実行されるためです。出力が 1 画面を超えるツールには、すべてこの方法を使います。3,000 行のファイルにも同じ考え方を適用できます。必要な行範囲だけを要求してください。ファイル全体が到着すると、そのままウィンドウに残るためです。

エージェントが読み取る範囲を限定し、出力量の多い作業を委譲する

ファイル名と症状を指定したプロンプトは、そのファイルを読み取ります。プロジェクトの整理を求めるだけの曖昧な依頼では、エージェントが関連すると判断したファイルを読み取り、それらの読み取り結果がすべてコンテキストに残ります。

出力量の多い作業はサブエージェントに委譲します。テストの実行やログの処理はどちらも実際のコンテキストを消費します。サブエージェントを使うと、その出力をサブエージェント自身のコンテキストに保持し、要約だけを返せます。ただし、サブエージェントは独自のキャッシュを構築するため、最初の呼び出しではキャッシュヒットがありません。また、subscription でも5分間のキャッシュ有効期間が適用されます。委譲により、メインのコンテキストは確実に保護できます。ただし、合計トークン数が常に減るとは限りません。

キャッシュの有効期間: 連続した作業単位で進める

プロンプトキャッシュにより、再送のコストを抑えられます。プレフィックスの書き込みには、通常の入力料金の 1.25 倍がかかります。1 時間の有効期間を使う場合は 2 倍です。読み出しには、Haiku 5.5 で 0.1 倍、Opus 5.5 と Sonnet 5.5 で 0.05 倍(100 万トークンあたり $0.20 と $0.10)、Fable 5.1 で 0.025 倍(100 万トークンあたり $0.25)がかかります。使用するたびにエントリの有効期間が追加料金なしで更新されるため、時間は最後の使用時点から進みます。これらの倍率から料金の構成は分かりますが、総額までは分かりません。100 万トークンに実際にかかる料金と組み合わせると、コンテキストウィンドウ全体をドル単位の金額に換算できます。

利用できる有効期間は認証方法によって異なります。そのため、「キャッシュは 5 分後に期限切れになる」と一律に説明するのは正しくありません。

  • Claude のサブスクリプションでは、Claude Code が 1 時間の有効期間を自動的に要求します。
  • プランの上限を超えて使用クレジットを利用すると、その使用分が課金されるため、有効期間は 5 分に戻ります。
  • API key または cloud provider を使う場合、有効期間は 5 分です。promptCacheTtl を 1h または ENABLE_PROMPT_CACHING_1H=1 に設定すると、1 時間の有効期間を選択できます。FORCE_PROMPT_CACHING_5M=1 を設定すると、5 分に戻ります。

どちらの場合も、作業は連続した時間帯にまとめて行うのが基本です。有効期間を超えるアイドル時間があると、次のターンで、それまでに蓄積したプレフィックス全体を書き直すことになるためです。tmux で切り離した Claude Code セッションはアイドル中も料金がかかりません。アイドル時間によって失われるのは、キャッシュの有効状態です。

作業中でも、次の操作によってキャッシュが破棄されることがあります。モデルの切り替え、古いモデルでの effort level の変更、fast mode の有効化、MCP server の接続または切断、tool definitions の読み込み時にツール全体を拒否する操作、ツールを追加する plugin の有効化または無効化、compact、会話内の画像が多くなった後に古い画像を削除する操作、Claude Code のアップグレードです。API key またはサブスクリプションを使う Opus 5.5、Sonnet 5.5、Haiku 5.5、Fable 5.1 では、現在は effort level を変更してもキャッシュが維持されます。/model は特に見落としやすい点です。各モデルが独自のキャッシュを持つため、内容が同一でも、次のリクエストではキャッシュヒットなしで履歴全体を読み込みます。この再読み込みは移行先モデルの料金で新しいキャッシュ書き込みとして課金されます。そのため、セッション途中で Fable に切り替えると、蓄積した履歴全体に対して Fable が公開しているキャッシュ書き込み料金が適用されます。料金は 5 分の有効期間では 100 万トークンあたり $12.50、1 時間では $20 です。Fable 5 と Fable 5.1 で同じ料金です。

ファイルの編集、CLAUDE.md の編集、skills と commands の実行、/recap の実行、巻き戻し、subagent の起動ではキャッシュは維持されます。キャッシュの範囲は 1 台のマシンと 1 つのディレクトリに限定されます。そのため、異なるディレクトリにある 2 つのセッションは互いのキャッシュを利用できません。この範囲はアカウントではなく CLI に紐付いています。そのため、キャッシュは Claude desktop app には引き継がれません。Linux では、Claude desktop app は CLI と別にインストールする beta 版です。

キャッシュが機能しているか確認するには、current_usage を読み取ります。cache_creation_input_tokens はキャッシュ書き込み料金で書き込まれ、cache_read_input_tokens はモデルのキャッシュ読み出し料金で提供されます。読み出し料金は、モデルに応じて標準の入力料金の 2.5% から 10% です。読み出し回数と作成回数の比率が高ければ、正常に機能しています。ターンごとに作成料金が高いままであれば、プレフィックスのどこかが変化し続けています。

より大きなコンテキストウィンドウで解決しますか?

部分的には解決します。現在のすべてのモデル(Fable 5.1、Opus 5.5、Sonnet 5.5、Haiku 5.5)は 1 million token のコンテキストウィンドウで動作し、上限が大きくなってもコンパクションの動作は変わりません。完全なプロンプトは毎回再送信され、毎ターン課金されるため、料金体系は変わりません。より大きなウィンドウは、対応を迫られるタイミングを決めます。コストを決めるのは、コンテキストの整理です。問題が上限ではなく料金である場合は、作業方法に合う Claude のプランによって、ドルを支払うのかプランの利用枠を使うのかが決まります。

API におけるコンテキスト編集とコンパクションは別の機能です

Messages API で独自のエージェントを構築する場合、スラッシュコマンドは存在しないため、自分で実装する必要があります。この作業を最初から見積もってください。API の無料枠ではトークン料金を賄えないためです。新規ユーザーには、API のテスト用に少額の無料クレジットが付与されます。また、Anthropic が料金ページで示している組織あたり 1 日 50 時間、ドキュメントで示している月 1,550 時間の無料枠は、トークンとは別に課金されるコード実行コンテナの実行時間を対象とします。各ターンでは、削除されていない履歴全体が再送信され、その全量が課金されます。プレフィックスがキャッシュされている間はキャッシュ読み取り料金が適用され、キャッシュされていない場合は入力料金の全額またはキャッシュ書き込みの割増料金が適用されます。どのプロバイダーを選ぶかによって、トリミング前のこの計算が決まります。まだ選択前であれば、見出し上のトークン単価を比較するのではなく、同じワークロードを両方の API で計算してください。この用途に使えるサーバー側の機能は 2 つありますが、同じ機能ではありません。

コンテキスト編集は、会話履歴が増えるにつれて特定の内容を選択的に削除します。削除した結果はプレースホルダーテキストに置き換えられるため、Claude は何かが削除されたことを把握できます。これは beta 機能です。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 です。そのため、入力は残り、結果だけが削除されます。

コンパクションは要約を生成し、完全な会話履歴をその要約に置き換えます。beta 機能は 2 種類あります。しきい値コンパクションは通常のリクエスト内で実行されます。anthropic-beta: compact-2026-01-12 を送信し、編集タイプとして compact_20260112 を使用します。トリガーの既定値は {"type": "input_tokens", "value": 150000} で、値は少なくとも 50,000 でなければなりません。オンデマンドコンパクションでは、コード側で実行タイミングを決められます。トップレベルの "compaction": {"type": "summarize"} とともに anthropic-beta: compact-2026-09-04 を送信すると、レスポンスは要約ブロックだけになります。Anthropic のコンパクション概要では、利用可能な場合はオンデマンドコンパクションを使用するよう説明されています。

しきい値コンパクションには、エージェントを気付かないうちに壊す引き継ぎ規則があります。レスポンスは要約を格納した compaction コンテンツブロックで始まり、その後に通常のテキストブロックが続きます。このブロックを後続のリクエストに渡す必要があります。API はその後、このブロックより前にあるすべてのコンテンツブロックを削除します。実際には、テキストだけでなく response.content 全体を追加してください。オンデマンドコンパクションは逆に動作します。要約対象のメッセージを自分で削除し、返されたブロックを messages の先頭に置いて、署名も含めて返却時のまま送信します。

Anthropic のドキュメントでは、サーバー側コンパクションを長時間実行する会話のコンテキスト管理における主要な戦略とし、コンテキスト編集を削除対象を細かく制御するための選択肢と説明しています。まずモデルの対応状況を確認してください。現在のすべてのモデルは両方の種類のコンパクションに対応しており、Haiku 5.5 も含まれます。古い claude-haiku-4-5 は対応していません。また、各コンパクションのページには最新の対応モデル一覧が掲載されています。これらの beta 機能はいずれも Claude Code 独自の /compact を動作させません。Claude Code のドキュメントでは、これはクライアントが履歴とともに送信する別個の要約リクエストと説明されています。

FAQ

Claude Code のセッションは、長く実行するほど遅くなり、費用も増えるのはなぜですか?

毎回のターンで会話全体が再送信されるためです。1 日中開いていたセッションで 1 行の質問をしても、その日の会話全体が含まれます。Prompt caching が有効でキャッシュが温存されている間は、このコストを抑えられます。Haiku 5.5 では基本入力料金の 0.1x、Opus 5.5 と Sonnet 5.5 では 0.05x、Fable 5.1 では 0.025x で読み取れます。ターンでキャッシュミスが発生すると、同じプレフィックスが 1.25x で再書き込みされます。1-hour lifetime の場合は 2x です。何がコンテキストウィンドウを占有しているかは /context で確認できます。仕組みについては、Claude Code セッションの課金対象を参照してください。

Claude Code の /clear と /compact の違いは何ですか?

/clear は、空のコンテキストで新しい会話を開始します。リクエストを送信しないため、費用はかかりません。関連しないタスクの間で使うのが適切です。/compact は同じ会話を維持し、履歴を要約に置き換えます。1 つの長いタスクの途中で使うのが適切です。/compact keep only the plan and the diff のように、要約の焦点を指定してください。指定した内容によって、何が残るかが決まります。

Claude Code のコンテキストウィンドウを何が消費しているか確認するにはどうすればよいですか?

/context を実行します。項目ごとの詳細をすべて確認するには /context all を実行します。システムプロンプト、ツール定義、MCP servers、memory files、履歴を色付きのグリッドで表示します。コンテキストを多く消費するツールや、memory の肥大化に関する提案も表示されます。有料プランでは、/usage により、直近の使用量を個々の skills、subagents、MCP servers に割り当てて確認できます。

compacting ではなく、1 million token のコンテキストウィンドウを使うべきですか?

大きなウィンドウでは問題の発生を遅らせるだけで、解決にはなりません。現在のすべてのモデル(Fable 5.1、Opus 5.5、Sonnet 5.5、Haiku 5.5)は 1 million token のコンテキストウィンドウで動作し、compaction の動作も同じです。毎回のターンでプロンプト全体が再送信され、その分が課金されます。そのため、400,000-token の会話は、収まるかどうかに関係なく高額になります。

Claude API の context editing と compaction の違いは何ですか?

context editing は古いコンテンツを選択的に削除します。主にツールの結果が対象で、各結果が削除されたことを Claude が認識できるよう、削除箇所にはプレースホルダーテキストを残します。compaction は要約を生成し、完全な履歴をその要約に置き換えます。Anthropic のドキュメントでは、長時間実行する会話には compaction を主要な戦略として推奨し、context editing をきめ細かな制御に適した選択肢として位置付けています。どちらも固有のヘッダーを使用する beta 機能です。また、どちらも Claude Code の /compact とは別の機能です。