Claude Code を長時間使っていると、途中からだんだん応答が鈍くなったり的外れになったりする。セッションを切れば直るが、どのタイミングで切るのか、切り方の種類は何があるのか、知らずに使っている人は多い。Anthropic のエンジニアである タリク・シヒパール(Thariq Shihipar)が4月15日に公式ブログへ寄稿した記事が、この問題を具体的なコマンドで整理している。
コンテキストウィンドウとは何を含んでいるか
Claude Code がひとつのセッションで「見ている」情報は、システムプロンプト・会話履歴・ツール呼び出し・ファイル読み取りの結果すべてを合算したものだ。タスクが長くなるほど量は増え、モデルは今のタスクに関係ない過去のやりとりも常に参照対象として抱えることになる。結果として、応答が的外れになったり指示の精度が落ちたりする。これが「コンテキストロット(context rot)」と呼ばれる現象だ。
5つの選択肢
Claude がタスクを完了するたびに、ユーザーは次の5つから選べる。
| 操作 | コマンド | 使いどころ |
|---|---|---|
| 続行(Continue) | そのまま入力 | 同じタスク、今の文脈がまだ有効 |
| 巻き戻し(Rewind) | Esc Esc | 方向を誤った、成功した地点から再試行 |
| 圧縮(Compact) | /compact <ヒント> | 途中でセッションが肥大化した |
| クリア(Clear) | /clear | 新しいタスクを始める、ゼロから出発 |
| サブエージェント | タスク委譲 | 不要な中間出力を親コンテキストに残したくない |
「新しいタスクを始めるときは新しいセッションも始める」というのが記事の基本方針だ。1Mコンテキストは長く使えるが、コンテキストロットは依然として起きる。
巻き戻しは「訂正」より強い
失敗した試みをそのまま会話に残して「さっきのは間違いで、こうしてください」と伝えるより、Esc Esc で成功地点まで巻き戻して再プロンプトするほうが精度が高い。失敗したコンテキストを消してから、得た知見だけを乗せて試行できるからだ。
巻き戻しには「ここから要約を作成」機能もあり、次のイテレーションへの引き継ぎメモを自動生成できる。
圧縮(/compact)と クリア(/clear)の違い
/compact はセッション全体を自動で要約し、その要約で履歴を置き換える。ヒントを渡せば優先して残す内容を指定できる(例: "auth のリファクタに集中、テストのデバッグは捨てて")。低コストで継続できる半面、要約は不可逆なロッシー圧縮であり、圧縮前のツール出力は参照できなくなる。
/clear は文字通りゼロリセット。代わりに、次のセッションに引き継ぎたい情報をユーザー自身でドキュメント化する手間がかかる。コントロール範囲が広い分、準備コストも高い。
自動コンパクション(/compact を手動で呼ばずに上限に達したとき)が失敗しやすいのは、長いデバッグセッションの後に全然関係ない別タスクに切り替えたケースだ。要約が次の作業方向を正しく推測できず、重要なコンテキストが落ちる。1Mコンテキストなら余裕があるうちに /compact <ヒント> を自分で呼ぶほうが安全だ。
サブエージェントで中間出力を隔離する
Claude Code のサブエージェントは独立したコンテキストウィンドウを持つ。判断基準はシンプルで、「このツール出力は後でまた参照するか、結論だけあればいいか」だ。後で参照しないなら、その作業をサブエージェントに委譲すれば親セッションを汚染せずに済む。たとえば大量のファイルから特定の関数一覧を抽出するだけの作業は、完了後に中間ログを見返すことはほぼない。こういった「結論だけ欲しい」タスクこそサブエージェントの出番だ。
1Mコンテキストは「ずっと使い続けていい」ではない
「今の文脈がまだ有効かどうか」だけを都度確認して、有効でなければ適切な操作を選ぶ。1Mトークンという広大な作業空間は強力な武器だが、使い続けるほど汚れていく。/compact や /clear を意識的に使って、Claude Code との対話を常に最良の状態に保つことが、長時間作業の質を左右する。
参考
この記事は Claude Sonnet 4.6 が執筆しました。
