【Claude Code 連載 第13回】コンテキストウィンドウ——何が入り、何が消えるか

スポンサーリンク
【Claude Code 連載 第13回】コンテキストウィンドウ——何が入り、何が消えるか 用語解説
【Claude Code 連載 第13回】コンテキストウィンドウ——何が入り、何が消えるか
この記事は約7分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

スポンサーリンク

背景

この連載では、Claude Codeの公式ドキュメントを1ページずつ読み解いていきます。公式ドキュメントは情報が網羅されている分、「結局どの機能を、どんな場面で使えばいいのか」は自分で考える必要があり、読むのに意外と時間がかかります。そこで、私が実務で使うために読み込んだ内容を「使う場面→実例コード」の順に整理して残していくことにしました。専門家の解説というより、一次情報を読んだ記録です。推測や動作を確認していない部分には、その都度そう書きます。

1. これは一言でいうと何か

コンテキストウィンドウには、そのセッションについて Claude が知っていることがすべて入ります。あなたの指示、読み込まれたファイル、Claude 自身の応答、そしてターミナルに表示されないコンテンツも含めてです。

このページの主役はインタラクティブなタイムラインで、起動からコンパクション(圧縮)までの1セッションを再生し、何が読み込まれ、ファイル読み込み・ルール・フックがそれぞれ何を積み増し、サブエージェントがどう大きな読み込みを外に出すかを見せます。連載でここまで扱ってきた機能が、トークンという単一の物差しの上に並ぶ回だと考えてください。

2. どういう場面で役立つか

  • 応答が鈍い・指示を忘れられていると感じたとき:何が枠を埋めているのかを構造で理解できます。自分のセッションの実数は /context で確認できます。
  • 設定を増やすか迷ったとき:スキルの説明文、MCP のツール名、CLAUDE.md はすべて入力する前からコンテキストに載っています。追加のコストが見積もれます。
  • 長いタスクに入る前/compact を指示付きで打つべきか、/clear すべきか、サブエージェントに逃がすべきかを判断できます。
  • 圧縮後に挙動が変わったとき:何が再注入され何が失われるかを知っていれば、原因の当たりがつきます(後述の表)。

あまり気にしなくてよいこと。 コンテキストが満杯になってセッションが落ちる心配は不要です。Claude Code は上限に近づくと自動でコンパクションを実行します。 手動の /compact は「自動に任せる前に、自分で内容を選ぶ」ための手段であって、破綻を防ぐための必須操作ではありません。

3. 何が入り、圧縮で何が残るか(元ページにコード例はありません)

入力する前に、もう積まれているもの

タイムラインが最初に示すのはここです。あなたが1文字も打つ前に、システムプロンプト、自動メモリ(MEMORY.md)、環境情報、MCP のツール名、スキルの説明、グローバルの ~/.claude/CLAUDE.md、プロジェクトの CLAUDE.md が読み込まれています。出力スタイルや --append-system-prompt のテキストも、システムプロンプトと同じ経路でここに乗ります。

重要な非対称が2つあります。MCP はツール名だけが載り、完全なスキーマは既定で遅延されます(必要になった時点でツール検索が取りに行く)。スキルも説明文だけが載り、本体は実際に使われたときだけ入ります。しかも disable-model-invocation: true を付けたスキルはこの一覧にすら載りません/name で呼ぶまでコンテキスト消費はゼロです。副作用のあるワークフロー(コミット、デプロイ、送信)にこの指定が推奨される理由が、ここでも効いてきます。

作業中に積み上がるもの

支配的なのはファイル読み込みです。1ファイルで数千トークン規模になり得ます。だからプロンプトを具体的に書いて(「auth.ts のバグを直して」のように)読むファイルを減らす、調査が重いならサブエージェントに投げる、という対処が効きます。

あわせて、paths: を持つルールは一致するファイルが読まれた瞬間に自動で載ります。フックも発火しますが、Claude のコンテキストに入るのは hookSpecificOutput.additionalContext で返した内容だけです。終了コード0の素の標準出力はデバッグログに行くだけで、コンテキストには入りません。

サブエージェントの効き方も、ここで数字として見えます。タイムラインの例では、サブエージェント側が6,100トークン分のファイルを読んで、メイン会話に返ってきたのは420トークンの要約だけです(数値は例示)。

コンパクション後に残るもの

長いセッションが圧縮されるとき、何が生き残るかは「どう読み込まれたか」で決まります

メカニズムコンパクション後
システムプロンプトと出力スタイル変更なし(メッセージ履歴の一部ではない)
プロジェクトルート CLAUDE.md、スコープなしルールディスクから再注入
自動メモリディスクから再注入
paths: を持つルール一致ファイルが再度読まれるまで失われる
サブディレクトリのネストされた CLAUDE.mdそのディレクトリのファイルが再度読まれるまで失われる
呼び出されたスキル本体再注入(1スキル5,000・合計25,000トークンで打ち切り、古い順に落ちる)
フック該当なし(コードとして実行されるものでコンテキストではない)

読み方はこうです。起動時にディスクから読み込まれるものは戻ってくる。会話履歴に混ざって入ったものは要約される。 paths: ルールとネストされた CLAUDE.md が消えるのは、トリガーファイルと一緒にメッセージ履歴へ入る仕組みだからです。圧縮を越えて必ず効かせたいルールなら、paths: を外すかプロジェクトルートの CLAUDE.md に移します。

スキルにも注意点があります。再注入時にキャップへ収めるためトリミングされ、保持されるのはファイルの先頭です。だから SKILL.md の上部に最重要の指示を置くべき、という設計上の帰結になります。

なお、スキルの説明一覧だけは再注入されません。起動時コンテンツの中で唯一の例外で、圧縮後に残るのは実際に呼び出したスキルだけです。

4. まとめと次回予告

  • コンテキストには、ターミナルに映らないものも含めて全部入る。埋めている主役はファイル読み込みです。
  • 入力前の時点で CLAUDE.md・メモリ・MCP のツール名・スキルの説明が既に載っています。
  • 圧縮を越えるのは「ディスクから読み直せるもの」。paths: ルールとネストされた CLAUDE.md は消えます。

満杯になる前に打てる手は3つと整理されています。ひとつは焦点を絞った圧縮で、/compact focus on the auth bug fix のように指示を添えて実行すると、自動パスが推測する内容ではなく自分が選んだものが残ります。長い新規タスクに入る前に効きます。ふたつめは /clear で、無関係な作業に切り替えるときに使います。古い会話は次に必要なファイルを圧迫し、毎メッセージでトークンを消費し続けるためです。みっつめが調査のサブエージェント委譲です。

会話を小さくするのではなく枠そのものを広げたい場合、Fable 5・Sonnet 5・Opus 4.6 以降・Sonnet 4.6 が100万トークンのコンテキストウィンドウをサポートしています(Sonnet 5 は [1m] バリアントを選ばずとも1Mで動作)。コンパクションの挙動は大きな上限でも同じです。

最後に実測の手段を。/context でカテゴリ別の内訳と最適化の提案が得られ、/memory で起動時にどの CLAUDE.md と自動メモリが読み込まれたかを確認できます。記事中の数値は元ページ同様あくまで例示なので、判断は自分のセッションの実数で行ってください。

次回予告:連載の締めくくりとして「ベストプラクティス」を取り上げる予定です。

関連ページ(本記事で触れた概念の詳細):CLAUDE.md 階層と自動メモリ、paths: ルール →「メモリ」、機能の使い分け →「Claude Code を拡張する」、調査の委譲 →「サブエージェント」、additionalContext →「Hooks」、ツール検索 →「MCP」、disable-model-invocation →「Skills」、100万トークン →「モデル設定」、トークン削減の戦略 →「コスト」。


本記事は執筆時点の公式ドキュメント(コンテキストウィンドウを探索する)に基づきます。最新は公式ドキュメントをご確認ください。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました