CLAUDE.md とメモリ
Claude Code のセッションは、毎回、何も覚えていない状態から始まります(01. Claude Code とは何か の「セッション」を参照)。前のセッションで伝えたルールや、作業の中で分かったことを、次のセッションに引き継ぐための仕組みが 2 つあります。利用者が書く CLAUDE.md と、Claude が自分で書く自動メモリです。このページでは、この 2 つの違いと、使い方を整理します。
この記事で分かること
- CLAUDE.md と自動メモリの違い
- CLAUDE.md を置く場所と、読み込まれる順番
- 守られやすい CLAUDE.md の書き方
- 自動メモリが保存される場所と、中身の確かめ方
- CLAUDE.md に書いた指示に、Claude が従わないときの、原因と対処
用語の整理
| 用語 | 意味 |
|---|---|
| CLAUDE.md | Claude に毎回読ませたい指示を、利用者が書いておくファイル。Markdown(見出しや箇条書きを記号で表す書き方)で書く |
| 自動メモリ(auto memory) | 利用者からの訂正や好みなどを、Claude が自分で書き留めておく仕組み |
| コンテキスト(context) | Claude が、その時点で見ている情報の全体。CLAUDE.md も自動メモリも、ここに読み込まれる |
| インポート(import) | CLAUDE.md の中から、別のファイルの内容を取り込むこと |
| ルール(rules) | .claude/rules/ フォルダーに、話題ごとに分けて置く指示のファイル |
| AGENTS.md | AI のコーディング用のツールに向けた指示を書く、ツールをまたいで使われるファイル |
| フック(hook) | 決まったタイミングで、決まったコマンドを必ず実行する仕組み |
2 つの仕組みの違い
| CLAUDE.md | 自動メモリ | |
|---|---|---|
| 誰が書くか | 利用者 | Claude |
| 書かれる内容 | 指示とルール | 利用者の好み、利用者からの訂正、コードからは分からない事情 |
| 範囲 | プロジェクト、利用者、組織 | リポジトリごと |
| 読み込まれるとき | すべてのセッションの初め | すべてのセッションの初め(索引の、最初の 200 行または 25KB まで) |
| 共有 | リポジトリにコミットすれば、ほかの人にも届く | その PC の中だけ |
Claude の行動を決めておきたいときは、CLAUDE.md を使います。自動メモリは、利用者が手を動かさなくても、Claude が訂正から学んでいく仕組みです。
どちらも「指示」であって、「強制」ではない
大切な点があります。CLAUDE.md も自動メモリも、Claude にとっては、読んで従おうとする情報です。必ず守られることを保証する仕組みではありません。公式ドキュメントにも、指示があいまいだったり、ほかの指示と食い違っていたりすると、守られないことがある、と書かれています。
確実さが必要なことには、別の仕組みを使います。
| やりたいこと | 使う仕組み |
|---|---|
| ある操作を、確実に禁止したい | 権限ルールの deny(03. 権限モードと、確認を減らす方法) |
| 決まったタイミングで、必ず何かを実行したい(コミットの前に必ず検査する、など) | フック |
| 作業の方針や、プロジェクトの決まりを伝えたい | CLAUDE.md |
CLAUDE.md を置く場所
CLAUDE.md は、置く場所によって、効く範囲が変わります。考え方は、04. 設定ファイルの仕組み の設定ファイルと同じです。
| 範囲 | 場所 | 使いみち | 共有される相手 |
|---|---|---|---|
| 組織 | OS ごとに決まった、システムのフォルダー | 組織で共通の決まり | 組織の全員 |
| 利用者 | ~/.claude/CLAUDE.md | すべてのプロジェクトに共通の、個人の好み | 自分だけ |
| プロジェクト | プロジェクトの CLAUDE.md、または .claude/CLAUDE.md | プロジェクトの構成、決まり、よく使う手順 | リポジトリをとおして、チームの全員 |
| プロジェクト(自分だけ) | プロジェクトの CLAUDE.local.md | そのプロジェクトでの、個人的なメモ。.gitignore に加えて、コミットしない | 自分だけ |
読み込まれる順番
Claude Code は、作業フォルダーと、その上にあるすべてのフォルダーから、CLAUDE.md と CLAUDE.local.md を探して読み込みます。
- 見つかったファイルは、どれか 1 つが選ばれるのではなく、すべてがつなげて読み込まれる。
- 順番は、範囲の広いものが先で、狭いものが後になる。作業フォルダーに近いファイルほど、後に読まれる。
- 作業フォルダーの下のフォルダーにある
CLAUDE.mdは、セッションの初めには読み込まれない。Claude が、そのフォルダーの中のファイルを読んだときに、読み込まれる。
設定ファイルとの違いに、注意が必要です。設定ファイルには優先順位があり、同じキーは、順位の高いファイルの値が使われました。CLAUDE.md には、そのような上書きの決まりがありません。2 つのファイルに食い違う指示があると、Claude がどちらに従うかは、決まっていません。食い違いを作らないことが、利用者の側の仕事になります。
CLAUDE.md に書くこと
公式ドキュメントは、CLAUDE.md を、「書いておかなければ、毎回説明し直すことになる内容を、書き留める場所」と説明しています。書き足すきっかけとして、次の場面が挙げられています。
- Claude が、同じ誤りを 2 回した
- レビューで、このプロジェクトなら知っているべきことを、指摘された
- 前のセッションと同じ訂正や説明を、また入力した
- 新しく加わる人にも、同じ説明が必要になる
書くのは、すべてのセッションで知っておいてほしい事実です。ビルドやテストのコマンド、決まり、フォルダーの構成、「必ずこうする」というルールなどです。
逆に、手順の多い作業の説明や、プロジェクトの一部にしか関係しない内容は、CLAUDE.md には向きません。そうした内容は、必要なときだけ読み込まれる仕組み(スキルや、パスを指定したルール)に分けます。スキルは「06. Skills」で扱う予定です。
守られやすい書き方
CLAUDE.md は強制ではないので、書き方によって、守られやすさが変わります。
確かめられるくらい、具体的に書く。
| あいまいな書き方 | 具体的な書き方 |
|---|---|
| コードをきれいに整える | インデントは、スペース 2 つにする |
| 変更をテストする | コミットの前に、npm test を実行する |
| ファイルを整理しておく | API の処理は、src/api/handlers/ に置く |
短く、整理して、食い違いなく書く。
- 長さ:1 つのファイルは、200 行より短くするのが目安。長いファイルは、コンテキストを多く使い、守られにくくなる。
- 構成:関連する指示を、見出しと箇条書きでまとめる。文章を詰め込んだ段落より、従いやすい。
- 食い違い:2 つの指示が矛盾していると、Claude は、どちらかを選んでしまう。古くなった指示や、ぶつかる指示は、ときどき見直して取り除く。
最初の 1 つを作る
プロジェクトの CLAUDE.md は、自分で書くほかに、/init コマンドで、たたき台を作らせることもできます。Claude がプロジェクトの中を調べて、ビルドのコマンドや、見つけた決まりを書き出します。すでに CLAUDE.md がある場合は、上書きせずに、改善の提案をします。作られた内容に、Claude が自分では見つけられない決まりを、書き足していきます。
CLAUDE.md を分ける
内容が増えてきたときのために、分ける方法が 2 つあります。
ほかのファイルを取り込む(インポート)
CLAUDE.md の中に @ファイルのパス と書くと、そのファイルの内容が、一緒に読み込まれます。
プロジェクトの概要は @README.md を参照。インポートは、ファイルを整理するための仕組みです。取り込まれたファイルも、セッションの初めに読み込まれるので、コンテキストの節約にはなりません。
パスを、取り込まずに文字として書きたいときは、`@README.md` のように、バッククォートで囲みます。
話題ごとのルールに分ける(.claude/rules/)
プロジェクトの .claude/rules/ フォルダーに、話題ごとの Markdown ファイルを置くと、それぞれがルールとして読み込まれます。
プロジェクト/
└── .claude/
├── CLAUDE.md
└── rules/
├── code-style.md
└── testing.mdルールのファイルの先頭に、対象のファイルのパスを書いておくと、Claude が、そのパスに当てはまるファイルを扱うときだけ、読み込まれます。
---
paths:
- "src/api/**/*.ts"
---
# API のルール
- すべての入力を検証するパスを指定したルールは、必要なときだけ読み込まれるので、コンテキストの節約になります。
AGENTS.md との関係
AGENTS.md は、AI のコーディング用のツールに向けた指示を書くファイルで、複数のツールで使われています。Claude Code も、AGENTS.md を読めます。
| リポジトリにあるもの | Claude が読むもの |
|---|---|
| AGENTS.md だけ | AGENTS.md |
| AGENTS.md と CLAUDE.md の両方 | CLAUDE.md だけ |
| AGENTS.md を取り込んでいる CLAUDE.md | CLAUDE.md と、取り込まれた AGENTS.md |
ほかのツールと同じ指示を共有したい場合は、指示を AGENTS.md に書き、CLAUDE.md から @AGENTS.md と書いて取り込む方法があります。AGENTS.md を直接読む動作には、バージョン 2.1.277 以降が必要です。
自動メモリ
自動メモリは、Claude が、作業の中で分かったことを、自分のために書き留める仕組みです。自分の PC で使うセッションでは、既定で有効になっています。
何が保存されるか
Claude は、次の 4 種類を保存します。
| 種類 | 内容 |
|---|---|
| user | 利用者の役割、得意なこと、作業の好み |
| feedback | 利用者からの訂正と、利用者が認めた進め方 |
| project | 進行中の作業、期限、決めたこと。コードや Git の履歴からは分からないもの |
| reference | プロジェクトの外にある情報の場所。課題の管理の画面など |
コードを読めば分かること(構成、ファイルの場所など)や、CLAUDE.md にすでに書かれていることは、保存しません。また、毎回のセッションで保存するわけではなく、あとの会話で役に立つと判断したことだけを保存します。
どこに保存されるか
自動メモリは、プロジェクトごとのフォルダーに保存されます。
~/.claude/projects/<プロジェクト>/memory/
├── MEMORY.md 索引。1 つのメモリにつき 1 行
├── feedback_testing.md メモリ 1 件
└── ...<プロジェクト>の部分は、Git のリポジトリから決まる。同じリポジトリであれば、どのフォルダーから始めても、同じ場所を使う。MEMORY.mdは索引で、最初の 200 行(または 25KB)までが、セッションの初めに読み込まれる。- 個々のメモリのファイルは、セッションの初めには読み込まれない。必要になったときに、Claude が読む。
- 保存されるのは、その PC の中だけ。 ほかの PC や、クラウドのセッションとは、共有されない。
- 保存先はリポジトリごとに決まるので、あるリポジトリで保存された内容は、別のリポジトリで始めたセッションには読み込まれない。
メモリのファイルは、普通の Markdown です。利用者が、いつでも開いて、編集や削除ができます。
「覚えておいて」と頼んだとき
Claude に「これを覚えておいて」と頼むと、自動メモリに保存されます。CLAUDE.md に書いてほしいときは、「CLAUDE.md に追加して」と、はっきり頼みます。
| 頼み方 | 保存される場所 | ほかの人に届くか |
|---|---|---|
| 「覚えておいて」 | 自動メモリ | 届かない |
| 「CLAUDE.md に追加して」 | CLAUDE.md | コミットすれば届く |
チームで共有したい決まりは、CLAUDE.md に書きます。自動メモリに入れただけでは、自分の PC の、そのリポジトリでしか効きません。
確かめ方と、止め方
- セッションの中で
/memoryと入力すると、CLAUDE.md と自動メモリのファイルの一覧を見て、開ける。自動メモリを有効にするか、無効にするかも、ここで切り替えられる。 - プロジェクトごとに無効にするには、そのプロジェクトの設定ファイルに、
"autoMemoryEnabled": falseと書く。
CLAUDE.md に書いた指示に、Claude が従わないとき
CLAUDE.md は、Claude が読んで、従おうとする情報です。書いたとおりに動くことを保証する仕組みではありません。そのため、指示を書いたのに、Claude が従わないことがあります。場面ごとに、原因と対処を整理します。
Claude が、CLAUDE.md の指示に従わない
CLAUDE.md に書いてある指示と違うことを、Claude がしてしまう場合です。原因は、3 つ考えられます。
| 原因 | 対処 |
|---|---|
| CLAUDE.md が、読み込まれていない | セッションの中で /context と入力して、読み込まれたファイルの一覧(Memory files)に、そのファイルがあるかを確かめる |
| 指示があいまいで、守ったかどうかを判断できない | 確かめられるくらい、具体的に書き直す |
| 別のファイルの指示と、食い違っている | 上のフォルダーの CLAUDE.md、~/.claude/CLAUDE.md、ルールのファイルを見直して、食い違いを取り除く |
必ず実行してほしいことを、Claude が抜かすことがある
「コミットの前に、必ず検査を実行する」のような指示を書いても、実行されないことがある場合です。
| 原因 | 対処 |
|---|---|
| CLAUDE.md は、強制ではない | 決まったタイミングで、必ず実行したいことは、フックに書く |
会話の初めに伝えた指示に、Claude が途中から従わなくなる
セッションの初めに、会話の中で伝えた指示が、会話が長くなると、守られなくなる場合です。
| 原因 | 対処 |
|---|---|
| 会話の中だけで伝えた指示は、圧縮(古い内容の要約)で、失われることがある | 続けて守ってほしい指示は、CLAUDE.md に書く。プロジェクトの CLAUDE.md は、圧縮のあとに、読み込み直される |
Claude が、AGENTS.md を読み込まない
リポジトリに AGENTS.md があるのに、その内容を、Claude が知らない場合です。
| 原因 | 対処 |
|---|---|
| 作業フォルダーか、その上のフォルダーに、CLAUDE.md がある。この場合、Claude は、CLAUDE.md だけを読む | CLAUDE.md の中に @AGENTS.md と書いて、取り込む |
自動メモリに、Claude が何を保存したかが分からない
Claude が何を覚えているのかを、利用者が確かめたい場合です。
| 原因 | 対処 |
|---|---|
| メモリは、Claude が自分で書くので、利用者は、中を見るまで内容を知らない | セッションの中で /memory と入力して、メモリのフォルダーを開く。ファイルは普通の Markdown なので、読むことも、直すことも、消すこともできる |
実際にやってみる
メモリのファイルの中身を確かめる
このサイトの作業でも、自動メモリを使っています。保存されているフォルダー(~/.claude/projects/<プロジェクト>/memory/)を開いて、中身を確かめました。構成は、公式ドキュメントの説明のとおりでした。索引の MEMORY.md と、メモリ 1 件ごとのファイルがあります。
索引は、1 件につき 1 行で、次の形をしています(内容は、例に置き換えています)。
- [ファイルへのリンクは絶対パスで示す](feedback_absolute_file_links.md) — 相対パスのリンクは開けなかった個々のファイルの先頭には、名前、説明、種類が書かれています。
---
name: absolute-file-links
description: ファイルへのリンクは、絶対パスで示す
metadata:
type: feedback
---
(ここに、内容と、その理由、当てはめ方が書かれる)保存されていたメモリは、feedback と project の 2 種類でした。それぞれ、次のような内容です。
| 種類 | 保存されていた内容の例 |
|---|---|
| feedback | 「承認を求める前に、用語を説明する」「想定していた結果は、想定内であると伝える」「ファイルへのリンクは、絶対パスで示す」 |
| project | テーマごとのページの構成、公開済みのページ、次に書くページ、ページを書くときに決めた方針 |
feedback の 3 つは、どれも、作業の途中で利用者から指摘を受けて、保存されたものです。project のほうは、コードや Git の履歴を見ても分からない、作業の進み具合と決めごとです。公式ドキュメントの「何が保存されるか」の説明と、合っています。
プロジェクトの CLAUDE.md を作る
このサイトのリポジトリには、CLAUDE.md がありませんでした。これまでの作業の中で、何度も確かめ直したり、伝え直したりしていた内容を、CLAUDE.md にまとめました。リポジトリのいちばん上のフォルダーに置いています。
# study-lab
学習した内容をまとめ、GitHub Pages で公開するサイトのリポジトリ。
サイトは VitePress で作り、`docs/` 以下の Markdown がページになる。
## コマンド
- サイトのビルド:`npm run docs:build`
- ビルド結果の確認:`npm run docs:preview -- --port 4173`
- ビルドし直したら、確認用のサーバーを起動し直す(古いファイル一覧のままになるため)
- Python のテスト:`pytest`
- Python の lint:`ruff check .`
- Python の仮想環境は `venv/`
## 変更の進め方
- `main` へ直接 push しない。ブランチを作り、プルリクエストを出す
- 必須のチェック(`docs-build`、`python-ci`)に合格してから、マージする
- 公開の前に、確認用のサーバーで表示を確かめる
## ページを書くときの決まり
- 専門用語は、最初に出てくるところで説明する
- 事実は、公式ドキュメントで確かめてから書く。確かめていない内容は、その旨を書く
- 資格試験の問題文や、その再現は載せない。確認問題は自作する
- 新しいページを公開したら、次の 3 か所を更新する
- テーマのトップページ(`docs/<テーマ>/index.md`)の一覧
- サイドバー(`docs/.vitepress/config.mts`)
- トップページ(`docs/index.md`)の「新着記事」上は、作ったときの全文です。その後、Python の CI に型の検査を加えたときに、「コマンド」に pyright の 1 行を書き足しました(Python のテストと lint を CI で自動実行する を参照)。
作ったときは、全体で 29 行でした。書くときに、上で整理した考え方を、次のように当てはめました。
| 書いた内容 | そう書いた理由 |
|---|---|
| ビルド、テスト、lint のコマンド | すべてのセッションで使う事実。コマンドの形で書いてあるので、そのとおりに実行したかを確かめられる |
| 「ビルドし直したら、確認用のサーバーを起動し直す」 | 作業の中で、同じつまずきを繰り返した点。コードを読んでも分からない |
| 変更の進め方(ブランチ、プルリクエスト、必須のチェック) | 毎回の作業で守る手順。チェックの名前を具体的に書いた |
| 新しいページを公開したときに更新する 3 か所 | 抜けやすい作業。ファイルのパスまで書いた |
逆に、書かなかった内容もあります。
| 書かなかった内容 | 理由 |
|---|---|
| フォルダーの構成の詳しい説明、使っているパッケージの一覧 | コードや設定ファイルを読めば分かる |
| 自分の PC だけに当てはまること(コマンドの置き場所など) | ほかの人には当てはまらない。共有するファイルには書かない |
| 個々のページの内容についての細かい方針 | すべてのセッションで必要なわけではない |
書いたコマンドが、実際に動くことも確かめました。
| コマンド | 結果 |
|---|---|
npm run docs:build | 成功 |
pytest | 15 件のテストが成功 |
ruff check . | 問題なし |
CLAUDE.md に書いたコマンドが動かないと、Claude は、誤った前提で作業を始めてしまいます。書いたら、動くことを確かめておきます。
このファイルは、セッションの途中で作ったので、作った時点では、そのセッションに読み込まれていませんでした。その後、会話が長くなって圧縮(古い内容の要約)が行われたあとに、CLAUDE.md の内容が、Claude に読み込まれるようになりました。「プロジェクトの CLAUDE.md は、圧縮のあとに、読み込み直される」という、公式ドキュメントの説明のとおりの動きです。
まとめ
- セッションをまたいで知識を引き継ぐ仕組みは、利用者が書く CLAUDE.md と、Claude が書く自動メモリの 2 つ。
- どちらも、Claude が読んで従おうとする情報で、強制ではない。確実に止めたい操作は権限ルールの deny に、必ず実行したいことはフックに書く。
- CLAUDE.md は、置く場所で範囲が決まる。見つかったファイルは、すべてつなげて読み込まれる。食い違いがあっても、上書きの決まりはない。
- CLAUDE.md は、具体的に、短く、整理して書く。1 つのファイルは 200 行より短くするのが目安。
- 自動メモリは、リポジトリごとに、その PC の中だけに保存される。チームで共有したい決まりは、CLAUDE.md に書く。
- CLAUDE.md に書いたコマンドは、実際に動くことを確かめておく。
確認の記録
| 項目 | 内容 |
|---|---|
| 最終確認日 | 2026 年 10 月 12 日 |
| Claude Code のバージョン | 2.1.295(macOS のデスクトップアプリ) |
| 検証の状況 | 「実際にやってみる」は、macOS のデスクトップアプリと、このサイトのリポジトリで確かめた結果。プロジェクトの CLAUDE.md を実際に作り、書いたコマンドが動くことと、圧縮のあとに内容が読み込まれることを確かめた。それ以外の節は、公式ドキュメントの内容をもとに書いている |
| 確かめていない内容 | インポート、.claude/rules/、AGENTS.md、/init、/memory、/context は、実際には操作していない |