Chapter 4

第4章: コンテキストウィンドウ ─ 有限な「机」の上で考える

Claude Code を 1 時間ほど触った人なら、誰でも一度は見たことがあるはずだ。

Context left: 32% /compact をおすすめします Conversation is getting long...

ChatGPT を使っていたときには気にしなかった「context が減る」という現象。 なぜエージェントの世界では、これが急にこんなに重要になるのか。

答えは前章までの三つ ── LLM・道具・ループ ── を組み合わせた瞬間に、自動的に出てくる。

4.1 そもそも、なぜ “context” を気にするのか

第1章で見たように、エージェントはループする。 ループするということは、過去のやり取りが 次のターンに持ち越される ということだ。

ChatGPT を 1 回叩いて答えをもらうだけなら、入力は短い質問 1 個で済む。 ところが Claude Code はこうなる:

  1. ユーザー: 「fibonacci.py のバグを直して」
  2. LLM: 「Read(fibonacci.py) を呼ぶ」
  3. 道具: ファイル中身 80 行を返す
  4. LLM: 「Bash(pytest) を呼ぶ」
  5. 道具: テスト失敗ログ 200 行を返す
  6. LLM: 「Edit(...) を呼ぶ」

6 ターン目に LLM が見ているのは、6 ターン目の入力だけではない。 1〜5 ターン目の全部 ── ユーザー指示、ファイル中身、テストログ、過去の道具呼び出し ── が 頭から積み上がって 入力されている。

エージェントの入力は、ループが回るたびに線形に膨らむ。 これが context window という概念がエージェントの世界で急に存在感を増した理由。

4.2 トークンという最小単位

ここで一度、第1章でぼかしておいた「トークン」を本格的に定義する。

トークン (token)

LLM がテキストを扱うときの最小単位。文字でも単語でもなく、その中間 ── おおよそ「英単語 1 つ」「日本語 2〜3 文字」「記号 1 つ」程度の細切れの文字列。 LLM は内部的にテキストを丸ごと扱っているのではなく、トークン列に分解してから 処理する。

たとえば英語の Hello, world! は 4 トークン程度、日本語の こんにちは は 5 トークン前後になる。コードはもう少し変動が大きく、関数 1 つで数十〜数百トークンに収まることが多い。

正確な数値を覚える必要はない。重要なのは次の感覚だ。

種類おおよそのトークン数
短いユーザー指示 1 行数十トークン
100 行のソースファイル1,000 〜 2,000 トークン
pytest の失敗ログ数百 〜 数千トークン
プロジェクト全体の概要 (CLAUDE.md)数千トークン
Claude Code 本体のシステムプロンプト数千 〜 1 万トークン超

「1 ファイル読んだだけで、入力が 1,000 トークン重くなる」── この感覚を持っておくと、後の話が一気に腑に落ちる。

4.3 入力も出力も、同じ “机” の上に乗っている

LLM の世界で context window と呼ばれるのは、モデルが一度に見られるトークンの最大数 のこと。 ここで多くの初学者が誤解する点がある。

context window は 「入力の上限」ではない入力 + その回の出力、両方を合わせた合計トークンの上限だ。

つまり、入力をパンパンに詰めると、LLM はもう長い答えを書く余地を失う。 机が広くても、入力で机を埋めてしまえば、出力を置く場所がない。

直感的に書くとこういう関係になる。

[ context window 全体 ]
├── input tokens (system prompt + 過去ターン全部 + 今回のユーザー入力 + 道具の出力)
└── output tokens (LLM が今から書く分)

2026 年初頭時点の代表的なモデル の context window はこのくらいだ(数値は世代で動くので大枠だけ覚える)。Claude Opus 4 系を含め 1M トークン context が一般化 しつつあるのが、この時期の大きな変化点だ。

モデルcontext window
GPT-4o 系128k トークン
Claude Sonnet / Opus(標準)200k トークン
Claude Opus 4 系 / Gemini 1.5/2.0 系(拡張)1M トークン

100 万トークン載るならもう context は気にしなくていいのでは?」── と思った人は、この章の残りで答えが分かる。広い机にも、固有の問題がある。

4.4 ループが回るたびに膨らむ ── 図で掴む

第1章で出した「LLM + 道具 + ハーネス」の図を、ターン軸 で並べ直してみよう。

ターン 1system5,000 tokuserターン 2systemuserRead結果ターン 3systemuserRead結果pytest ログターン NsystemuserReadpytestEditBash…毎ターン入力が積み上がる
図 4.1 — ターンが進むほど、入力(system + user + 道具の出力)がどんどん長くなる。LLM は毎ターン、ここまでの全部を読み直してから次の手を考える。

ポイント:

ChatGPT で 10 回チャットするのと、Claude Code で 10 ターン回すのとでは、1 ターンあたりの入力サイズが桁違い。 これが、エージェントの世界で context window がすぐ問題になる構造的な理由だ。

4.5 prompt caching ── 「同じ前置きを毎回課金するな」

ここで素直な疑問が出てくる。

「毎ターン system prompt と過去の道具結果を全部読み直すなら、毎回そのぶんの料金を取られる ことになるのでは?」

その通りで、対策が必要になる。それが prompt caching だ。

prompt caching

「直前と同じプレフィックス(入力の先頭部分)」が来たとき、モデル側が前回の計算結果を再利用する仕組み。 キャッシュが効いた部分は 入力料金が大幅に割引(おおよそ 1/10 程度)になり、応答速度も上がる。 キャッシュには寿命 (TTL) があり、Anthropic API では既定で約 5 分 で消える。

Claude Code は意図的に、入力の構造をキャッシュが効きやすいように組んでいる:

[system prompt]            ← ほぼ不変。キャッシュが効く
[CLAUDE.md など長期記憶]    ← セッション中はほぼ不変。キャッシュが効く
[過去のターン全部]          ← 直前のターンまで同じ。キャッシュが効く
[今回新しく増えた部分]      ← ここだけ毎回計算される

つまり、毎ターン 「机の上の昨日までの内容」は再利用 し、「今日積んだぶんだけ計算する」。 このおかげで、context が長くなっても料金と速度の劣化がある程度抑えられている。

Claude Code の体感速度・体感料金は、モデルだけでなく prompt caching が効いているか で大きく変わる。 長く座って作業しているときに体感が軽快なのは、5 分以内に次のターンが来てキャッシュが切れていないことが多いから。 逆に 席を立って 10 分後に戻る と、キャッシュが切れて 1 ターン目がやけに重く感じることがある。

4.6 context rot ── 広い机にもある問題

「広い context window さえあれば長丁場も大丈夫」と思いきや、もう一つの壁がある。

context rot

入力が長くなるほど、LLM の 回答精度や指示追従性が劣化 していく現象。 「文脈の腐敗」と訳されることもある。技術的には、長文脈の中の重要情報を LLM がうまく拾えなくなる現象が主な原因とされる(その理論的背景と研究は 第15章で詳しく扱う)。

具体的にはこういう症状で現れる:

100 万トークン載るモデルでも、実用的な精度を保てる長さは数万〜十数万トークン にとどまる、と経験的に言われている。 Claude Code が Context left: 30% のあたりから /compact を勧め始めるのは、この経験則を踏まえている。

4.7 ではどうするか ── 圧縮と分割の二大戦略

机が満杯になってきた、あるいは context rot が出始めた ── そのときに使う打ち手は、おおまかに二つに分けられる。

戦略何をするか該当する操作
圧縮 (compaction)これまでのターンを要約してまとめ直し、入力を縮める/compact
分割 (delegation)別エージェントに独立した context で作業させ、結果だけ受け取るsub-agent、/clear で仕切り直し

ここでは名前だけ覚えておけばいい。詳しい使い方と判断基準は第Ⅱ部に譲る。

context は無限ではないし、広くても腐る。 だからこそエージェントには「圧縮」と「分割」という二つの逃げ道が設計されている。 この二つを使い分けるのが、Claude Code をうまく回す肝になる。

4.8 この章の振り返り

この章で読めるようになるツイート / ブログ

次章はこの章で何度も登場した system prompt を、構造編の主役として真正面から扱う。 「同じ Claude モデルなのに、Claude Code と ChatGPT で人格が違って見える」── その正体に踏み込む。