Claude Codeでコンテキストとメモリを管理する:/compact・CLAUDE.md・トークン予算(2026年)
Claude Codeにおけるコンテキストとは、1つのセッションの作業メモリ(あなたのプロンプト、読み込んだファイル、チャット履歴、ツールの出力)であり、/clearしたりセッションを閉じたりすると消えてしまいます。一方メモリとは、あなたが書くCLAUDE.mdと、Claudeが自分自身のために記録する自動メモリで構成される、セッションをまたいで残る知識です。コンテキストとメモリをうまく管理するとは、次のことを指します。/contextで計測し、60%あたりで早めに/compactして圧縮し、タスクを切り替えるときは/clearでリセットし、重要な決定はすべてCLAUDE.mdに固定して何も「忘れられない」ようにする——これが、長時間のセッションを安定させ、トークン料金を低く抑える方法です。
Claude Codeで長時間・複数ファイルにわたるセッションを使ったことがあれば、おそらくこんな経験があるでしょう。順調に進んでいたのに、20分前に固めたはずの決定をClaudeが「忘れ」始めたり、ターミナルにコンテキストがもうすぐ満杯だという警告が出たり。この記事では、多くのガイドがバラバラに扱っている3つの要素——セッション内のコンテキスト、セッションをまたぐメモリ、トークン予算——を、1つの実践的なワークフローにまとめます。まったくの初心者なら、まず入門ガイドを読んでください。ただ、毎日複数ファイルのセッションを回している人には、この記事がぴったりです。
Claude Codeのコンテキストとメモリ:何が違うのか?
この2つの言葉はよく同じ意味で使われますが、まったく別のものです。そして両者を混同することこそが、Claude Codeでのコンテキスト管理における多くのトラブルの元凶です。コンテキスト(コンテキストウィンドウ)とは、Claudeが今この瞬間に「見えている」短期メモリのことです。あなたの質問、読み込んだファイルの中身、会話履歴、実行したツールの結果、そしてセッション開始時に読み込まれたCLAUDE.mdが含まれます。これは有限で、セッションを終了したり/clearと入力したりすると消えてしまいます。
メモリ(Claude Codeの永続的なメモリ)は、セッションをまたいで残ります。種類は2つあります。1つはCLAUDE.md——プロジェクトについてClaudeに伝えるためにあなたが書くファイル。もう1つは自動メモリ——Claudeが自分で学んだことを保存する場所です。重要なのは、メモリはコンテキストの中に存在するのではなく、新しいセッションが始まるたびにコンテキストへ再読み込みされるという点です。
| 基準 | コンテキスト(セッション内) | メモリ(セッション間) |
|---|---|---|
| 保持する内容 | プロンプト、読み込んだファイル、チャット履歴、ツール出力、読み込まれたCLAUDE.md | CLAUDE.md(あなたが書く)+自動メモリ(Claudeが書く) |
| 持続する期間 | セッション内のみ。/clearすると、または閉じると失われる | ディスクに保存され、新しいセッションのたびに再読み込みされる |
| 誰が管理するか | 作業を進めるにつれて自動的に埋まっていく | あなたが意図的に書く/Claudeが記録する |
| コンテキストが満杯のとき | /compactか/clearが必要 | 影響なし——引き続き再読み込みされる |
もう二度と混同しないための一言はこうです。コンテキストはClaudeが今考えていること、メモリはClaudeがいつも知っていることです。
なぜClaude Codeのセッションは毎回空のコンテキストから始まるのか?
多くの人は、Claudeが同僚のように昨日の会話を「覚えている」と何となく思い込んでいます。ですが、そうではありません。そもそも言語モデルには長期メモリが組み込まれていません——Claudeは実際には会話を覚えていないのです。新しいセッションはどれも、まっさらな空のコンテキストウィンドウです。「自分のプロジェクトを覚えている」という感覚は、実はClaude Codeが各セッションの開始時にメモリ(CLAUDE.mdと自動メモリ)を自動的に再読み込みしていることによるもので、モデルが何かを思い出しているわけではありません。
メモリが存在するのは、まさにこのためです。メモリは、リセットのたびに「記憶を失う」コンテキストウィンドウを補う橋渡し役なのです。これを理解すれば、Claudeが自力で覚えてくれることを期待するのをやめ、覚えておくべきことを意図的に書き留めるようになります。セッションごとにコンテキストウィンドウが新しくなる挙動は、コンテキストウィンドウに関するClaude Code公式ドキュメント(2026-08-20アクセス)で説明されています。
実務上の帰結はこうです。ファイルに書き出されず、チャットの中だけに存在する決定は、消えてしまうリスクがあります——セッションが終わるとき、あるいはコンテキストが圧縮されればもっと早く。この点は/compactのセクションで改めて取り上げます。
/contextとトークンの状態でコンテキストを計測する
計測できないものは管理できません。まず覚えるべきコマンドは/contextです。セッション中にこれを入力すると、Claude Codeは現在読み込まれているMemory files(どのCLAUDE.mdがコンテキストに入ったか)と、コンテキストウィンドウの使用率を一覧表示します。
/context
これは、あなたのCLAUDE.mdが本当にコンテキストに入ったかどうかを確認する、もっとも信頼できる方法です——推測せず、Memory filesの一覧を見てください。さらに、ターミナルのステータスラインには、使用中のトークンの割合がリアルタイムで表示されます。コンテキストが高いしきい値に達すると、セッションが止まらないよう、Claude Codeが自動的に圧縮(auto-compact)します。
| コンテキスト使用率 | 状態 | 対処 |
|---|---|---|
| < 60% | 安全 | そのまま作業を続ける |
| 60-80% | 要注意 | 積極的に/compactする。タスクを切り替える直前なら/clearする |
| ~80-83% | 自動圧縮が作動 | Claude Codeが自分で圧縮する——ただし要約の質を保つには自分で先に圧縮すべき |
自動圧縮のしきい値はClaude Code公式ドキュメント(2026-08-20アクセス)によればおよそ80-83%ですが、この数値はバージョンによって変わる可能性があります。
/compact——コンテキストを正しく圧縮する
これは、この記事でもっとも重要なコマンドです。/compactは現在の会話全体を読み込み、凝縮した要約を作り、古い会話をその要約で置き換えます。その結果、作業の流れを保ったまま、大部分のトークンを解放できます——Claudeはあなたが何をしているかを、圧縮された形で引き続き把握しています。
# automatic compaction
/compact
# compact with instructions on what to keep
/compact keep the DB schema decisions and the files I edited, drop the debug logs
いつ圧縮すべきか? 私の実践ルールはこうです。60%あたりで積極的に、90%まで待たない。会話がまだ「きれい」なうちに早めに圧縮したほうが、コンテキストがすでにぎゅうぎゅうになってから無理に圧縮するより、はるかに良い要約になります——その段階ではClaudeは多くを切り捨てざるを得ず、要約は細部を取りこぼしがちです。/compact <instructions>で残したいものを明示すると、質が大きく向上します。
⚠️ 限界に関する重要な注意:圧縮は不可逆(ロスあり)です。会話の中だけに存在し、ファイルに書き出されていないものは、圧縮後に永久に失われることがあります。これは、作業の途中で決定を「なくす」原因となる、実際に起こる不具合です。下の表は、何が残り、何が残らないかを示しています。
/compact後も残る | 失われる/自動で再読み込みされない |
|---|---|
プロジェクトルートのCLAUDE.md(ディスクから再注入される) | サブディレクトリ内のネストされたCLAUDE.md |
自動メモリのMEMORY.md(ファイルの先頭が再読み込みされる) | パススコープのルール(paths:を宣言)。対象ファイルを開いていない状態になった後 |
.claude/rules/内のスコープなしのルール | チャットで言っただけで、ファイルに書き出していない指示 |
要点を一言で。圧縮する前に、Claudeに「重要な決定をCLAUDE.mdに書き込んで」と伝え、それから/compactを実行しましょう。ディスク上にあるものは安全です。
/clearと/compact——どちらを使うべきか?
この2つのコマンドは混同しやすいですが、活躍する場面はまったく違います。手短に言えば、同じ作業を続けるときは/compact、別のことに切り替えるときは/clearです。
| 観点 | /compact | /clear |
|---|---|---|
| 何をするか | 会話を要約に圧縮し、流れを保つ | 会話を丸ごと消去し、空のコンテキストから始める |
| 使う場面 | 同じタスクだがコンテキストが満杯 | 無関係なタスク/プロジェクトへの切り替え |
| 以前のコンテキストを保持するか? | はい(要約として) | いいえ |
| CLAUDE.md+自動メモリ | 引き続き再読み込みされる | 引き続き再読み込みされる |
覚えておきたいのは、/clearでも/compactでも、セッションをまたぐメモリ(CLAUDE.mdと自動メモリ)は引き続き再読み込みされる、という点です——つまり失われるのは一時的な会話だけで、プロジェクトの「基礎知識」は失われません。タスクを切り替えるときは、ためらわず/clearしましょう。無関係な古い会話を抱え込むのは、トークンを浪費し、Claudeの気を散らすだけです。
CLAUDE.md——あなた自身が書く長期メモリ
CLAUDE.mdは、あなたが直接コントロールできる、もっとも強力なメモリツールです。毎セッション、もっとも広いスコープからもっとも狭いスコープへの順で、自動的にコンテキストに読み込まれます。Claude Codeは複数の階層のCLAUDE.mdを読み込み、それらをマージします。
| 階層 | 場所 | 用途 |
|---|---|---|
| 管理ポリシー | 組織/管理者が設定 | マシン/チーム全体に適用されるポリシー |
| ユーザー | ~/.claude/CLAUDE.md | 個人の設定。すべてのプロジェクトに適用 |
| プロジェクト | ./CLAUDE.md | プロジェクトの規約。gitにコミットしてチーム全体で使う |
| ローカル | ./CLAUDE.local.md | 個人的なメモ。コミットしない |
広い順から狭い順へという読み込み順序は、より狭い階層(プロジェクト、ローカル)がより広い階層に追記できることを意味します。もっとも手早く始める方法は、/initを実行することです——Claude Codeがコードベースをスキャンし、プロジェクト用の出発点となるCLAUDE.mdを生成してくれます。
/init
効果的なCLAUDE.mdの書き方:短く——およそ200行以内に保ちましょう。長いファイルは毎セッションのコンテキストを食うだけでなく、遵守率も下げます(指示が多すぎると、Claudeは優先順位をつけにくくなります)。肥大化したコンテキストファイルがなぜ20%も余計にコストを生むのかについて、実測に基づく分析があります。具体的で検証可能なことを書きましょう。「2スペースのインデントを使う」は「きれいに整形する」に勝ります。長い内容は@pathで別ファイルをインポートし、文脈固有の規約はパススコープの.claude/rules/(globに一致するファイルを開いたときだけ読み込まれる)に入れて、コンテキストを節約しましょう。このファイルの構成をさらに深く知りたい場合は、きちんとしたCLAUDE.mdファイルの書き方のガイドを参照してください——詳細はそちらの記事が担っているので、ここでは繰り返しません。
パススコープのルールの簡単な例です。.claude/rules/api-conventions.mdというファイルに、読み込みタイミングを制限するYAMLフロントマターを付けたものです。
---
paths:
- "src/api/**/*.ts"
---
Use camelCase for function names; always validate input with Zod.
paths:フィールドを持たないルール(スコープなし)は、ルートのCLAUDE.mdと同じ優先度で毎セッション読み込まれます。一方スコープ付きのルールは、globに一致するファイルを開いたときだけ読み込まれます——だからこそ、すべてをCLAUDE.mdに詰め込むよりもコンテキストを節約できるのです。.claude/rules/の完全なセットアップ(フォルダ構成、ユーザーレベルのルール、読み込み優先度)については、CLAUDE.mdガイドを参照してください。
自動メモリ——Claudeが自力でセッションをまたいで覚えるとき
これは比較的新しい機能(2026年)で、古いガイドの多くは触れていません。あなたが書くCLAUDE.mdとは別に、Claude Codeは自分自身で、作業中に学んだことをプロジェクト固有のメモリフォルダ~/.claude/projects/<project>/memory/に保存できます。
その中で、MEMORY.mdはインデックスの役割を果たします。ファイルの先頭200行、または先頭25KB——どちらか早いほうまで——が毎セッション読み込まれ、その他のトピックファイルは必要なときだけオンデマンドで読み込まれます。この機能はデフォルトで有効です。/memoryコマンドで管理でき(autoMemoryEnabledオプションで切り替え)、Claudeが学びを書き込んだり思い出したりすると、「Saved N memories」/「Recalled N memories」といった通知が表示されます。
/memory
違いをはっきりさせておきましょう。CLAUDE.mdはあなたが書くもの(指示——Claudeにどう働いてほしいか)であり、自動メモリはClaudeが書くもの(学び——拾い上げたこと)です。この2つは互いを補い合います。自動メモリの仕組みと読み込みの上限は、Claude Codeの公式メモリドキュメント(2026-08-20アクセス)にまとめられています。
トークン予算——より安く、より持続的に作業する
ここは、競合するガイドがほとんど空白のまま残している部分です。新しいモデルはコンテキストを意識します。残りトークン数を把握し、コンテキストが少なくなるにつれて自動的により簡潔に答え、ツールをより控えめに使います。とはいえ、運任せにしてはいけません——以下の6つのルールが、セッションを安く、かつ安定させます。
| # | ルール | 理由 |
|---|---|---|
| 1 | 約60%で/compact、90%まで待たない | 早い要約は質が高く、ロスが少ない |
| 2 | 1セッションを入力トークン<約12万に抑える | 長すぎるセッションはノイズが増え、コストもかさむ |
| 3 | 重い読み込みはsubagentに委任する | subagentは自前のコンテキストを持ち、メインのコンテキストを「食わない」 |
| 4 | タスクの分割——フェーズに分ける | 各フェーズがすっきりしたセッションになり、圧縮/クリアしやすい |
| 5 | CLAUDE.mdを無駄なく保つ | 毎セッション読み込まれるトークンを節約できる |
| 6 | CLAUDE.md内の人間向けメモにはHTMLコメントを使う | コメントはコンテキストから除外されるので、トークンを消費しない |
ルール3は強調する価値があります。大きなディレクトリや長いログをClaudeに読ませたいときは、メインのセッションに直接読み込むのではなく、subagentに渡しましょう。subagentは別のコンテキストで作業し、結論だけを返します——メインのコンテキストは軽いままです。こうした作業の組み立て方は、subagentでコンテキストを分離するという記事で詳しく扱っています。ルール6のコメントについては、<!-- -->で囲んだCLAUDE.md内の人間向けメモはClaudeのコンテキストに一切届かないので、トークンを使わずに自由に注釈を書けます。
コンテキストとメモリ管理のワークフロー(実践チェックリスト)
すべてをまとめて、毎日実行できる6ステップのルーティンにしましょう。
- CLAUDE.mdを生成する:
/initを実行し、コードベースから出発点となるファイルを生成する。 - CLAUDE.mdを削る:200行以内に保ち、具体的で検証可能にする。文脈固有の規約は
.claude/rules/に移す。 - 監視する:長いセッション中は定期的に
/contextと入力し、ステータスラインのトークン%に目を配る。 - 早めに圧縮する:60%あたりで
/compactし、残すものを指示する(たとえば、決定+編集したファイルを残す)。 - タスク切り替え時にリセットする:無関係なタスクに移るときは
/clearする。 - 決定を固定する:圧縮やセッション終了の前に、Claudeに「この決定をCLAUDE.mdに反映して」と伝え、圧縮で何も失われないようにする。
既製キット(AgentKit)で作業を加速する
プロジェクトごとに、まともなCLAUDE.md、.claude/rules/、subagentの設定を書くのは、それなりの時間がかかります。もっと速く進めたいなら、AgentKitバンドル——現在149ドル(元198ドル)のような既製キットには、サンプルのCLAUDE.md/rulesに加え、自前のコンテキストを持つsubagentが同梱されています——これは、まさに上記のトークン予算の原則にかなうものです。検討したい方向けに、AgentKitとは何か、そして価値があるのかを詳しく見ています。ただしコンテキスト管理については、キットを使うかどうかにかかわらず、上記の/context、/compact、/clearコマンドが土台であり続けます。
よくある間違いと、その避け方
正直なところ、これらは私も——そして多くの人も——もっともつまずきやすいポイントです。
/compactの後で決定が失われる:チャットで言っただけで、ファイルに書き出していないから -> 圧縮する前に、重要な決定は必ずCLAUDE.mdに書き込む。- 肥大化したCLAUDE.md:長すぎるファイルはトークンを無駄にし、遵守率も下げる -> パススコープの
.claude/rules/に分割する。 - 圧縮後、ルール/ネストされたCLAUDE.mdが自動で再読み込みされない:パススコープのルールやサブディレクトリの
CLAUDE.mdは自分では再読み込みされない -> globに一致するファイルを開き直して再有効化する。 - 複数のCLAUDE.mdファイル間で指示が矛盾する:階層どうしが食い違うと、Claudeが意図しない選び方をすることがある -> user/project/localの間で一貫性を確認する。
ほかの問題に出くわしたら、Claude Codeのよくあるエラーを直すまとめを参照してください。そして、Claude Codeが各要素をどう組み合わせているか、その全体像を理解するには、skill、subagent、hook、MCPの違いについての記事をご覧ください。
よくある質問(FAQ)
/compactは/clearとどう違いますか?
/compactは会話を凝縮した要約に圧縮し、作業の流れを保ちます——同じタスクを続けているがコンテキストが満杯のときに使います。/clearは会話を丸ごと消去し、空のコンテキストから始めます——別のタスクに切り替えるときに使います。どちらもCLAUDE.mdと自動メモリは再読み込みされます。
自動圧縮は何%で作動しますか?
公式ドキュメントによれば、自動圧縮はコンテキスト使用率が約80-83%になると作動します。それでも、ロスの少ない質の高い要約のために、60%あたりで早めに自分から/compactすべきです。正確なしきい値はバージョンによって変わる可能性があります。
CLAUDE.mdは/compact後も残りますか?
はい。プロジェクトルートのCLAUDE.mdはディスクから再注入されるので、圧縮後も常に存在します。ただし、サブディレクトリ内のネストされたCLAUDE.mdやパススコープのルールは自動では再読み込みされません——再有効化するには、一致するファイルを開き直す必要があります。
いつ/compactすべきですか?
積極的に、コンテキスト使用率が約60%のときに——90%まで待たないでください。会話がまだ「きれい」なうちに早めに圧縮すると、より良い要約が得られます。指示も加えましょう。たとえば/compact keep the schema decisions and edited filesのようにすれば、Claudeはあなたが必要とするものを正確に残します。
自動メモリはどこに保存されますか?
Claude Codeは学びをプロジェクト固有のメモリフォルダ(~/.claude/projects/<project>/memory/)に保存し、MEMORY.mdをインデックスとします。その先頭200行または25KBのうち、どちらか早いほうまでが毎セッション読み込まれます。デフォルトで有効で、/memoryコマンドで切り替え・確認できます。正確なパスはバージョンごとに実際に確認してください。
Claude Codeでトークンを減らすにはどうすればよいですか?
約60%で/compactして早めに圧縮し、CLAUDE.mdを無駄なく保ち(< 200行)、重い読み込みはsubagentに委任してメインのコンテキストを食わせず、タスクをフェーズに分け、作業を切り替えるときは/clearします。これらが、もっとも効果的なトークン予算のレバーです。
まとめと次のステップ
ワークフロー全体を一言で。/contextで計測 -> 約60%で/compactして早めに圧縮 -> タスクを切り替えるときは/clear -> 決定をCLAUDE.mdに固定し、学びは自動メモリに任せます。3つの要素——コンテキスト、メモリ、トークン予算——を使いこなせば、長いセッションは「忘れる」ことがなくなり、目に見えて安くなります。次のステップ:メモリを本当に活かすためにきちんとしたCLAUDE.mdファイルの書き方を学び、アーキテクチャのレベルで最適化したくなったらコンテキストエンジニアリングとは何かをさらに深掘りしましょう。