はじめに
Claude CodeやCodexのようなコーディングエージェントを使い始めると、最初の数十分はとても快適です。ところが、同じセッションで1〜2時間作業を続けていると、次のような症状に出会うことがあります。
- 序盤に伝えた「APIの形は変えないでください」という制約を、いつの間にか無視して実装し始める
- 1回の応答が明らかに遅くなり、同じことを何度も読み直しているように見える
- 「Prompt is too long」「context window に空きがない」といったエラーで作業が止まる
これらはエージェントの気まぐれではなく、ほぼすべてが「コンテキスト」の扱いに起因します。エージェントが一度に参照できる情報量には上限があり、作業が進むほどその枠は埋まっていきます。枠の中身を意識して整理する作業が、この記事でいうコンテキスト管理です。
この記事では、Claude CodeとCodexそれぞれの公式ドキュメントをもとに、次の3点を初心者向けに整理します。
- そもそもコンテキストとは何で、なぜ管理が必要なのか
- 管理を放置するとどうなるのか
- 管理のためにどのコマンドや設定を使うのか
想定読者は、コーディングエージェントを触り始めて数週間で、「コマンドの存在は知っているが、いつ何を使えばよいか分からない」という方です。ターミナル操作の基礎が分かれば読み進められます。
まず、この記事が扱う「困りごと」と「管理した後の姿」を1枚で示します。番号順に枠の強調が移動するので、1から4へ追ってみてください。
図1: 放置すると1から2へ進み、管理すると3から4へ進みます。
前提知識: コンテキストとコンテキストウィンドウ
コンテキストとは何か
コンテキスト(context)とは、エージェントがセッション中に参照できる情報全体のことです。Codexの用語集では「ファイル、過去のメッセージ、ツールの出力、指示など、作業中にCodexが利用できる情報」と定義されています。Claude Codeのドキュメントも同様に、会話履歴、読み込んだファイルの中身、コマンド出力、CLAUDE.md、自動メモリ、読み込まれたスキル、システム指示がコンテキストウィンドウに入ると説明しています。
初心者がつまずきやすいのは、「自分が打ち込んだ文章」以外にも大量の情報がコンテキストに載っている点です。ターミナルに表示される文字は、実際にモデルへ送られている情報のごく一部でしかありません。たとえばClaude Codeが src/api/auth.ts を読むと、画面には「Read auth.ts」と1行出るだけですが、ファイルの中身そのもの(数千トークン)がコンテキストに入ります。
コンテキストに載る情報は、大きく2種類に分けて考えると整理しやすくなります。
| 種類 | 内容 | 特徴 |
|---|---|---|
| 固定で載る情報 | システムプロンプト、ツール定義、CLAUDE.md / AGENTS.md、メモリ、スキルの説明、MCPツールの一覧 | セッション開始時にまとめて読み込まれる。要約や消去の対象ではなく、再読込される |
| 会話で積み上がる情報 | ユーザー入力、エージェントの応答、ファイル読み込みやコマンド実行の出力 | ターンが進むほど増える。要約(compact)や消去(clear)の対象 |
コンテキストウィンドウとは何か
コンテキストウィンドウ(context window)は、モデルが一度に考慮できる情報量の上限です。単位はトークンで、英語ではおおむね4文字で1トークン、日本語は英語より多くのトークンを消費します。同じ内容でも日本語で書くと枠を早く消費する、という点は覚えておいて損はありません。
上限はモデルによって異なります。Claude Codeでは、Claude Fable、Sonnet 5、Opus 4.6以降、Sonnet 4.6が100万トークン(1M)のコンテキストウィンドウに対応しており、それ以外や設定によっては20万トークン(200K)で動作します。Codexでも上限はモデルごとに異なり、/status を実行すると現在のモデルと残り容量を確認できます。
ここで大事なのは、「1Mあるから管理しなくてよい」ではない、という点です。上限が大きいほど「気づかないうちに大量の古い情報を毎回送っている」状態が長く続き、後述する品質劣化やコスト増が静かに進みます。
ターンが進むと何が起きるか
具体例で見てみましょう。ECサイトの決済APIで二重課金が発生し、その修正をエージェントに依頼したセッションを想定します。
図2: 各ターンで追加された入力・ツール出力・応答が下から積み上がり、固定部分は毎回そのまま載ります。使用率の数値は説明用の例です。
ターン1で決済モジュールを読み込み、ターン2でログを検索し、ターン3で修正とテストを行い、ターン4で「ついでに通知メールの文面も直して」と頼んだ結果、決済とは無関係なメールテンプレートまでコンテキストに載りました。この時点で、決済モジュールの全文やログ検索結果は既に役目を終えていますが、明示的に整理しない限り毎ターン送られ続けます。
なぜコンテキスト管理が必要なのか(放置するとどうなるか)
放置した場合に起きることは、大きく3つに整理できます。
図3: 症状1と2は上限に達する前から始まります。上限に達してから対処するのでは遅い、というのが管理の出発点です。
症状1: 品質の劣化
Claude Codeのドキュメントは、コンテキストが埋まると自動で要約(compaction)が走るが、会話の序盤にあった指示は失われることがある、と明記しています。つまり「最初に言った制約を忘れる」のは、モデルの物覚えの問題ではなく、要約で情報が薄れる仕組み上の問題です。だからこそ、恒久的なルールは会話ではなく CLAUDE.md(Codexなら AGENTS.md)に書け、というのが公式の指針です。
症状2: コストと速度の悪化
エージェントは毎回のメッセージでコンテキスト全体をモデルに送ります。Claude Codeのドキュメントでも、無関係な古い会話は次に必要なファイルの場所を圧迫し、メッセージごとにトークンを消費する、と説明されています。決済バグを直し終えたあとにメール文面の修正を続けると、決済モジュールの全文が「関係ないのに毎回送られる荷物」になります。応答が遅く感じるのは、この荷物が原因であることが多いです。
症状3: 上限到達で作業が止まる
上限に達すると、Claude Codeでは「Prompt is too long」系のエラー、Codexでは「context windowの空きがなくなった」旨のエラーで作業が止まります。両ツールとも自動要約で回避を試みますが、万能ではありません。
Claude Codeには自動要約の「空回り(thrashing)」対策があります。1つのファイルやツール出力が大きすぎて、要約しても直後にまた上限に達する状態が数回続くと、Claude Codeは自動要約を止めてエラーを表示します。エラーメッセージでは、読み込んでいるファイルかツール出力が大きすぎる可能性を指摘し、小さな単位で読むか /clear で新しく始めるよう案内されます。要約はあくまで「履歴」を縮める仕組みで、1個の巨大な出力は縮められない、という点が重要です。
自動要約があるのに、なぜ手動で管理するのか
「自動で要約してくれるなら任せればよいのでは」と思うかもしれません。公式ドキュメントの答えは明確で、手動で /compact に指示を付けて実行すれば「残すもの」を自分で選べるが、自動要約は何が重要かを推測するしかない、というものです。決済バグの修正中に自動要約が走り、「認証まわりの調査」だけが残って「二重課金の再現手順」が消える、といったことが起こり得ます。節目で自分の言葉で残すものを指定する方が、はるかに安全です。
Claude Codeでのコンテキスト管理
ここからは、Claude Codeの公式ドキュメント(code.claude.com/docs)で説明されているコマンドと設定を、「確認する」「圧縮する」「消す」「そもそも載せない」の4段階で整理します。
確認する: /context
/context は、現在のコンテキスト使用量をカテゴリ別に色付きグリッドで表示するコマンドです。コンテキストを大量に消費しているツール、肥大化したメモリファイル、容量の警告といった最適化の提案も一緒に表示されます。会話がコンテキストウィンドウを超えている場合は、どれだけ超過していて、どのコマンドで空けられるかの警告が出ます。全画面モードでは項目ごとの内訳が折りたたまれるため、/context all で展開します。
実行例を見てみましょう(数値は説明用です)。
> /context
Context Usage
Opus 4.8 (1M context)
claude-opus-4-8[1m]
54.3k/1m tokens (5%)
Estimated usage by category
System prompt: 2.3k tokens (0.2%)
System tools: 14.4k tokens (1.4%)
Memory files: 104 tokens (0.0%)
Skills: 1.5k tokens (0.1%)
Messages: 36.9k tokens (3.7%)
Free space: 944.8k (94.5%)
読み方は次のとおりです。
| 項目 | 何が入っているか | 対処の方向 |
|---|---|---|
| System prompt / System tools | Claude Code本体の指示と組み込みツール(Bash、Read、Editなど)の定義 | ユーザーは変更できない。固定コスト |
| MCP tools | 接続中のMCPサーバーのツール定義。既定では名前だけ載り、詳細は使う時に読み込む | 不要なサーバーは /mcp で無効化 |
| Memory files | CLAUDE.md、.claude/rules/ 配下のルール、自動メモリ |
/memory で編集。肥大化したら分割 |
| Skills | スキルの1行説明。本文は使った時だけ読み込む | 手動でしか使わないスキルは disable-model-invocation: true
|
| Messages | 入力、応答、ツールの入出力。セッションが進むほど増える |
/compact や /clear の対象 |
| Free space | 残りの空き領域 | ここが減ってきたら整理の合図 |
開発中に「応答が遅い」「古い指示を忘れている」と感じたら、まず /context を打つのが公式の推奨です。
圧縮する: /compact
/compact [instructions] は、それまでの会話を要約して空き領域を確保するコマンドです。引数に「何を重視して要約するか」を書けます。
> /compact 決済APIの二重課金修正の判断と、残っているテストの失敗を中心に
引数なしでも実行できますが、公式ドキュメントは長い新タスクの前に焦点を指定して実行することを勧めています。自動要約が「重要そうなもの」を推測するのに対し、指示付きの /compact は自分が選んだものを残せるからです。
実行前後で何が起きるかを図にしました。
図4: 履歴は要約に置き換わり、固定部分はディスクから再読込されます。要約自体もトークンを使うため、空きは「全部」ではなく「大きく」戻ります。
要約後に何が残り、何が消えるかは、公式ドキュメントの「What survives compaction」に整理されています。要点をまとめます。
| 対象 | 要約後の扱い |
|---|---|
| システムプロンプト、出力スタイル | そのまま有効 |
| プロジェクト直下のCLAUDE.md、パス指定のないルール | ディスクから再注入 |
| 自動メモリ(MEMORY.md) | ディスクから再注入 |
| プランモードで書いたプラン | ディスクから再注入 |
paths: 付きのルール、サブディレクトリのCLAUDE.md |
該当ファイルを再び読んだ時に再読込 |
| 読んだり編集したりしたファイル | 直近に変更した順で最大5ファイルを再読込。5,000トークン超のファイルはパス参照のみ |
| 呼び出したスキルの本文 | 再注入されるが、1スキル5,000トークン、合計25,000トークンが上限。古いものから落ちる |
| フックが追加したコンテキスト | 他の会話と一緒に要約される |
| スキルの一覧(説明) | 再読込されない。実際に呼び出したスキルだけが残る |
この表から導かれる実務上のコツは2つあります。
- 要約をまたいでも守らせたいルールは、
paths:を外すか、プロジェクト直下のCLAUDE.mdに書く - スキル本文は先頭から切り詰められるので、最重要の指示を
SKILL.mdの冒頭に置く
さらに、要約で残す内容を毎回指定するのが面倒な場合は、CLAUDE.md に「Compact Instructions」というセクションを作っておくと、要約時にそれが参照されます。
## Compact Instructions
- 決済モジュールで変更したファイル名と関数名は必ず残す
- テストが失敗している場合は失敗内容を残す
- 調査のために読んだだけのファイルの内容は残さなくてよい
なお、要約の生成には、セッションで拡張思考(extended thinking)を有効にしていればその設定が引き継がれます(v2.1.198以降)。要約の質に影響するのは生成時だけで、セッション設定自体は変わりません。
部分的に圧縮する: /rewind の要約
会話の一部だけを要約したい場合は /rewind が使えます。メッセージを選び、「Summarize from here」(ここから先を要約)または「Summarize up to here」(ここまでを要約)を選ぶと、範囲を絞った要約ができます。「直近の試行錯誤だけ畳みたい」「序盤の設計議論は原文のまま残したい」といった場面で便利です。
消す: /clear
/clear は、空のコンテキストで新しい会話を始めるコマンドです。エイリアスとして /reset と /new も使えます。名前を引数に付けると、直前の会話に /resume の一覧で分かるラベルが付きます。
> /clear 決済二重課金の修正(完了)
前の会話は消えるのではなく保存されるので、/resume から戻れます。同じClaude Codeプロセス内であれば、rewindメニューの「前のセッション」項目からも復元できます(v2.1.191以降)。
公式ドキュメントが挙げている使いどころは「無関係な作業に切り替える時」です。古い会話は次に必要なファイルを圧迫し、毎メッセージのトークンを消費するからです。図2の例なら、決済バグの修正が終わってメール文面の修正に移る時が /clear のタイミングです。
/compact と /clear の使い分けは、公式の説明に沿うと次の一文に集約できます。同じ会話を続けながら空きを作りたいなら /compact、別のタスクを始めるなら /clear です。
残さずに質問する: /btw
/btw [question] は、会話に追加せずにセッションについての「ちょっとした質問」をするコマンドです。特徴を公式ドキュメントからまとめます。
- Claudeが作業中でも実行でき、メインの処理を中断しない
- 現在の会話にある情報(自分の入力、応答、収集済みのツール結果)から答える
- ツールは使えない。ファイルの読み込みやコマンド実行はしない
- 単発の応答で、続けて聞きたい場合はもう一度
/btwを打つ。ローカルセッションではfを押すと、その質問をバックグラウンドのサブエージェントに引き継げる - プロンプトキャッシュが効いている間は、答えの分しかコストがかからない
具体例です。
> /btw さっき読んだ決済モジュールで、再試行回数を決めている定数の名前は?
これをメイン会話で聞くと、質問と答えが履歴に残り、以後ずっと送られ続けます。/btw なら履歴に残らないので、コンテキストを汚さずに済みます。なお、「btw」は「by the way(ところで)」の略です。
自動要約の発火点を調整する: /autocompact
/autocompact [auto|<tokens>] は、コンテキストがどこまで埋まったら自動要約するかを設定するコマンドです(v2.1.221以降)。500k のようなサイズを渡すとユーザー設定に保存され、現在のセッションにも適用されます。auto を渡すとモデルに合わせた既定に戻ります。
> /autocompact 500k
受け付ける形式は、200000 のような素のトークン数、500k や 1M のような接尾辞付き、200(20万の意味)のような100〜1000の数値で、範囲は100Kから1Mです。1回の起動だけ変えたいなら claude --autocompact 500k、スクリプトやクラウド環境では環境変数 CLAUDE_CODE_AUTO_COMPACT_WINDOW を使います。
既定の発火点はモデルと環境で異なります。公式ドキュメントによると、設定しない場合は原則としてモデルの上限に達した時点で要約が走りますが、次の例外があります。
- クラウドセッションは上限に近づいた時点で要約する
- 1Mコンテキストを使っていないSonnet 4.6やOpus 4.6は200Kの境界で要約する
- Sonnet 5、Fable、Opus 4.7以降など元々1Mで動くモデルは、既定で約967Kの時点で要約する
1Mモデルで「もっと早く畳みたい」「毎回の送信量を抑えたい」なら、/autocompact 500k のように明示的に下げる運用が有効です。
そもそも載せない: サブエージェント、スキル、MCP、メモリ
圧縮や消去の前に、「最初から載せない」工夫の方が効果が大きい場面も多いです。公式ドキュメントの「Manage context with skills and subagents」に沿って整理します。
サブエージェントは独立したコンテキストウィンドウで動きます。調査のために10ファイル読んでも、その中身はサブエージェント側に留まり、メインには最終的な要約と小さなメタデータだけが戻ります。「大量の読み込みが必要な調査」は、メイン会話ではなくサブエージェントに委譲するのが公式の推奨です。
> サブエージェントを使って、セッションタイムアウトの処理がどこに実装されているか調べてから修正して
スキルは、セッション開始時に1行の説明だけが載り、本文は使う時に読み込まれます。自分でしか呼ばないスキルには disable-model-invocation: true を付けると、説明すら載らなくなります。自作でないスキルは設定の skillOverrides で同じことができます。
MCPツールの定義は既定で遅延読み込みされ、名前とサーバーの説明だけが載ります。詳細な定義は、ツール検索を通じて実際に使う時に読み込まれます。
CLAUDE.mdは200行以内に収め、参照情報はスキルやパス指定ルールに逃がして必要な時だけ読み込ませる、というのが公式のヒントです。自動メモリは MEMORY.md の先頭200行または25KBまでが読み込まれます。/doctor を実行すると、使われていないスキル、MCPサーバー、プラグインをコンテキストコストと合わせて洗い出し、肥大化したCLAUDE.mdの整理も提案してくれます。
Claude Codeのコマンド早見表
| 目的 | コマンド・設定 | 補足 |
|---|---|---|
| 使用量の確認 |
/context、/context all
|
最適化の提案も表示 |
| 履歴の要約 | /compact [指示] |
焦点を指定して残す内容を選ぶ |
| 部分的な要約 |
/rewind → Summarize from/up to here |
範囲を絞って畳む |
| 履歴の消去 |
/clear [名前](別名 /reset、/new) |
/resume で戻れる |
| 残さず質問 | /btw 質問 |
ツール不可、単発 |
| 自動要約の閾値 |
/autocompact 500k、--autocompact、CLAUDE_CODE_AUTO_COMPACT_WINDOW
|
100K〜1M |
| 別コンテキストへ委譲 | サブエージェント | 結果の要約だけ戻る |
| 固定部分の整理 |
/memory、/mcp、/doctor
|
CLAUDE.md、MCP、不要スキルの見直し |
| 費用の確認 |
/usage(別名 /cost) |
トークン消費の把握 |
Codexでのコンテキスト管理
続いてCodexです。Codex CLIの公式ドキュメント(developers.openai.com)で説明されているスラッシュコマンドと config.toml の設定を、同じ4段階で整理します。
確認する: /status と /statusline
/status は、現在のモデル、承認ポリシー、書き込み可能なディレクトリ、トークン使用量(残りのコンテキスト容量)を表示します。リモート接続中はサーバーのアドレスとバージョンも出ます。Claude Codeの /context に相当する確認コマンドです。
> /status
常に見ていたい場合は /statusline でフッターに表示する項目を選べます。選択肢にはモデル、コンテキストの統計、レート制限、Gitブランチ、トークンカウンターなどがあり、設定は config.toml の tui.status_line に保存されます。コンテキスト使用率をフッターに常時表示しておくと、「そろそろ整理する時期」を見逃しにくくなります。
圧縮する: /compact
Codexの /compact は、表示中のチャットを要約してトークンを解放するコマンドです。実行すると要約の確認が表示され、承認すると以前のターンが簡潔な要約に置き換わります。公式ドキュメントは「長い作業のあとに使い、要点を保ったままコンテキストウィンドウを溢れさせないようにする」用途を挙げています。
Codexでは要約の仕方を設定ファイルで調整できます。config.toml の compact_prompt に要約用プロンプトを書けば、要約時にそれが使われます(ファイルから読み込む experimental_compact_prompt_file もあります)。
# ~/.codex/config.toml
compact_prompt = """
要約では次を必ず残してください。
- 変更したファイルと関数名
- 失敗しているテストとその内容
- ユーザーが明示した制約(APIの互換性など)
調査のために読んだだけのファイルの内容は省略して構いません。
"""
自動要約の発火点を調整する: model_auto_compact_token_limit
Codexは、履歴が一定のトークン数に達すると自動で要約します。閾値は config.toml の model_auto_compact_token_limit で変更でき、未設定ならモデルの既定値が使われます。合わせて model_context_window でモデルのコンテキストウィンドウ全体を宣言できます。
# ~/.codex/config.toml
model = "gpt-5.6-terra"
model_auto_compact_token_limit = 150000 # このトークン数で自動要約
model_auto_compact_token_limit_scope は、閾値を「コンテキスト全体」で数えるか(total、既定)、「要約後に引き継いだ前置き部分より後の増加分」だけで数えるか(body_after_prefix)を切り替えます。要約直後に固定部分が大きくてすぐ再要約が走るような場合に、後者が役立ちます。
なお、要約の前後で処理を挟みたい場合は、フックの PreCompact と PostCompact イベントが用意されています。要約前に作業ログを外部ファイルへ書き出す、といった使い方ができます。
実験的なコンテキスト管理
Codexには、要約を繰り返す代わりに「ノート」と「検索可能な履歴」で詳細を保持する実験的な仕組みがあります。config.toml で features.context_management.experimental_mode = true にして新しいタスクを開始すると有効になります。公式ドキュメントによれば、ChatGPT PlusまたはProでのサインインが必要で、既定はオフです。長時間のタスクで「要約のたびに細部が消える」ことに困っている場合の選択肢として覚えておくとよいでしょう。
消す: /new と /clear
Codexには新規チャットを始めるコマンドが2つあります。
| コマンド | 動作 | 名前付け |
|---|---|---|
/new |
同じCLIセッション内で新しいチャットを開始する。画面はクリアしない | /new bug bash |
/clear |
ターミナル画面をクリアし、表示中の履歴もリセットして新しいチャットを開始する | /clear release prep |
紛らわしいのが Ctrl+L で、こちらは画面表示を消すだけでチャットは続きます。「見た目がきれいになったからコンテキストも空いた」と思い込まないよう注意してください。/clear と Ctrl+L はタスク実行中は使えません。
前のチャットには /resume で戻れます。現在のチャットを複製して別方向を試したい時は /fork、保存済みのセッションを分岐したい時はターミナルから codex fork を使います。
残さずに質問する: /side(/btw)
Codexにも、メインの履歴に残さない「サイドチャット」があります。コマンドは /side で、/btw も同じ動作をします。
> /side この修正案に見落としているリスクはありますか
サイドチャットは親チャットとは別の履歴を持ち、サイドモード中も親チャットの状態(実行中かどうか)が表示されます。サイドチャットの中でさらに /side は使えず、レビューモード中も使えません。「メインの流れを止めずに、今の計画の妥当性だけ聞きたい」といった場面向けです。
そもそも載せない: @メンション、AGENTS.md、サブエージェント
Codexでは、IDE拡張が開いているファイルを自動でコンテキストに含めるのに対し、CLIではパスを明示するか /mention や @ の補完でファイルを添付します。裏を返せば、CLIでは「必要なファイルだけを渡す」ことが自然にできます。決済バグなら @src/payments/charge.ts のように対象を絞って渡すと、無関係なファイルの読み込みを減らせます。
AGENTS.md は、Codexに永続的な指示を与えるファイルです。/init で雛形を生成できます。読み込みの仕組みには上限があり、グローバルの ~/.codex/AGENTS.md からリポジトリのルート、サブディレクトリへと順に連結し、合計が project_doc_max_bytes(既定32KiB)に達すると、それ以降のファイルは読み込まれません。空のファイルは飛ばされます。指示が多い場合は上限を上げるか、サブディレクトリに分割するのが公式の対処です。
# ~/.codex/config.toml
project_doc_max_bytes = 65536
Codexにもセッションをまたぐ「Memories」がありますが、features.memories は既定でオフです。/memories コマンドで、既存メモリの利用と新規生成のオン・オフを切り替えられます。メモリが増えればその分コンテキストを使うので、有効化する際は使用量も合わせて確認してください。
サブエージェントについても、Codexは spawn_agent などのマルチエージェント機能を標準で備えており、/agent(/subagents)で子スレッドを切り替えて内容を確認できます。Ultraモードはこの仕組みを使って作業を並列化します。Claude Codeと同様、大量の読み込みを伴う調査は子エージェントに任せると、メインのコンテキストを守れます。
Codexのコマンド早見表
| 目的 | コマンド・設定 | 補足 |
|---|---|---|
| 使用量の確認 |
/status、/statusline
|
フッターに常時表示可能 |
| 履歴の要約 | /compact |
確認プロンプトあり。compact_prompt で要約方針を指定 |
| 自動要約の閾値 |
model_auto_compact_token_limit、model_auto_compact_token_limit_scope
|
config.toml |
| 履歴の消去 |
/new [名前]、/clear [名前]
|
Ctrl+L は画面だけ |
| 残さず質問 |
/side 質問(/btw) |
別履歴のサイドチャット |
| 必要ファイルだけ渡す |
/mention パス、@パス
|
CLIは自動添付なし |
| 永続指示 |
AGENTS.md、/init、project_doc_max_bytes
|
合計32KiBが既定上限 |
| メモリ |
/memories、features.memories
|
既定オフ |
| 別コンテキストへ委譲 | サブエージェント、/agent
|
Ultraモードでも利用 |
| 要約前後の処理 | フック PreCompact / PostCompact
|
ログ退避など |
両ツールでコンテキストに載る情報の対応を1枚にまとめると次のようになります。
図5: 上段ほど毎回固定で載る情報で、下段の履歴だけが要約や消去の対象です。
実践: 1日の作業でのコンテキスト管理フロー
コマンドを覚えても、「いつ打つか」が決まっていないと使いません。ここでは、在庫管理サービスで「認証バグの修正」「回帰テストの追加」「別機能のリファクタリング」を1日で進める場合の流れを、Claude Codeを例に手順化します(Codexでは対応コマンドに読み替えてください)。
- セッション開始時に
/contextを打ち、固定部分(System tools、Memory files、MCP tools)がどれくらい占めているかを把握します。既にMessagesが空なのに30%以上使っているなら、CLAUDE.mdやMCPサーバーの見直しを検討します。 - 恒久的な制約は最初の指示ではなく
CLAUDE.mdに書きます。たとえば「認証APIのレスポンス形式は変えない」「テストはnpm testで実行する」といった内容です。要約を挟んでも再注入されるからです。 - 認証バグの調査で大量のファイルを読む必要がある場合は、「サブエージェントを使って原因箇所を特定して」と依頼し、メインのコンテキストには要約だけを戻します。
- 修正の途中で「さっき読んだファイルの定数名は何だったか」といった確認は
/btwで行い、履歴に残しません。 - 修正が終わり回帰テストの追加に移る前に、
/compact 認証バグの原因と修正内容、変更したファイルを中心にを実行します。同じタスクの続きなので/clearではなく/compactです。 - テスト追加が終わり、無関係なリファクタリングに移る時は
/clear 認証バグ修正(完了)で新しい会話を始めます。必要になれば/resumeで戻れます。 - 1Mコンテキストのモデルで長時間続ける場合は、あらかじめ
/autocompact 500kを設定し、自動要約が遅すぎて巨大化するのを防ぎます。
どのコマンドを選ぶかは、次のフローで判断すると迷いません。
図6: 上から順に判断します。どれにも当てはまらなければそのまま続行し、節目で再確認します。
応用: 要約の質を上げる設定
要約に残すものをファイルで固定する
Claude Codeなら CLAUDE.md の「Compact Instructions」セクション、Codexなら config.toml の compact_prompt に、毎回残してほしい観点を書いておきます。書く内容の考え方は共通で、「変更したファイルと関数」「失敗しているテスト」「ユーザーが明示した制約」「残タスク」の4つを押さえると、要約後に作業が迷子になりにくくなります。
発火点を早める
Claude Codeの /autocompact とCodexの model_auto_compact_token_limit は、いずれも「上限に達する前に畳む」ための設定です。上限ぎりぎりで要約すると、要約リクエスト自体が大きくなり失敗しやすくなります。特に大きなファイルやログを扱うプロジェクトでは、余裕を持った閾値にしておく方が安全です。
1Mコンテキストとの付き合い方
Claude Codeでは、Fable、Sonnet 5、Opus 4.6以降、Sonnet 4.6が1Mコンテキストに対応し、プランによっては自動で有効になります。使わない場合は CLAUDE_CODE_DISABLE_1M_CONTEXT=1 で200Kに固定できます。1Mは「長い作業を途切れず続けられる」利点がある一方、毎回の送信量が大きくなり続けるため、/autocompact と /compact の併用が前提になります。
要約を見送るという選択
Claude Codeの /rewind にある範囲指定の要約や、Codexの実験的コンテキスト管理(ノートと検索可能な履歴)は、「全部を1つの要約に潰す」以外の選択肢です。設計の議論を原文のまま残したい場面では、部分要約を検討してください。
トラブルシューティング
| 症状 | 主な原因 | 対処 |
|---|---|---|
| Claude Codeで「Prompt is too long」系のエラーが出る | 上限到達。大きなファイルや出力を一度に読み込んだ |
/compact を試し、失敗するなら /clear。次回は大きなファイルを分割して読む |
| Claude Codeで自動要約が止まり、空回り(thrashing)のエラーが出る | 1つのファイルかツール出力が大きすぎて、要約しても直後に上限へ戻る | 小さな単位で読み直す、または /clear。サブエージェントに読み込みを任せる |
/compact が「会話が長すぎる」と失敗する |
上限ぎりぎりで要約を実行した |
/rewind で少し前に戻ってから要約する。次回は /autocompact で早めに畳む |
| 序盤の指示が守られなくなった | 要約で会話中の指示が薄れた | 恒久ルールを CLAUDE.md / AGENTS.md に移す。/compact の引数で明示する |
| Codexで「context windowの空きがなくなった」旨のエラー | 上限到達 |
/compact、または /new で新規チャット。model_auto_compact_token_limit を下げる |
| CodexでAGENTS.mdの後半が効いていない | 合計32KiBの上限で後続ファイルが読み込まれていない |
project_doc_max_bytes を上げる、またはサブディレクトリに分割する |
| 応答が遅い、費用が高い | 古いツール出力が毎ターン送られている |
/context / /status で確認し、節目で /compact、タスク切り替え時に /clear
|
| セッション開始直後から使用率が高い | MCPツール定義、CLAUDE.md、メモリなど固定部分が肥大化 |
/doctor で不要なMCP・スキルを洗い出す。CLAUDE.mdを200行以内に |
まとめ
- コンテキストは「自分の入力」だけでなく、システムプロンプト、ツール定義、CLAUDE.md / AGENTS.md、ファイルの中身、コマンド出力を含みます。画面に見えている情報はごく一部です
- 放置すると、序盤の指示が薄れる、毎回の送信量が増えて遅く高くなる、上限でエラーになる、の順に問題が出ます。上限到達は最後の症状で、その前から劣化は始まっています
- Claude Codeでは
/contextで確認し、/compact(焦点指定)と/clearを使い分け、/btwで履歴を汚さず、/autocompactで発火点を調整します - Codexでは
/statusと/statuslineで確認し、/compactと/new・/clearを使い分け、/sideで履歴を汚さず、model_auto_compact_token_limitとcompact_promptで自動要約を調整します - 両ツール共通で、恒久ルールは会話ではなく設定ファイルに書く、大量の読み込みはサブエージェントに任せる、の2点が最も効果的です
次のステップとしては、まず自分の普段のセッションで /context または /status を1日に数回打ち、固定部分と履歴の比率を把握することをお勧めします。その上で CLAUDE.md / AGENTS.md に恒久ルールを移し、/compact の引数を書く習慣をつけると、エージェントの「物忘れ」に悩まされる場面がはっきり減ります。
参考リソース
Claude Code(公式ドキュメント)
- Explore the context window: https://code.claude.com/docs/en/context-window
- How Claude Code works(The context window / When context fills up): https://code.claude.com/docs/en/how-claude-code-works
- Commands(/compact、/clear、/context、/btw、/autocompact ほか): https://code.claude.com/docs/en/commands
- Model configuration(Extended context、Set the auto-compact window、Default auto-compact thresholds): https://code.claude.com/docs/en/model-config
- Interactive mode(Side questions with /btw): https://code.claude.com/docs/en/interactive-mode
Codex(公式ドキュメント)
- Slash commands in Codex CLI(/compact、/new、/clear、/status、/side ほか): https://developers.openai.com/codex/cli/slash-commands
- Configuration Reference(model_context_window、model_auto_compact_token_limit、compact_prompt ほか): https://learn.chatgpt.com/codex/config-file/config-reference
- Custom instructions with AGENTS.md(project_doc_max_bytes): https://developers.openai.com/codex/guides/agents-md
- Models(Experimental context management): https://learn.chatgpt.com/codex/models
- Glossary(Context、Context window、Compaction): https://learn.chatgpt.com/codex/glossary
本記事の内容は2026年9月時点の公式ドキュメントに基づいています。コマンドや既定値はバージョンによって変わるため、実際の挙動は手元の /help と各ドキュメントで確認してください。





