Claude Media
Claudeの記憶の仕組み — コンテキストウィンドウとメモリ機能・学習の違い

Claudeの記憶の仕組み — コンテキストウィンドウとメモリ機能・学習の違い

「Claudeは会話を覚えている」という理解は半分だけ正しい表現です。コンテキストウィンドウ・メモリ機能・学習という3つの層を区別し、compactや新セッションで忘れる理由と、混同が生む誤設計を構造から説明します。

Claudeの記憶は、寿命の違う3つの層でできています。会話の間だけ生きるコンテキストウィンドウ、ファイルやエントリとして残るメモリ機能、モデルの重みに焼き込まれた学習です。「覚えている」「忘れた」という体験談の多くは、この3層のどれかを別の層と取り違えたときに生まれます。この記事は、忘れたと感じた場面から原因の層をたどれるように組んであります。標準のメモリとは別に外部の永続メモリを持たせたい場合は、ClaudeとMem0を連携する方法が参考になります。

3つの層の寿命と編集可否

層実体寿命ユーザーが直接編集できるか
コンテキストウィンドウ実体いまの会話に読み込まれたテキスト寿命セッションの間だけユーザーが直接編集できるかできない(消すか要約するかのみ)
メモリ機能実体ディスク上のファイル・保存されたエントリ寿命明示的に消すまでユーザーが直接編集できるかできる
学習実体モデルの重み寿命モデルの世代ごとに固定ユーザーが直接編集できるかできない

コンテキストウィンドウは、Claudeがそのセッションについて知っているすべてを保持する作業領域です。あなたの指示も、読んだファイルも、Claude自身の応答も、ここに載っています。メモリ機能はその外側にあり、セッションをまたいで知識を運ぶ仕組みです。学習はさらに外側で、会話の内容がここに届くことは原則ありません。

「さっきの話を忘れた」はコンテキストの問題

会話が続いているとき、Claudeが過去の発言を覚えているように見えるのは、モデルが状態を保持しているからではありません。リクエストのたびに、それまでの会話全体がコンテキストウィンドウとしてモデルに渡し直されているからです。Claude Codeでは、CLAUDE.mdや自動メモリ、MCPのツール名がセッション開始時に読み込まれ、以降のすべてのリクエストに載り続けます。

だからコンテキストウィンドウは記憶というより机の上に近い実体です。広さには上限があり、載っている量が増えるほど圧迫されます。大規模コードベースでの圧迫対策はClaude Codeのコンテキスト管理で扱っています。どの対策も、机に載せる量を減らすか、机を片付けるかの二択です。

100万トークンのウィンドウを持つモデルでも、この性質は変わりません。Sonnet 5.5とFableのモデルは標準でその幅を持ち、環境変数CLAUDE_CODE_DISABLE_1M_CONTEXT=1を設定すると200Kのウィンドウに抑えられます。Opus 4.6以降は[1m]付きのモデルを選んだときに100万トークンになります。広いのは机であって、セッションが終われば片付けられる点は同じです。実務での使いどころはClaude 1Mコンテキストの実務活用にあります。

compactのあとに指示が消えたとき、何が戻るのか

コンテキストウィンドウが満杯に近づくと、Claude Codeは会話履歴を要約して圧縮します(コンパクション)。起きているのは記憶の喪失ではなく、原文から要約への置き換えです。要約に採用されなかった細部は、次のリクエストからモデルに渡りません。

何が残るかは、その情報がどう読み込まれたかで決まります。

読み込み方で決まる

compactのあと、情報はどうなるか

  • ディスクから再注入される

    プロジェクト直下のCLAUDE.md、パス指定のないルール、自動メモリ、planモードでClaudeが書いた計画です。要約の出来に左右されません。

  • 読み直したときに戻る

    サブディレクトリのCLAUDE.mdと、paths:付きのルールです。該当ファイルをClaudeが再び読むまで、会話履歴の中で要約に回ったままです。

  • 要約に混ざる

    会話の中でだけ伝えた指示と、フックが以前に足した文脈です。要約に採用されるかどうかは、そのときの要約次第です。

上の分類のほかに、直前まで読み書きしていたファイルは最大5つまで、更新の新しい順に読み直されます。5,000トークンを超えるファイルは、中身ではなくReferenced fileというパス参照だけで戻ります。呼び出し済みのスキルは、1つあたり5,000トークン、全体で25,000トークンを上限に再注入され、古いものから落ちます。SessionStartフックはcompactを条件にして走らせることもできます。発火条件と要約後に残る情報の詳細はcompactの発火条件と要約後に残る情報にまとめています。

指示が消えたと感じたときは、次の順で原因を絞れます。

手順

消えた指示の切り分け

  1. 1

    その指示をどこで伝えたかを思い出す

    会話の中だけで言った指示なら、要約に回った可能性が最も高い場面です。

  2. 2

    置き場所を移す

    会話だけの指示はCLAUDE.mdに書きます。サブディレクトリのCLAUDE.mdやパス指定ルールに入れた必須の指示は、プロジェクト直下のCLAUDE.mdへ移すか、paths:を外します。

  3. 3

    読み込まれているかを確かめる

    /contextを実行し、Memory filesの一覧にCLAUDE.mdが載っているかを見ます。載っていなければ、Claudeには見えていません。

    /memoryはメモリファイルの置き場所を一覧する入口です。まだ作っていないCLAUDE.mdの置き場所も並ぶので、一覧に出ていても読み込まれた証拠にはなりません。

「昨日の説明を忘れた」は新しいセッションの仕様

Claude Codeのセッションは、毎回まっさらなコンテキストウィンドウから始まります。前のセッションの会話は、翌日のセッションのコンテキストには存在しません。昨日あれだけ説明したのにという感覚は人間の記憶モデルの投影で、Claudeの側には昨日がそもそも届いていないのです。

インストール済みのv2.1.287でclaude --helpを見ると、この区別がオプションの形で現れます。

$ claude --version
2.1.287 (Claude Code)
 
$ claude --help   # 抜粋
  -c, --continue          Continue the most recent conversation in the current directory
  --bare                  Minimal mode: skip hooks ..., attribution, auto-memory,
                          background prefetches, keychain reads, and CLAUDE.md auto-discovery.
  --no-session-persistence  Disable session persistence - sessions will not be saved to disk
                          and cannot be resumed (only works with --print)

--continueは直近の会話を続けるための入口で、新しいセッションを始めるのとは別の操作です。--bareは自動メモリとCLAUDE.mdの自動探索を飛ばす最小構成で、メモリ層が効かない状態を意図的に作れます。メモリなしでClaudeがどう振る舞うかを比べたいときの対照になります。--no-session-persistenceは--printとの組み合わせでのみ働き、会話をディスクに残さないため、あとから再開できません。

会話の記録そのものも、ローカルでは30日で消えます。セッションのトランスクリプトは~/.claude/projects/に平文で保存され、既定の保持期間は30日で、cleanupPeriodDaysで変えられます。一方、自動メモリのファイルはこの掃除の対象外です。同じprojects配下に並んでいても、会話の記録とメモリは寿命の扱いが別です。

メモリ機能 — Claude Codeとclaude.aiは別の仕組み

「メモリ」という名前は2つの製品に付いていて、実体も適用範囲も別です。Claude Codeの自動メモリはマシンローカルのファイルで、クラウド側のclaude.aiのメモリとは保存場所が別です。

くらべる

2つのメモリの違い

ローカルのファイル

Claude Codeの自動メモリ

Claudeが書く索引MEMORY.mdとトピックごとのファイルが、リポジトリごとに~/.claude/projects/<project>/memory/へ保存されます。マシンローカルで、他のマシンやクラウド環境とは共有されません。同じリポジトリのworktreeやサブディレクトリは1つのメモリディレクトリを共有します。

アカウントのエントリ

claude.aiのメモリ

設定のMemoryにトピックとして一覧され、読み・編集・削除ができます。Web・Claude Desktop・モバイルのチャットに効きます。クラウドで動くCoworkとは共有され、ローカルで動くCoworkでは使われません。

Claude Codeの自動メモリ

CLAUDE.mdがあなたの書く指示で、自動メモリはClaudeが自分のために書くメモです。メモにはuser(役割や好み)、feedback(訂正と、確認したやり方)、project(コードや履歴から導けない進行中の事情)、reference(外部の情報の在りか)の4種類があります。コードから導けるアーキテクチャーやファイルパスは、Claudeが保存を省きます。

毎セッション何かを保存するわけでもありません。将来の会話で役立つかどうかをClaudeが判断します。読み込みの上限にも注意が要ります。索引のMEMORY.mdは先頭200行または25KBの早いほうまでしか、セッション開始時に載りません。トピックのファイルは起動時には読まれず、必要になったときにClaudeがファイルツールで読みにいきます。

自動メモリは、ローカルのセッションでは既定で有効です(セルフホスト環境では既定でオフ)。/memoryのトグルで切り替えられ、特定のプロジェクトだけ止めるには、そのプロジェクトの設定でautoMemoryEnabledをfalseにします。環境変数ならCLAUDE_CODE_DISABLE_AUTO_MEMORY=1です。保存先を変えたいときはsettings.jsonのautoMemoryDirectoryに絶対パスか~/始まりのパスを指定します。三層構造の使い分けはClaude Code memoryの三層構造で扱っています。

CLAUDE.mdに足す合図は、Claudeが同じ間違いを2度したときや、同じ訂正を前回のセッションでも入力したときです。コードレビューでそのリポジトリの前提を指摘されたときも該当します。ブロックレベルのHTMLコメントはコンテキストに注入される前に取り除かれるため、人間向けの注記にトークンを使いません。リポジトリがAGENTS.mdを使っている場合は、作業ディレクトリとその上位にCLAUDE.md(CLAUDE.local.mdを含む)がないときだけ、既定で読まれます。

claude.aiのメモリ

claude.aiのメモリは、会話の終了後にまとめて要約するのではなく、チャットの最中にトピック単位で保存されます。「覚えて」と頼んで直接保存させることもできます。Free・Pro・Maxでは既定でオンです。TeamとEnterpriseは、オーナーが組織で許可したうえで、各メンバーが自分で有効にします。オーナーが組織でメモリをオフにすると、全員の既存エントリがその場で削除されます。HIPAA、公共部門、カスタムのデータ保持契約の組織では、メモリは利用できません。

過去のチャットを検索する機能は、メモリとは別の仕組みです。Pro・Max・Team・Enterpriseで使え、検索はRAG(検索拡張生成)で行われ、会話の中にツール呼び出しとして表示されます。プロジェクト内の会話は、そのプロジェクトの中だけが検索範囲です。

メモリを止める方法は3段階あります。

  • 1つのチャットだけ止める: 新規チャットの「+」メニューで「Memory」をオフにし、最初のメッセージを送ります。送信後は変更できません。チャット履歴には残り、ほかのチャットからの検索にも出ます
  • シークレットチャット(ゴーストアイコン): 履歴にもメモリにも残らず、過去チャットの検索にも出ません
  • アカウント全体: 設定のMemoryでトグルを切ると、一時停止とリセットを選べます。リセットはプロジェクトメモリを含む全メモリの完全削除で、取り消せません

メモリに保存されないものもあります。健康・信条などの機微な話題は既定で保存されず、設定で含めることを選べます。政府発行のID番号、犯罪歴、金融口座番号、在留資格は、頼んでも保存されません。他のAIサービスで積み上げた好みや文脈は、import memory機能でコピー&ペーストにより移行できます。

メモリは入力であって、強制される設定ではない

2系統に共通する性質が2つあります。実体はどちらも読める形のデータで、ユーザーが監査・編集できます。そしてメモリは、次のセッションのコンテキストに注入される入力であって、動作を保証する設定ではありません。公式ドキュメントはCLAUDE.mdを「コンテキストであって強制される構成ではない」と位置づけ、特定の操作を確実に止めたいときはPreToolUseフックを使うよう案内しています。

学習 — 会話してもモデルは賢くならない

3層目の学習は、最も誤解が多い層です。どれだけ丁寧に訂正しても、いま会話しているモデルの重みはその場では一切変わりません。次のターンで振る舞いが直るのは、訂正がコンテキストウィンドウに載ったからで、モデルが学習したからではありません。

会話データが学習に使われるかどうかは、契約と設定の問題です。無料・Pro・Maxプランでは、データをモデル改善に使うことを許可するかを設定で選べます。許可した場合に使われる先は将来のClaudeモデルの訓練であり、いま応答しているモデルには反映されません。Team・Enterprise・API経由の利用は商用規約の対象です。商用規約のもとでClaude Codeに送ったコードとプロンプトは、顧客が自らデータの提供を選ばない限り、生成モデルの訓練に使われません。

混同が生む5つの誤設計

3層の取り違えは、体感の混乱だけでなく運用の設計ミスに直結します。よくある型は次の5つです。

  1. 重要な決定を会話の中にだけ置く — コンテキスト層を永続層と誤認した形です。残したい決定はCLAUDE.mdかメモリへ書き出します
  2. 前のセッションの説明を前提に指示する — 「昨日の方針で」が通じるのは、その方針がファイルに残っている場合だけです
  3. 1つの会話に無関係な作業を詰め込む — 古い会話は次の作業に必要なファイルの居場所を奪い、毎リクエストのトークンとして課金され続けます。作業の切れ目での/clearが公式の推奨です
  4. 訂正すれば今後は直ると期待する — 同じ訂正を毎セッション繰り返しているなら、それはCLAUDE.mdに書く1行です
  5. メモリに書けば強制されると考える — 「絶対にやらない」を保証したい操作は、指示ではなくhooksや権限ルールで止めます

よくある質問

会話を学習に使わせない設定はどこにありますか

無料・Pro・Maxプランではclaude.aiの設定にあるデータプライバシー管理から変更できます。Claude Codeのデータ利用の説明では、この設定が保持期間にも影響し、モデル改善への利用を許可すると5年、許可しない場合は30日と定められています。

削除した会話から作られたメモリはどうなりますか

claude.aiでは、会話を削除したり期限切れになったりしても、そこから生成済みのメモリエントリは自動では消えません。エントリ自体を、設定のMemoryから個別に削除する必要があります。

まとめ

覚えていてほしいことはファイルに、強制したいことはルールに、モデルへの期待はコンテキストの設計に置きます。忘れたと感じたら、その情報がどの層に載っていたかを先に確かめると、直す場所が決まります。

この記事を共有:XはてブLinkedIn