06 メモリ — セッションを超えた記憶
メモリとは
Claude Codeはセッションを超えて記憶を保持する仕組みを持つ。新しいセッションを開始しても、前回の文脈の一部を引き継げる。
graph TD
subgraph "🧠 メモリシステム"
AUTO["Auto Memory
~/.claude/projects/"] USER["User Memory
~/.claude/CLAUDE.md"] PROJ["Project Memory
repo/CLAUDE.md"] IDX["MEMORY.md
インデックス"] end AUTO --> T1["user: 役割・目標"] AUTO --> T2["feedback: 指導"] AUTO --> T3["project: 決定事項"] AUTO --> T4["reference: 外部参照"] IDX --> AUTO
~/.claude/projects/"] USER["User Memory
~/.claude/CLAUDE.md"] PROJ["Project Memory
repo/CLAUDE.md"] IDX["MEMORY.md
インデックス"] end AUTO --> T1["user: 役割・目標"] AUTO --> T2["feedback: 指導"] AUTO --> T3["project: 決定事項"] AUTO --> T4["reference: 外部参照"] IDX --> AUTO
メモリの種類
Auto Memory(自動メモリ)
Claude Codeが自動的に保存するプロジェクト単位の記憶。
- 場所:
~/.claude/projects/<path>/memory/ - 形式: Markdownファイル(frontmatter付き)
- 自動保存: セッション中に学んだことを自動的に記録
- 自動読込: 次回セッション開始時に自動的にロード
記録される内容の例:
- ユーザーの役割・好み
- プロジェクトの状況・決定事項
- フィードバック(「この方法はやめて」等)
- 外部システムへの参照(Linear, Grafana等)
User Memory(ユーザーメモリ)
~/.claude/CLAUDE.md に記述されたルール。
- 場所:
~/.claude/CLAUDE.md - 形式: Markdown
- スコープ: 全プロジェクト共通
- 内容: 基本ルール、LLM利用ポリシー、コーディング原則等
Project Memory(プロジェクトメモリ)
各リポジトリの CLAUDE.md に記述されたルール。
- 場所:
<repo>/CLAUDE.md - 形式: Markdown
- スコープ: そのプロジェクト内のみ
- 内容: プロジェクト固有の構造・ルール・コマンド
MEMORY.md(インデックス)
Auto Memoryの目次ファイル。
- 場所:
memory/MEMORY.md - 役割: 各メモリファイルへのポインタ(1行に1エントリ)
- 自動ロード: セッション開始時に必ず読み込まれる
- 制限: 200行以降は切り捨てられる
メモリの4つのタイプ
Auto Memoryには4つのタイプがある。
| タイプ | 説明 | 保存タイミング |
|---|---|---|
user |
ユーザーの役割・目標・知識レベル | ユーザー情報を学んだ時 |
feedback |
ユーザーからの指導(「こうして」「これはやめて」) | 指摘・確認を受けた時 |
project |
プロジェクトの状況・決定事項 | 重要な決定をした時 |
reference |
外部システムへのポインタ | 外部リソースを知った時 |
メモリのライフサイクル
セッション開始
│
├─ MEMORY.md を読み込み(インデックス)
├─ 関連するメモリファイルを読み込み
│
▼
セッション中
│
├─ 新しい情報を学ぶ → メモリに保存すべきか判断
├─ ユーザーからフィードバック → feedback メモリに保存
├─ プロジェクトの決定 → project メモリに保存
│
▼
セッション終了
│
└─ 保存されたメモリは次回セッションで利用可能
メモリの管理
確認
- ユーザーが「記憶を確認して」と言う → MEMORY.mdを読み込む
/memoryコマンド → メモリ管理画面
保存
- ユーザーが「これを覚えて」と言う → 即座に保存
- Claude Codeが「これは記憶すべき」と判断 → 自動保存
削除
- ユーザーが「これを忘れて」と言う → 該当メモリを削除
- 古い・不正確なメモリ → 更新または削除
注意点
- メモリは古くなる可能性がある — 鵜呑みにせず、必要に応じて現状を確認
- コードのパターンやファイル構造はメモリに保存しない(コードから直接読めるため)
- Git履歴もメモリに保存しない(
git logが正) - メモリは無料ではない — MEMORY.md + 各ファイルが毎ターン読み込まれ、トークンを消費。増えすぎると数千トークン/ターンの固定消費になる → 11_現場の知見
CLAUDE.mdの3層構造(Instruction Memory)
CLAUDE.md(User/Project Memory)は3層構造で運用すると、肥大化と「読むか怪しい間接リンク」のジレンマを解決できる(Z.AIベストプラクティス準拠)。
| 層 | 場所 | 読み込み | 役割 |
|---|---|---|---|
| 層1 常時展開 | CLAUDE.md + rules/_shared/ |
セッション起動時に全プロジェクトで自動 | 核心ルール・共通ルール原本 |
| 層2 パススコープ | rules/*.md(frontmatter globs) |
該当ファイル操作時に自動 | 言語/作業別ルール |
| 層3 スキル/参照 | skills/ + 参照資料 |
トリガー/強指示 | スキル・詳細参照 |
層1の一元管理(@import)
共通ルール(セキュリティ・コーディング原則・記録・LLMルーティング)は rules/_shared/ に1箇所まとめ、グローバルCLAUDE.mdから @import で取り込む。
- 共通ルールの変更が1箇所で済む(DRY)
- 各プロジェクトのCLAUDE.mdは固有内容だけ(重複ゼロ)
- グローバルで1回importすれば全プロジェクトに自動で届く
層2のパススコープ(globs)
rules/*.md のfrontmatterに globs: ["**/*.py"] のように指定すると、該当拡張子のファイル操作時にだけ読み込まれる。Python・Dart・TypeScript等、言語別ルールを必要な時だけ自動ロードできる。
設計原則
- 200行以下 — メインCLAUDE.mdは核心のみ(展開後も維持)
- 具体命令化 — 「詳細: 〇〇.md参照」より
@import常時展開が確実 - パス指定ロード — 言語別ルールは層2(必要時だけ)
- Instruction vs Learning分離 — CLAUDE.md(人間が書く)と
memory/(AI蓄積)を混在させない
💡 やさしい補足(初心者向け)
- Claudeは「記憶」を持てる: 会話をまたいで「こういう決まり」「こういう好み」を覚えられる
- CLAUDE.md = 毎回読むルールブック: ここに書いたことは毎回自動で読み込まれる。長すぎると毎回料金がかさむので簡潔に
- 3つの記憶の置き場所: 全体共通・プロジェクト固有・自動保存。目的に応じて使い分け
- 古いメモは整理: メモが増えすぎると毎回の読み込みで料金が膨らむ。たまに見直して要らないものを消す