Claude Codeで「Prompt is too long」が出て詰んだ時の対処法——「usage limit reached」と誤表示される罠も含めて整理した

Claude Codeで「Prompt is too long」が出て詰んだ時の対処法——「usage limit reached」と誤表示される罠も含めて整理した

Claude Codeの「Prompt is too long」エラーの原因と復旧手順を解説。200kトークン制限との違い、「usage limit reached」への誤表示問題、MCPツール肥大化などの原因別チェックリスト、GitHub Issue実例つきでまとめた。

エンジニアのゆとです。

Claude Codeで長時間作業していたら、ある瞬間から何を打ってもPrompt is too longとしか返ってこなくなった——という経験をした人は、たぶん僕だけじゃないと思う。しかも厄介なのは、このエラーが素直に「コンテキストが満杯です」と教えてくれないケースがあること。usage limit reached(利用制限に達しました)という別のメッセージに化けて出てくることがあって、プラン変更ページを開いてしまった人も実際にいる。

この記事では、Prompt is too longエラーの正体、なぜ自動コンパクション機能があるのに発生するのか、そして今まさに詰んでいる人がやるべき復旧手順を、GitHub Issueの実例つきで整理する。

まず結論——今すぐやるべきこと

パニックにならなくていい。順番にこれをやる。

  1. /context を実行して、本当にコンテキストが埋まっているのか確認する(後述するが、埋まっていないのに出るケースもある)
  2. 埋まっているなら /compact に焦点を指定して実行する。例: /compact 直前のバグ修正の要点だけ残して
  3. /compact 自体が通らないほど詰まっている場合、Esc を2回押して数ターン前まで会話を巻き戻し、そこから /compact を試す
  4. それでもダメなら /clear で会話をリセットする。ただし会話ログ自体は消えないので、後から /resume で過去セッションを一覧して必要な情報だけ拾い直せる
  5. VS Code拡張やデスクトップアプリで発生してCLIに逃げられない場合は、ターミナル版の claude --resume から同じプロジェクトディレクトリでセッション一覧を確認する

これで大半のケースは復旧できる。以下、なぜこのエラーが起きるのか、なぜ自動対策があるのに詰むのかを掘り下げる。

そもそも「Prompt is too long」って何のエラーなのか

Claude Codeが投げてくる実際のエラーメッセージはこういう形をしている。

Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: 209375 tokens > 200000 maximum"},"request_id":"req_..."}

invalid_request_errorという種類で、HTTPステータスは400。これは「1回のリクエストに含まれるトークン数が、モデルの上限を超えた」ことを意味するエラーだ。Claude Codeは会話を送るたびに、これまでの会話履歴・読み込んだファイル・ツールの実行結果・CLAUDE.mdやメモリファイル・接続中のMCPツールのスキーマまで、全部まとめて1つのリクエストとしてAPIに送っている。だから画面に見えている自分の一言はごく小さくても、裏側で送られているリクエスト全体は巨大になっていることがある。

標準的なモデルのコンテキストウィンドウは20万トークン。Opus/Sonnetの一部モデルでは100万トークン(1Mコンテキスト)まで拡張されているが、こちらは追加料金が発生する条件があったり、プランによって使えなかったりする。自分がどちらの上限で動いているのかは /context を打てば内訳付きで確認できる。

Claude Code 1Mコンテキストの賢い使い方——トークン枯渇を防ぐ3層管理戦術
Claude Code 1Mコンテキストの賢い使い方——トークン枯渇を防ぐ3層管理戦術Sonnet 4.6/Opus 4.7で標準化した1Mコンテキストの落とし穴と管理戦術を実測データで解説。全部入れれば賢くなると思ったら逆だった話、3層管理の設計、/compactの最適タイミング、Python計測スクリプトまで。読む →

「usage limit reached」に化けて出てくる罠

ここが一番の落とし穴だと思っている。

本来Prompt is too longはHTTP 400(リクエスト単位の制限超過)で、実際の利用制限(レートリミット)を示すHTTP 429とは全く別物だ。ところがClaude Codeのエラーハンドラーがこの2つを区別せず、どちらも「利用制限に達しました」という表示にまとめてしまうケースがあることがGitHub Issueで報告されている。

github.com
[BUG] HTTP 400 'prompt is too long' is misreported to the user as 'usage limit reached' #57296 コンテキストウィンドウ超過(400エラー)が、実際のレート制限(429エラー)と同じ「usage limit reached」表示にまとめられてしまう不具合。「待つ」「プランをアップグレードする」という対応は的外れで、正しくは/compactや/clearで解決する問題。

このIssueが指摘している通り、実際に困るのは「ユーザーは利用制限に達していないのに、待機したりプランのアップグレードを検討したりしてしまう」ことだ。しかも一度200kトークンを超えたセッションは、以降のメッセージすべてで同じエラーを繰り返すため、「待てば直る」と勘違いしたまま何も解決しないまま時間だけ溶ける。

見分け方はシンプルで、エラーメッセージにprompt is too longという文字列と具体的なトークン数(209375 tokens > 200000 maximumのような)が含まれていたら、それはコンテキスト超過であって利用制限ではない。プランのステータスページを確認する前に、まず/contextを叩く方が早い。

自動コンパクションがあるのに、なぜ発生するのか

Claude Codeの公式ドキュメントには、こう書かれている。

Claude Code はコンテキストウィンドウの制限に近づくと自動的にコンパクションを実行するため、コンテキストウィンドウがいっぱいになってもセッションが終了することはありません。

理屈の上ではその通りで、コンテキスト使用率が一定のしきい値に近づくと自動で古いターンを要約し、空き容量を確保する仕組みが用意されている。ただ、実際のGitHub Issueを見ていくと、この自動対策をすり抜けて詰むパターンが存在する。

github.com
[BUG] Github Issue Prompt Too Long #23377 200+メッセージの長時間セッションで突然発生し、以降すべての入力が同じエラーになった実例。12,854行・76MBのセッションファイルに数時間分の作業が閉じ込められ、公式な回復手段がない状態で報告されている。

このIssueで報告されているのは、自動コンパクションが間に合わず、警告もなく突然セッションがロックされたケースだ。報告者いわく「Windowsとプロジェクトのコンテキストを台無しにする、非常に不快なバグ」で、一度発生すると同じセッション内では何を打っても回復しない。セッションデータ自体は~/.claude/projects/[プロジェクト名]/[セッションID].jsonlに残っているので、最悪の場合はそこから必要な情報を手動で拾い直すしかない。

自動コンパクションは「使用率が徐々に上がっていくケース」には強いが、「1回のツール実行やファイル読み込みで一気にトークンが跳ね上がるケース」には対応しきれないことがある、というのが実態に近い。

原因は主に4パターンに分かれる

GitHub Issueを横断して見ていくと、原因はだいたい4つに分類できる。

1. 巨大ファイルの一括読み込み

数千行のログファイルや生成されたJSON、巨大なCSVをそのままReadツールで読ませると、1回のツール結果だけで数万トークンを消費する。offsetlimitを指定して部分読み込みするか、grepで必要な行だけ抽出させた方が安全だ。

2. MCPツールのスキーマ肥大化

意外と見落とされがちなのがこれ。接続しているMCPサーバーが多いと、各ツールのスキーマ定義だけでコンテキストをかなり消費する。

github.com
[BUG] 'Prompt is too long' error on ~50 word prompts in new sessions despite 80K+ free context #15058 新規セッションかつ81,000トークンの空き容量があるにもかかわらず、50語程度の短いプロンプトで拒否された実例。内訳を見るとMCPツールだけで45.0k(22.5%)を占めており、APIコール前のバリデーション処理が関係している可能性が指摘されている。

このIssueでは、コンテキスト全体のうちMCPツールのスキーマだけで22.5%を占めていた。空き容量は表示上まだ40%以上あったにもかかわらず拒否されている点が興味深く、/contextの内訳表示と実際のリクエスト送信タイミングとの間にズレがある可能性を示唆している。使っていないMCPサーバーは思い切って切っておいた方がいい。

Claude Code × MCP で個人開発を自動化した実践構成と月額コストの話
Claude Code × MCP で個人開発を自動化した実践構成と月額コストの話Claude CodeとMCPを組み合わせた個人開発の自動化構成を公開。Filesystem・GitHub・Brave Search・自作MCPの実践的な設定、月額コストの実績、PromptCachingによる節約テクニック、MCPが合う場面・合わない場面の整理。読む →

3. --resumeでの大量履歴読み込み

過去の長いセッションを--resumeで再開すると、その時点の会話履歴がまるごと読み込まれる。前回のセッションが既にコンテキストをかなり使っていた場合、再開直後から上限に近い状態でスタートすることになる。

4. Skills・CLAUDE.mdの肥大化

Skillsは使う時だけSKILL.mdが読み込まれる設計になっているが、頻繁に呼び出すSkillが多いと、実行のたびにコンテキストへの負荷が積み重なる。CLAUDE.mdについても同様で、プロジェクトルールを詰め込みすぎると常駐コストが上がる。

Claude Codeのトークン消費を半減させた10の実践テクニック——MAXプランでも油断するとすぐ上限に達する
Claude Codeのトークン消費を半減させた10の実践テクニック——MAXプランでも油断するとすぐ上限に達するClaude Code MAXプランでもトークン消費は無制限ではない。CLAUDE.mdの最適化、/compact活用、Plan Mode、サブエージェント設計など、実測データ付きで節約術を解説。読む →

実際に詰まった時の復旧手順(決定木)

冒頭の結論をもう少し具体的にする。

① /context を実行
   → 使用率が90%以上 → ②へ
   → 使用率に余裕があるのにエラーが出る → MCPツールの数を確認、不要なものを無効化してから再試行

② /compact に焦点を指定して実行
   例: /compact 現在のプランと変更したファイル一覧だけ残して
   → 通った → 作業続行
   → /compact自体が「Prompt is too long」で弾かれる → ③へ

③ Esc を2回押して数ターン前まで巻き戻す
   → 巻き戻した状態で /compact を再試行
   → それでもダメ → ④へ

④ /clear で会話をリセット
   → 直近の作業内容をメモしてから実行するのが安全
   → 後で /resume を叩けば、過去セッションの一覧からjsonlファイル単位で内容を確認できる

/clearしても会話ログそのものは消えない、という点は覚えておいて損はない。パニックになって闇雲に/clearを連打する前に、最低限「直前まで何をしていたか」だけメモに残しておくと、復旧後の手戻りがかなり減る。

二度と詰まらないための予防策

  • 200+メッセージを超える見込みの長時間タスクは、区切りのいいところで能動的に/compactしておく(自動コンパクションを待たない)
  • 使っていないMCPサーバーはclaude mcp listで洗い出して無効化する
  • ログファイルやCSVはReadで全文読ませず、grepoffset/limitで必要な範囲だけ渡す
  • CLAUDE.mdは定期的に棚卸しして、使っていないルールを削る
  • 関係のないタスクに切り替える時は--resumeで古いセッションを引きずらず、/clearか新規セッションで始める
Claude Codeのコンテキスト管理術 — /compact・/clear・CLAUDE.mdで1Mトークンを使い倒す
Claude Codeのコンテキスト管理術 — /compact・/clear・CLAUDE.mdで1Mトークンを使い倒すClaude Codeのコンテキスト管理を徹底解説。/compact・/clear・/rewindの使い分け、CLAUDE.mdでの永続化、サブエージェント分割による長時間作業の維持方法。コンテキスト汚染で品質が落ちる前にやるべき対策まとめ。読む →
Claude Codeが「JavaScript heap out of memory」で落ちる原因を、GitHub Issueの実例で整理した
Claude Codeが「JavaScript heap out of memory」で落ちる原因を、GitHub Issueの実例で整理したClaude Codeが「FATAL ERROR: JavaScript heap out of memory」でクラッシュする原因を解説。.claude.json肥大化・長時間セッション・--resume・MCP重処理の4パターンをGitHub Issue実例つきで整理し、NODE_OPTIONSでの即効対処から恒久対策まで手順化した。読む →

FAQ

Q. Claude Codeのコンテキストの容量はどれくらい? 標準的なモデルで20万トークン。Opus/Sonnetの一部モデルでは100万トークン(1Mコンテキスト)まで拡張されている。どちらで動いているかは/contextで確認できる。

Q. コンテキストの上限に達すると必ずセッションが壊れる? 理屈の上では自動コンパクションが働くため壊れないはずだが、巨大ファイルの一括読み込みなど「一気にトークンが跳ね上がるケース」では自動対策が間に合わず、Prompt is too longのまま固まることがある。

Q. 「usage limit reached」と表示されたらプランをアップグレードすべき? エラーメッセージに具体的なトークン数(○○ tokens > 200000 maximumなど)が含まれている場合はコンテキスト超過であって、実際の利用制限ではない。プラン変更の前に/contextを確認した方がいい。

Q. /clearすると会話が完全に消える? 表示上の会話はリセットされるが、セッションログ自体は~/.claude/projects/配下のjsonlファイルに残る。/resumeから過去セッションを辿れば内容を確認できる。

まとめ

Prompt is too longは「コンテキストウィンドウが埋まった」だけのシンプルなエラーに見えて、実際は「usage limit reached」への誤表示や、自動コンパクションをすり抜けるケースが絡んで厄介になる。詰まった時は慌てず/context/compact(焦点指定)→巻き戻し→/clear+/resumeの順で対応すれば、大抵は作業を大きく失わずに復旧できる。予防策としては、長時間セッションでの能動的な/compactと、不要なMCPサーバーの整理が地味に効く。

github.com
anthropics/claude-code Issues 同じエラーメッセージで検索すると、他の報告例や最新の修正状況が見つかる。再現手順が明確なら新規Issueとして報告するのもおすすめ。
← 記事一覧に戻る