カテゴリー / 利用制限・トークン

Claude Codeのコンテキストウィンドウ|圧縮で残る点と消える点

この記事の目次

Claude Codeのコンテキストウィンドウは、Claudeが1つの会話単位で同時に扱える情報の枠です。上限に近づくとClaude Codeは会話を要約して空きを作る(自動圧縮)ので、枠が満杯になってもセッションは終了しません。ただし要約で残るものと消えるものには決まりがあり、プロジェクト直下のCLAUDE.mdはディスクから読み直される一方、paths: 付きのルールやサブディレクトリのCLAUDE.mdはメッセージ履歴の中で会話と一緒に要約されます(対応ファイルを再び触れば読み直されます)。長い会話で指示が効かなくなったと感じたときは、この読み込み範囲の差が関わっていることがあります。以下、何が枠を使い、どう確認し、圧縮で何が残り、エラー時にどこを見るかを公式ドキュメントの記述に沿って説明します。

Claude Codeのコンテキストウィンドウはどれくらいの大きさなのか?

コンテキストウィンドウの大きさはモデルで決まります。公式のモデル設定ページによると、1Mトークンのウィンドウに対応するのは次のモデルです。

モデル 1Mウィンドウの扱い
Fable 5.1 / Fable 5、Sonnet 5以降、Haiku 5.5、Opus 4.7以降 既定で1M。[1m] の指定は不要
Opus 4.6 / Sonnet 4.6 [1m] 版を選んだときだけ1M。利用可否はプランによる

Opus 4.6とSonnet 4.6の [1m] 版は、公式の表で次のように分かれています。

プラン Opus 4.6(1M) Sonnet 4.6(1M)
Max、Team、Enterprise サブスクリプションに含まれる usage credits が必要
Pro usage credits が必要 usage credits が必要
API・従量課金 利用可 利用可

[1m] 版はモデル名かエイリアスの後ろに付けて選びます。

/model claude-opus-4-6[1m]
/model opus[1m]

1Mが既定のモデルを200Kに抑えたい場合は、シェルか設定ファイルで CLAUDE_CODE_DISABLE_1M_CONTEXT=1 を設定します。モデル選びの判断そのものはClaude Codeのモデルの違いで扱っています。

何も入力していない時点で、すでに何が枠を使っているのか?

公式の「Explore the context window」ページによると、最初のプロンプトを打つ前にCLAUDE.md、auto memory、MCPのツール名、スキルの説明文が読み込まれます(CLAUDE.mdの代わりにAGENTS.mdが読まれる構成もあります)。出力スタイルや --append-system-prompt を使っていれば、その分も加わります。作業が始まると、読んだファイルの内容、対応ファイルを触ったときに読み込まれる paths: 付きのルール、やり取りやツール出力の内容が積み上がります。

起動時に入るものの目安も公式にあります。

  • CLAUDE.md: 1ファイル200行未満が目安。長いほど枠を使い、指示も守られにくくなります。@path のインポートは整理には役立ちますが、読み込む量は減りません。
  • auto memory: MEMORY.md の先頭200行か25KBの、どちらか少ない方が毎回読み込まれます。
  • MCP: ツール定義は既定で遅延読み込みで、最初に入るのはツール名とサーバーの指示だけです。

書き方の詳細はCLAUDE.mdの書き方とClaude Code MCPの仕組みと設定手順にまとめてあります。

いま何がどれだけ使われているかは、どう確認するのか?

/context を実行します。

/context

公式の説明では、使用状況を色付きのグリッドで表示し、枠の使用量が多いツールやメモリの肥大化について最適化の提案を出します。カテゴリ別の内訳に加えて、どのCLAUDE.mdとauto memoryのファイルが読み込まれたかもわかります。フルスクリーン表示では項目別の内訳が折りたたまれるので、すべて見たいときは /context all を使います。読み込まれたファイルを直すときは /memory です。

コンテキストウィンドウの使用率を常に見たい場合は、ユーザー設定(~/.claude/settings.json)などに statusLine を追加してステータスラインに出せます。公式の例は次の設定です。

{
  "statusLine": {
    "type": "command",
    "command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"
  }
}

context_window.used_percentage はセッション序盤に null になることがあると公式に書かれています。ステータスラインには5時間や7日の利用上限の使用率も出せますが、これは会話の枠とは別物です。利用上限の見方はClaude Codeの残りトークンの確認方法で説明しています。

上限に近づくと何が起きるのか?自動圧縮はいつ動くのか?

公式によると、上限に近づくとClaude Codeが自動で圧縮するため、枠が埋まってもセッションは終わりません。自動圧縮は /compact と同じ仕組みで、会話履歴を構造化された要約に置き換えます。

発動点を自分で設定していない場合の既定は次のとおりです。

条件 自動圧縮が動く位置
1Mが既定のモデル(Fable、Sonnet 5以降、Haiku 5.5、Opus 4.7以降) 枠が埋まる前の約967Kトークン
拡張コンテキストなしのSonnet 4.6 / Opus 4.6 200Kの境界
CLAUDE_CODE_DISABLE_1M_CONTEXT=1 を設定した1Mモデル 200Kの境界
上記以外 会話がモデルの上限に達したとき

LLMゲートウェイの別名など、Claude Codeが認識できないモデルIDでは、枠を200Kトークンと仮定して起動時に警告が出ます。Claude Codeより新しいモデルが原因なら、公式は claude update を最初の対処に挙げています。

claude update

圧縮のあと、何が残って何が消えるのか?

公式ドキュメントには、読み込みの仕組みごとに圧縮後の扱いをまとめた表があります。内容を日本語に整理すると次のとおりです。

仕組み 圧縮後の扱い
システムプロンプト、出力スタイル そのまま適用される
プロジェクト直下のCLAUDE.md、paths: なしのルール ディスクから再注入される
auto memory ディスクから再注入される
プランモードでClaudeが書いたプラン ディスクから再注入される
paths: 付きのルール、サブディレクトリのCLAUDE.md 必要になったときに再読み込みされる
Claudeが読んだ・編集したファイル 最近変更されたものから最大5つを読み直す
呼び出したスキルの本文 1スキル5,000トークン、合計25,000トークンまで再注入。古いものから落ちる
バックグラウンドのコマンドとサブエージェント 動き続ける。重複起動しないよう、実行中であることがClaudeに伝えられる
フックが以前に追加した文脈 会話と一緒に要約される
compact ソースに一致する SessionStart フック 実行され、出力が圧縮後の文脈に加わる

実務で効いてくるのは次の3点です。

  • paths: 付きのルールとサブディレクトリのCLAUDE.mdは、メッセージ履歴の一部として要約で消える。対応ファイルを再び触れば読み直されますが、圧縮をまたいで効かせたいなら、公式の説明どおり paths: を外すかプロジェクト直下のCLAUDE.mdへ移します。
  • 読み直されるファイルは最大5つで、5,000トークンを超えるファイルはパスだけが戻る。表示は Read ではなく Referenced file になるので、大きなファイルが前提なら圧縮後に読み直させます。
  • スキル本文は上限を超えると切り詰められ、先頭が残る。公式も、重要な指示は SKILL.md の上の方に書くよう勧めています。

もう1つ、プロジェクト直下とユーザー単位のCLAUDE.mdはセッション開始時に1回だけ読み込まれます。途中で書き換えてもそのセッションには反映されず、次の /clear、/compact、再起動で読み込まれます。

/compact・/clear・/rewind はどう使い分けるのか?

コマンド 何をするか 向いている場面
/compact [instructions] 会話を要約して空きを作る。重視する点を指示できる 同じ作業の区切りで軽くしたいとき
/clear 空のコンテキストで新しい会話を始める(別名 /reset、/new)。前の会話には /resume で戻れる 関係のない作業に移るとき
/rewind 会話やコードを以前の時点へ戻す。選んだメッセージから要約することもできる 行き詰まった流れを捨てたいとき

/compact に残したい内容を指示すると、自動処理の推測ではなく自分の選んだ内容で要約されます。公式の例です。

/compact focus on the auth bug fix

毎回同じ点を重視させたいなら、プロジェクト直下のCLAUDE.mdに書いておく方法も公式に紹介されています。

# Compact instructions

When you are using compact, please focus on test output and code changes

実行のタイミングについて、プロンプトキャッシュのページは、作業の途中で自動圧縮が動くのを待たず、タスクの合間に自分から /compact するよう勧めています。進んだ方向そのものを捨てたいときは、圧縮より /rewind で前のターンに戻る方が適しています。

自動圧縮のタイミングは自分で変えられるのか?

変えられます。公式はこの値を「auto-compact window」と呼び、圧縮までに枠をどこまで埋めてよいかを表します。設定場所は4つあります。

設定する場所 効く範囲
/autocompact 500k 現在のモデル。このセッションと以降(ユーザー設定の modelSettings に保存)
設定ファイルの autoCompactWindow すべてのモデル
起動時の --autocompact その起動1回だけ。保存済みの設定は変えない
環境変数 CLAUDE_CODE_AUTO_COMPACT_WINDOW 設定されている間は上の3つより優先
/autocompact 500k
/autocompact auto

/autocompact auto でモデルごとの既定に戻り、引数なしなら現在の値のダイアログが開きます(v2.1.221以降が必要)。指定できるのは100Kから1Mトークンで、200000、500k、1M、千単位の 200 などの形が使えます。環境変数は数値だけを受け付け、どの方法でもモデルの枠を超える値にはなりません。

全モデル共通にする場合の公式の例は、~/.claude/settings.json に次のように書く形です。

{
  "autoCompactWindow": 200000
}

200Kを超えるリクエストを拒否するLLMゲートウェイを経由しているなら、公式はClaude Codeを起動する環境で CLAUDE_CODE_AUTO_COMPACT_WINDOW=200000 を設定するよう案内しています。設定ファイルの優先順位はClaude Codeのsettings.jsonで扱っています。

「Context limit reached」や圧縮のスラッシングが出たら、どこを見ればいいのか?

「Context limit reached」が出たとき

公式のエラー一覧によると、Prompt is too long は会話と添付ファイルの合計がモデルの枠を超えた状態で、対話中は次の1行で表示されます。

Context limit reached · /compact or /clear to continue

コンテキストウィンドウのエラーに対して公式が挙げる対処は次のとおりです。

  1. /compact で要約するか、/clear で新しく始める
  2. /compact が Not enough messages to compact. を返したら、会話が1往復しかなく要約できる過去がありません。/clear して、貼り付けを減らすか添付を小さくして送り直します
  3. /context で、システムプロンプト、ツール、メモリファイル、メッセージのどれが多いかを見る
  4. 使っていないMCPサーバーを /mcp disable <name> で無効にする
  5. 大きなCLAUDE.mdを削るか、関係するときだけ読み込まれる paths: 付きルールへ移す(ただし前述のとおり、paths: 付きルールは圧縮で要約される側に入ります)
  6. 自動圧縮を /config や DISABLE_AUTO_COMPACT でオフにしていたら、オンに戻す

1Mのはずのモデルで200K付近で出る場合は、前述のモデルIDを認識できない状態が原因の1つとされています。

「Autocompact is thrashing」が出たとき

Autocompact is thrashing: the context refilled to the limit... は、圧縮は成功したのにファイルやツールの出力ですぐ枠が埋まり直すことが続いた状態で、Claude Codeは再試行を止めます。公式の回復手順は次のとおりです。

  1. 大きなファイルを、小さな単位に分けて読むよう頼む
  2. 大きな出力を捨てる指示付きで /compact する(公式の例: /compact keep only the plan and the diff)
  3. 大きなファイルの作業をサブエージェントに移す
  4. それまでの会話が不要なら /clear する

/clear 後も再発したら、/context の Messages 行とその上の行を比べます。Messages が最大なら新しい会話の出力が枠を埋めているので1から3をやり直し、上の行の合計が大きければ起動時に読み込まれる分を減らします。

5時間や週ごとの利用上限で止まる症状は、会話の枠とは別の制限です。見分け方はClaude Codeのトークン上限とはを参照してください。

コンテキストを圧迫しにくい構成にするには何を変えればいいのか?

公式ドキュメントが勧める設定と運用に絞ると、次の5つです。

  • CLAUDE.mdは200行未満に収める: PRレビューやマイグレーションのような特定作業の手順は、呼び出したときだけ読み込まれるスキルへ移します。
  • 圧縮後も守らせたいルールに paths: を付けない: 付けると要約で消える側に入ります。
  • スキルの重要な指示は SKILL.md の冒頭に書く: 切り詰められても先頭は残ります。
  • 使っていないMCPサーバーは /mcp で無効にする: gh のようなCLIツールが使えるなら、そちらの方が枠の効率が良いと公式は書いています。
  • 大量に読む調査はサブエージェントに任せる: サブエージェントは新しい独立した枠で動き、親には要約と少量のメタデータが戻ります。

ただし、サブエージェントも自分のリクエストを送り、それはメインの会話と同じ利用上限にカウントされます。また、forkは新しい枠で始める代わりに親の会話を引き継ぎます。設計はClaude Codeのサブエージェントとは、利用量を抑える工夫はClaude Codeのトークン節約にまとめています。

この記事のモデル名、しきい値、コマンドは、2026年10月18日に取得した公式ドキュメント(code.claude.com)の記述に基づいています。新しいモデルIDを認識できない警告が出るときは claude update で更新し、いまの使用量は /context で確認してください。

最初に試すなら何からか?

まず /context を実行し、メッセージ以外の行がどれだけ枠を使っているかを見てください。次に、圧縮をまたいで効かせたいルールが直下のCLAUDE.mdにあるのか paths: 付きのルールにあるのかを確かめてください。後者なら、圧縮後は対応ファイルを触るまで読み込まれていない可能性があります。

CLAUDE.mdやサブエージェントを含めた運用の型を自分のプロジェクトで身につけたい場合は、月額1,980円から参加できる学習コミュニティ「AI駆動ラボ」(lab.no-wave.jp)で扱っています。