元エンジニアPMのプロダクトマネージャーお役立ち情報

プロダクトとビジネスの両輪どっちも回してる人 事業戦略やプロダクトマネジメントに関する情報を発信

memory機能の設計と活用 -- 4タイプの使い分け

Claude Codeを使い始めた頃、セッションを閉じるたびに同じことを説明し直していた。「前回、日時の計算でミスがあったからJST基準で頼む」「あのプロジェクトは先週A案で合意した」。毎回これを手打ちするのは面倒だし、伝え忘れると同じ失敗が繰り返される。

Claude Codeにはmemory機能がある。セッションをまたいで学びを蓄積する仕組みだ。ただし何でも記憶させればいいかというと、そうでもなかった。200行の上限があり、何を覚えさせて何を捨てるかの設計が思った以上に重要だった。

memory機能とは -- 仕組みの基本

Claude Codeのmemoryは、セッション間で持続する記憶の仕組み。実体はMEMORY.mdというファイルで、セッション開始時にClaude Codeがこのファイルを読み込むことで過去の学びを引き継ぐ。

保存の仕方に特徴がある。MEMORY.md本体には1行の要約(インデックス)だけを書き、詳細な内容は個別のメモリファイルに分離する。これは200行制限に対処するための工夫だ。本体に詳しい手順書を書き込んでいくと、あっという間に上限に達する。

CLAUDE.mdとは似ているようで別物になる。CLAUDE.mdは「意図的に設計するルール」、memoryは「セッション中に蓄積される学び」。CLAUDE.mdの書き方については「CLAUDE.mdの育て方」を参照してほしい。

4タイプの使い分け

memoryに何を保存するか。試行錯誤の末、4つのタイプに分類して運用するようになった。

タイプ 何を記憶させるか 保存タイミング 具体例
user ユーザー自身の属性・好み 属性を新たに学んだ時 「PM職、事業開発担当」「日本語で応答」
feedback やるべき/やるべきでないの教訓 ミスを指摘した時、うまくいった時 「曜日計算はJST基準で」「ルート直下にフォルダ作成禁止」
project 進行中プロジェクトの状況・決定事項 プロジェクトの状況が変わった時 「4月5日以降のリリース凍結」「A案で合意済み」
reference 外部情報の在処 有用なリソースを発見した時 「営業データはDriveの○○フォルダ」

4タイプの中で最も頻繁に使うのがfeedbackだ。Claude Codeに何かミスを指摘するたびにここへ記録される。「曜日計算はJST基準で」「ファイルはルート直下に作らない」といった教訓が溜まっていく。次のセッションでは、この教訓を読み込んだ状態で作業が始まるため、同じ失敗が繰り返されにくくなる。

project typeは「今どうなっているか」の最新状態を保持する役割だ。プロジェクトの状況は時間とともに変わるので、古い情報はこまめに削除しなければならない。「先月凍結した」という記録を残したまま翌月を迎えると、Claude Codeは凍結がまだ続いていると誤解してしまう。

user typeは頻繁に変わらない。役割や基本的な好みを最初に数件登録すれば十分で、追加する機会はほとんどない。reference typeは「情報がどこにあるか」だけを記録する。内容そのものは書かない。

feedbackタイプを本格的に運用し始めてから、Claude Codeとの付き合い方が変わった。以前はセッションを開くたびに「あのミスに気をつけなきゃ」と意識する必要があったが、memoryに記録しておけば過去の失敗を勝手に学んでくれる。起動するたびに前回の学びがリセットされる、というストレスが消えたのは想像以上に大きかった。

MEMORY.mdの運用テクニック

200行制限の中で必要な記録を維持するために、いくつかの運用ルールを決めている。

インデックス形式を徹底する。 MEMORY.mdには1行の要約と詳細ファイルへのリンクだけを書く。

悪い例:

## 曜日計算ルール
- システム時刻はUTCなので日本時間の曜日を間違える
- セッション開始時に `TZ='Asia/Tokyo' date` コマンドで確認する
- 推奨フォーマット: 2026-04-01(火)14:30
(5行消費)

良い例:

- [曜日計算はJST基準で](feedback_datetime_jst.md) -- 繰り返し指摘されている曜日計算ミスを防ぐ
(1行で済む)

この差は大きい。1トピック5行で書くと40トピックで200行に達するが、1行インデックスなら200トピック分を保持できる。

定期的な棚卸しも欠かせない。 特にproject typeは古くなりやすい。「4月5日以降リリース凍結」という記録は、凍結解除後には不要だ。月に1回、MEMORY.mdを開いて古い記録を削除する時間を取っている。

feedback typeの書き方にもコツがある。 「気をつける」だけでは次回も同じミスを招く。「○○しない、代わりに○○する」まで書かないとAIは正しい行動を取れない。「推測で数字を作らない」ではなく「推測で数字を作らない、データがなければ"不明"と明記する」のように、代替行動をセットで記述するのが大事だ。

memoryとCLAUDE.mdの棲み分け

memoryとCLAUDE.mdの使い分けに最初は迷った。どちらも「Claude Codeへの指示」という点では同じに見えたからだ。

整理するとこうなった。

  • CLAUDE.md: 「こうしてほしい」 -- 意図的に設計するルール・方針
  • memory: 「こうだった」 -- セッション中の体験から蓄積される事実・教訓

もう少し具体的に言えば、CLAUDE.mdは「最初から書くもの」で、memoryは「使っているうちに溜まるもの」だ。CLAUDE.mdに「日本語で応答」「事実と推論を分ける」と書くのは意図的な設計になる。一方、memoryに「曜日計算でミスが起きた」と記録されるのはセッション中の学びだ。

ここで重要なのが「昇格パターン」になる。memoryに溜まった教訓のうち、繰り返し重要だと判明したものはCLAUDE.mdまたは.claude/rules/にルールとして正式に移す。

例を挙げると、「曜日計算はJST基準で」という教訓がmemoryに3回記録された。3回も繰り返されるということは、memoryの1行メモでは根本解決になっていないということだ。そこで.claude/rules/datetime-handling.mdというルールファイルを作り、具体的な手順まで含む正式なルールに昇格させた。

memoryは「仮置き場」で、CLAUDE.md/rulesは「正式なルール置き場」。この関係を意識すると、何をどこに書くかで迷わなくなった。

最初はCLAUDE.mdに何でも書いていた。memoryとの棲み分けに悩んでいた時期が正直ある。ただ運用を続けるうちに面白いことが起きた。Claude Code自身が「これはmemoryに保存しましょうか?」「CLAUDE.mdに追加しますか?」と提案してくれるようになったのだ。AIがこの棲み分けを学習してくれると、人間が毎回判断する手間も減っていく。

やりがちな失敗と対策

失敗1: 何でもmemoryに入れた。 便利だからと手当たり次第にmemoryへ保存していたら、1ヶ月で200行制限に到達してしまった。重要な記録が新しい記録に押し出され、結局「AIが以前覚えていたはずのことを忘れている」という事態に陥る。保存する前に「これは次のセッションでも本当に必要か」と一呼吸置くようになってから改善した。

失敗2: feedbackの書き方が曖昧だった。 「日時計算に気をつける」とだけ書いていた時期がある。これではAIは何に気をつければいいか分からない。翌セッションでも曜日を間違えた。具体的に「JST基準で計算する。セッション開始時にdateコマンドで確認する」と書き直して、ようやく再発が止まった。

失敗3: memoryを一度も見返さない。 半年間棚卸しをサボっていたところ、既に終了したプロジェクトの記録が大量に残り続けていた。「リリース凍結中」という古い記録をAIが読み込み、現在の作業方針と矛盾する提案が返ってくる。月1回のMEMORY.md棚卸しを習慣にしてからは、この問題は起きていない。


memory機能は「AIに何を覚えさせるか」の設計だ。4タイプの分類でmemoryの役割を明確にし、200行制限の中で本当に必要な記録だけを残す。蓄積された教訓が一定の重要度に達したら、CLAUDE.mdやrulesに昇格させていけばいい。このサイクルが回り始めると、セッションをまたいでも「前回の続き」から始められるようになる。

セッション間の引き継ぎをさらに強化する「handoff」の仕組みについては今後詳しく書く予定