コンテキスト上限エラーに初めてぶつかった話

コンテキスト上限エラーに初めてぶつかった話

Claude Codeを使い続けていると、ある日突然「コンテキストが上限に達しました」というエラーが出ることがあります。

はじめて遭遇したとき、私は完全に固まりました。

「え、急に何?」「続きはどうするの?」「ここまで積み上げた会話、消えるの?」

焦って画面を見つめること数分。でも、ちゃんと対処法はありました。今回は、そのときの体験と、今は同じことで困らないようにしている予防策をまとめます。

そもそも「コンテキスト上限」って何?

一言で言えば、AIが同時に読める情報量の限界です。

Claude Codeは、あなたとの会話の全履歴、システムの設定、接続しているMCPのツール定義など、あらゆるものを「コンテキスト」と呼ばれる作業領域に載せて処理しています。

この領域のサイズには上限(トークン数)があり、会話が長くなるほど積み上がっていきます。

最初の5分は余裕でも、30分も作業を続けていると突然「満杯」になる、という感じです。ちょっとした質問とやり取りを繰り返しているだけでも、こっそりトークンは消費されていきます。

実際にエラーが出たときの流れ

私がはじめてぶつかったのは、あるタスクを何十分もかけてClaude Codeとやり取りしていたときでした。

途中でうまくいかない部分があって、修正を繰り返していたら急に止まった。

「コンテキストが上限に達しました」的なエラーメッセージ。

最初の反応は「/compact 使えばいいのでは?」でした。確かに /compact は会話を圧縮してくれるコマンドです。でも……ここで落とし穴があります。

「/compact も失敗する」という地獄

コンテキストがギリギリまで溜まっている状態で /compact を実行すると、なんと「Conversation too long」というエラーが出て、圧縮自体が失敗することがあります。

圧縮したいのに、そのための容量すらない、という状態です。

これは現時点でも既知の問題(GitHub issue)として報告されています。つまり、いちばん困っているときに /compact が使えないという状況が起きうるのです。

このとき私がとった(そして今では推奨できる)対処法は次の2段階です。

1. Esc キーを2回押して少し前の状態に戻る

直前の状態に戻ることで、コンテキストが少し軽くなります。その状態で /compact を再実行すると成功することがあります。「まずここを試して」というのが公式でも推奨されている方法です。

2. それでも無理なら /clear

/clear は会話履歴をリセットするコマンドです。「編集したファイルは残る」ので、コードの作業は失われません。でも会話の文脈は消えます。

最初はかなり抵抗がありましたが、「コードが消えるわけじゃない」とわかってからは怖くなくなりました。

/context コマンドで現在の使用量を確認する

知らなかったんですが、`/context` というコマンドを使うと、いま何がどれだけコンテキストを消費しているかを確認できます。

表示される内訳はこんな感じです:

  • システムプロンプト(CLAUDE.md の設定など)
  • ツール定義(接続しているMCPのツールリスト)
  • 会話履歴

「MCPのツール定義が意外と重い」とか「会話が積み上がりすぎている」とかが一目でわかります。

使っていないMCPがあれば `/mcp disable [名前]` で無効化すると、一気に軽くなることもあります。CLAUDE.md が肥大化している場合も、不要なルールを削るだけで効果があります。

次からは焦らないための予防策

今は、以下の3つを意識するだけでエラーに遭遇することがほぼなくなりました。

1. 「長くなってきたな」と感じたら /compact

上限ギリギリになる前に圧縮するのがポイントです。目安は使用量が60〜70%あたり。「なんか重くなってきた気がする」と感じたら、そのタイミングで /compact を打つ癖をつけています。

ちなみに、VS Code統合版のClaude Codeは使用量が75%に達すると自動で圧縮してくれるそうです。CLIで使っている場合は手動でやる必要があります。

2. 一時的な質問には /btw を使う

「ちょっとこれだけ聞きたい」という場面で /btw を使うと、その答えが会話履歴に残りません。「〇〇って何の略だっけ?」みたいな確認用の質問は /btw に分けるだけで、コンテキストをかなり節約できます。

まだ使いこなせているとは言えないのですが、試してみて「これは便利だ」と思ったコマンドのひとつです。

3. 別タスクに移るときは /clear でリセット

一つの作業が終わって次のタスクに移るときは、積極的に /clear でリセットするようにしました。「新しい仕事を始めるときは机を片付ける」くらいのイメージです。

これだけで、コンテキストが無駄に溜まるのをかなり防げます。

読者向けプロンプト:コンテキストの状態を確認する

コンテキストが重くなってきたと感じたら、以下をそのままClaude Codeのチャット欄に貼ってみてください。


いまのコンテキストの使用状況を教えてください。どの要素が多くの容量を占めていますか?軽くするためにできることがあれば提案してください。

現状を整理してもらって、/compact か /clear かを判断する材料にしています。

まとめ

  • コンテキスト上限エラーは、会話が長くなるほど起きやすい
  • /compact が失敗したら、まず Esc×2で少し戻ってから再試行
  • どうしても無理なら /clear でリセット(コードは消えない)
  • /context で現在の使用量と内訳を確認できる
  • 予防策は「早めに /compact」「/btw で一時質問」「タスク切り替えで /clear」の3つ

最初は「エラー=詰んだ」と思っていましたが、今は「そろそろ圧縮のタイミングかな」という感覚に変わっています。焦るより、コマンドを知っていれば怖くない。そういう話でした。