Free

memory には何を書くべきか——自分の 5 件を棚卸ししてみた

前回の記事は「CLAUDE.md には不変量だけを書く」と論じた。では memory は?このプロジェクトで実際に動いている 5 件の memory をすべて開いて、1 件ずつ点検した——残すもの、捨てるもの、CLAUDE.md と memory の境界線はどこにあるのか。


前回の記事では「CLAUDE.md に書くのは Claude がコードから読み取れないものだけだ」と論じた。ある読者がすぐに尋ねた——では memory は?memory も文脈なのに、CLAUDE.md と何が違うのか?

多くの人は使っているうちに memory を CLAUDE.md の「バックアップ拡張」のように扱い始める——思いついたことを次々と放り込んでいく。時間が経つと memory は肥大化し、Claude は毎セッションそれを読み込み、古くなった情報に基づいて判断を下すことになる。

この記事では抽象的な定義は扱わない。このプロジェクトで現在稼働している 5 件の memory をすべて開き、1 件ずつ点検する——残すべきもの、削除すべきもの、そもそも書くべきでなかったもの。過程のなかで、CLAUDE.md と memory の違いは自ずと見えてくる。

一言で言うと

  • CLAUDE.md は毎セッションの system prompt に入る。静的。不変量に向く。
  • memory は Claude 自身が読み書きする。動的。変わる事実や、一度きりの出来事の沈殿に向く。

本当に役立つ問いは「どこに置くか」ではなく「この情報はどれだけ長く生きるか、誰が更新するか」だ。

私の memory 5 件

feedback_commits               — 私が「commit」と言うまで commit しない
feedback_article_authenticity  — 実戦記事は捏造してはいけない
project_i18n_strategy          — 全言語同時リリースという戦略判断
project_howdev_plan            — how2claude.dev の未完了の実装計画
project_article_workflow       — 記事公開のパイプライン

タイプ別に見ていく。

A タイプ:一度の訂正が永久ルールになる(feedback_commits)

本文は短い:"don't auto-commit, wait for user to confirm."

これは memory のなかでも最も ROI が高いタイプだ。一度の訂正 → 以降のセッションすべてで永続的に有効。

なぜ CLAUDE.md に入れないのか? プロジェクトルールではなく、私個人の仕事習慣だから。別の貢献者がプロジェクトに加わっても、同じルールを守る必要があるとは限らない。CLAUDE.md はチームレベル、memory は「私と Claude のあいだ」のものだ。

なぜ会話のたびに言い直さないのか? セッションをまたいで保持されるから。来週 Claude がコードを手伝うときにもまだ覚えている。

トリガーは明確だ:一度訂正した。その訂正を恒久的に残したい。

B タイプ:日付つきの事故記録(feedback_article_authenticity)

この memory の本文は異例に具体的だ:

2026-04-16、multi-agent シリーズ最終回を書いていたとき、「3 つの Agent で webhook 機能を作る」というストーリーを想像で作り上げた……全部でっち上げだった。ユーザーから「本物なのか作り話なのか」と問われた——これは先行する 2 本(方法論記事)とは別の水準の話だ……

ポイント:Why 欄は抽象的な原則ではない——具体的な出来事 + 日付 + そのとき何が起きたかだ。

なぜこう書くのか?6 か月後、「実戦記事は本物の素材が必要」という抽象ルールだけを見ると自分でも分からなくなる——いつ 決めたのか、なぜ 決めたのか?でも「4-16、agent のストーリーをでっち上げて見抜かれた」と書いてあれば即座に思い出せる。そしてそのルールがまだ有効かどうかも、その場で判断できる。

これは私の 5 件のなかで最も「重い」一件だ。単なるルールではなく、Claude と私の両方が参照できる事故記録でもある。

C タイプ:戦略判断の背景(project_i18n_strategy)

内容:このプロジェクトがなぜ全言語を一気にリリースしたか——翻訳コストが Claude 経由でほぼゼロ、公式ドキュメントが英語だけなのが中核の機会窓口、という判断。

コードからは読み取れない。コードには 19 個のロケールファイルがあるだけ。なぜ 19 個、なぜ同時、なぜ日本語と韓国語の優先度が高いか——すべて私の頭のなかにある。

memory はその「頭のなかの判断」を定着させ、Claude が後で機能を提案するとき「この提案は i18n 戦略と矛盾していないか」と判断できるようにする。

運用ルールではない(CLAUDE.md には入れない)、戦略背景である(memory に入れる)。

D タイプ:セッション間の引き継ぎ(project_howdev_plan)

いちばん一時的なもの:how2claude.dev 開発者向けサイトのための 9 ファイルにわたる実装計画、末尾に「次のセッションで続ける」と書いてある。

最も危険なタイプ——容易に ゾンビ memory になる。実装が終わっても削除を忘れると、次回 Claude はまだ有効だと思い込み、古い計画に基づいて「step 3 がまだですね」と助言してくる。

このタイプの memory には明確な 退場メカニズム が必要だ:how2claude.dev がリリースされた瞬間、手動で削除しなければならない。

E タイプ:削除すべき一件(project_article_workflow)

情報密度が最も高い一件で、当初は最も役立つと思っていた——注意深く読むまでは:

  • /write-article/publish-article の存在 → .claude/commands/ を見れば分かる
  • draft ディレクトリ構造(meta.json + lang.md)→ docs/drafts/ を見れば一目瞭然
  • API URL → .claude/publish-config.json に書いてある
  • Category/series slug の一覧 → seed ファイルに書いてある

Claude はコードを読めばすべて導出できる。

memory が実際に提供している唯一の情報は最終ブロックだ:"Accounts (production): zh → @how2claude, en → @howtoclaude"——そしてこれは 既に古くなっている。前回のセッションで本番は実際には zh=@howtoclaude だと判明した。memory は数日前のスナップショットを記録しているだけで、もう現実からずれている。

結論:この memory は 90% 削除すべきだ。残す価値のある部分(「kamal でリアルタイムのアカウントを照会する」)は CLAUDE.md に入れるほうが適切だ——あるいはいっそ書かない。memory にハードコードされたアカウントはいずれまた古くなる。

4 つの学び

1. memory の本当の役割は、Claude が入れない部屋を開けること。

  • 私の頭のなか → 戦略、好み、理由
  • 先週のセッション → 前回あなたに訂正したこと
  • 3 か月前の失敗 → 具体的な出来事 + 日付

2. Claude がコードから読み取れるものは memory に入れない。

前回の CLAUDE.md 記事と同じ原則。ファイルパス、API URL、ディレクトリ構造——すべてコードが答えられる問い。一度 grep するのが面倒だからと memory に放り込むのは、その情報が永遠に変わらないほうに賭けているのと同じだ。

3. memory は劣化する。

project_article_workflow がその証拠だ——数日前に書いたのに、アカウント情報はもう間違っている。古い memory ほど信頼できない。定期的に audit する > 無制限に増やす。

4. Why 欄があなたを救う。

私の 2 件の feedback を比べるとわかる:

  • feedback_article_authenticity の Why:「4-16、multi-agent 記事で話を作った」→ 6 か月後にも即座に有効かどうか判断できる。
  • feedback_commits の Why:「user wants to review」のみ → 6 か月後、どの訂正から生まれたか私自身わからない。

後者はずっと弱い。抽象的な原則は生き残らない——なぜ課されたか誰も覚えていない。

決定木:CLAUDE.md vs memory vs 書かない

新しい情報が出てきたら、3 つの問いを立てる:

  1. Claude はコードから導出できるか? Yes → 何も書かない。
  2. 全貢献者が従うべきか? Yes → CLAUDE.md。
  3. 時間とともに変わるか? Yes → memory(具体的な Why + How to apply つきで)。

3 つ目が罠だ。書き留めたくなる「変わらない」情報の多くは実はコードから導出できる——ただ Claude にもう一度 grep させるのが面倒なだけだ。

audit 後に見えたこと

一通り見ていくつか気づいた:

  • project_article_workflow の 90% はコードから導出できる。この一件が最も手を入れるべきだ
  • project_howdev_plan は一時的な引き継ぎ——理論上、退場メカニズムが必要
  • project_i18n_strategy は戦略判断——数か月後に見直す価値がある
  • feedback_commits の Why は弱い。具体的な出来事を付け足すほうが堅牢になる

ついでの観察:私の type 分布は feedback×2 + project×3、userreference タイプはゼロだ。つまりまだ Claude に「私が誰か」「どの外部システムから状態を読むか」を伝えていない。おそらく次のバッチで書くべきもの。

結び

memory の最大の罠は「書くべきなのに書かなかったもの」ではない。「書いたけれど古くなったもの」だ。5 件のうち 1 件がずれるだけで十分——Claude は静かに古い情報を使って判断を下し、そのずれを知らせてくれない。

私の 5 件のなかには、すでに手を入れたいところが見えている。あなたのほうはどうだろう?