大きなプロジェクトで Claude Code を使い続けていると、ある時点で「コンテキスト上限に近づいています」という警告が表示されます。このメッセージが出ると、以降の応答が不安定になったり、指示の内容を「忘れ」始めたりすることがあります。
どう対処すればいいか迷った経験は私にもあります。最初は「とにかく新しいセッションを始める」という力技しか知らなかったのですが、実際に試してきた方法を整理すると、状況に応じた5つのアプローチに分類できました。
なぜコンテキスト上限が問題になるのか
Claude のコンテキストウィンドウには上限があります。長時間の作業セッションでは、過去の会話履歴、読み込んだファイルの内容、ツールの実行結果がすべてコンテキストに積み重なっていきます。上限に近づくと2つの問題が起きます。
一つ目は精度の低下です。コンテキストが大きくなると、モデルは「全体を見渡す」のが難しくなり、最初に与えた指示や重要なコードの内容が薄れてきます。
二つ目は完全な停止です。上限を超えると、Claude Code はそれ以上の作業を受け付けなくなります。
アプローチ1: /clear でコンテキストをリセットする
最もシンプルな対処は /clear コマンドです。現在の会話履歴を削除してコンテキストを空にします。
# Claude Code セッション内で実行
/clearただし、これで失われるのは「会話の流れ」だけです。リポジトリの状態は変わりません。ちょうど「長い打ち合わせを一度締めて、改めて今どこにいるかを確認する」ようなイメージです。
/clear の後に「今、私たちが取り組んでいること」の要約を渡すと、作業を効率よく引き継げます。
/clear
今の状況をまとめます:
- src/components/Auth.tsx のリファクタリング中
- 認証フローを Context API からカスタムフックに移行する作業
- 現時点で useAuthState.ts は完成、Auth.tsx への組み込みが残っている
アプローチ2: /compact で要約してコンテキストを圧縮する
/compact は会話履歴を圧縮して、コンテキストの使用量を減らしながら作業を継続できるコマンドです。
/compact/clear との違いは、過去のやり取りを「要約」として保持する点です。完全に消えるわけではないので、作業の流れを維持しながらコンテキストを減らしたいときに適しています。
長いリファクタリング作業の途中でこれを使うと、「ここまでに決定したこと」が要約として残るので、作業の一貫性を保ちやすいです。
アプローチ3: CLAUDE.md に「常に参照すべき情報」を外出しする
コンテキストを圧迫する大きな原因の一つは、毎回のプロンプトに同じ背景情報を貼り付けることです。プロジェクトのルール、使っているライブラリのバージョン、命名規則——これらを毎回説明していると、あっという間にトークンが消費されます。
CLAUDE.md ファイル(または .claude/ ディレクトリ内の設定ファイル)に恒久的な情報を書いておくと、Claude Code がセッション開始時に自動的に読み込んでくれます。
# CLAUDE.md の例
## プロジェクト構成
- フレームワーク: Next.js 16 (App Router)
- 言語: TypeScript strict mode
- 状態管理: Zustand
- スタイリング: Tailwind CSS + CSS Modules
## 命名規則
- コンポーネント: PascalCase
- フック: use + PascalCase
- 型: PascalCase、プレフィックス T は使わない
## 絶対にやらないこと
- any 型の使用
- console.log を本番コードに残す一度書いてしまえば、毎回のプロンプトに含める必要がなくなります。「前提は CLAUDE.md を参照してください」の一言で済むようになります。
アプローチ4: 作業を「スコープ」で分割する
大きなリファクタリングや機能追加を一気にやろうとすると、関係するファイルをすべて読み込む必要が生じ、コンテキストが急速に膨らみます。
私が効果的だと感じているのは、作業を「スコープ」単位で区切ることです。たとえば、10 ファイルにまたがるリファクタリングを行う場合:
# ① ファイルを分割してセッションを分ける例
# セッション1: 型定義ファイルの更新
claude "src/types/ ディレクトリ内の型定義を新しい API レスポンス形式に合わせて更新してください"
# セッション2(/clear 後): サービス層の更新
claude "src/services/ の API クライアントを型定義に合わせて更新してください"
# セッション3(/clear 後): UI コンポーネントの更新
claude "src/components/ を新しいサービス層に合わせてください"各セッションが完結した時点でコミットしておくと、後で「どこまで終わったか」が git log で確認できるので安心です。
アプローチ5: --files で読み込むファイルを絞る
Claude Code にはセッション開始時に読み込むファイルを指定する方法があります。プロジェクト全体ではなく、今の作業に関係するファイルだけを渡すことで、最初から無駄なコンテキスト消費を抑えられます。
# 関係するファイルだけを指定して起動
claude --files src/components/Auth.tsx src/hooks/useAuthState.ts
# または claude_code の @ファイル指定
# セッション内で
@src/components/Auth.tsx このファイルのエラーハンドリングを改善してください巨大なコードベースで「全体を把握してほしい」という場面もありますが、ピンポイントのバグ修正や機能追加なら、関係ファイルだけを渡す方が精度も上がります。
どのアプローチを選ぶか
状況によって組み合わせが変わりますが、私のざっくりした使い分けはこうです。
「今のセッションを継続したい → /compact」「一度整理して再スタートしたい → /clear + 要約を渡す」「長期プロジェクトで毎回同じ前提を伝えている → CLAUDE.md に外出し」「大きな作業に臨む前 → スコープを先に分割してから始める」
コンテキスト上限は制約ではありますが、それを意識した作業の区切り方を身につけると、逆に大きな作業を安定して進められるようになります。まずは CLAUDE.md の整備から試してみていただければと思います。