ClaudeDesktopメモリ運用(インデックス活用術)
TL;DR
Claudeのメモリ機能を「詳細を全部記憶させる場所」ではなく「目次・インデックス」として使う運用方法を実装・検証した結果、以下の成果が得られた:
- デフォルトメモリ(memory_user_edits): いつ・何を参照するかの索引(最大30項目、1項目200文字)
- メモリ機能(MCP)Knowledge Graph: 実際のルールや詳細情報を構造化保存(制限なし)
- 検証結果: 索引機能・曖昧トリガー補完の両方が正常動作することを確認
注意: この記事で紹介する方法は、公式推奨の使用方法ではなく、筆者の独自の工夫です。
はじめに:メモリ機能の使い方の課題
Claudeには複数のメモリ機能があるが、それぞれに制約がある。
デフォルトメモリ(memory_user_edits)
Claude標準のメモリ管理機能。Claude DesktopとClaude.ai(Webインターフェース)の両方で利用可能。
制約:
- 最大30項目
- 1項目あたり200文字まで
特徴:
- 会話開始時に毎回自動参照される
- 明示的に指示しなくても適用される
メモリ機能(MCP)Knowledge Graph
Model Context Protocol (MCP) の公式メモリサーバーとして提供されるKnowledge Graph機能。
特徴:
- Entity(エンティティ)、Relation(関係)、Observation(観察事実)の3要素で構成
- 情報量の制限なし
- 必要な時に検索・参照される
直面した課題
課題1: 200文字制限
詳細なルールを記載しようとすると、すぐに文字数制限に到達する。
❌ 200文字超過の例:
ファイル操作はfilesystemツール優先、PowerShellは複雑な処理のみ、bash_toolは禁止、
エラー時はファイル不存在なら作成提案、権限エラーなら対処提示、パス不正なら正しい形式を例示...
課題2: 30項目の壁
プロジェクトが増えるにつれ、記憶させたい項目も増える。新しいルールを追加するには、古いものを削除する必要がある。
課題3: 暗黙的なトリガー表現への対応
一般的な表現(「このファイルを編集して」「この内容をまとめて」など)に対して、特定のルールやスキルを適用させたい場合、明示的な指示が必要になる。
解決策:二層構造のメモリ設計
これらの課題に対し、デフォルトメモリを「インデックス」として使用し、メモリ機能(MCP)に詳細を格納する方法を実装した。
アーキテクチャ
┌───────────────────────────────────────────┐
│ デフォルトメモリ(索引層) │
│ memory_user_edits │
│ 「ファイル操作→Knowledge Graph参照」 │
│ (毎回自動参照される) │
└──────────┬────────────────────────────────┘
│ 参照指示
↓
┌───────────────────────────────────────────┐
│ メモリ機能(MCP)Knowledge Graph(情報層)│
│ Entity「ファイル操作ルール」 │
│ - observation 1... │
│ - observation 2... │
│ (必要な時だけ参照) │
└───────────────────────────────────────────┘
Knowledge Graphの構造
Knowledge Graph MCPは以下の3要素で構成される:
Entity(エンティティ)
情報のノード。各エンティティは以下の属性を持つ:
- name: エンティティの一意な名前
- entityType: エンティティの種類(Person、Company、rule、guidelineなど)
- observations: そのエンティティに関する事実の配列
Relation(関係)
エンティティ間の有向グラフの辺:
- from: 関係の起点となるエンティティ名
- to: 関係の終点となるエンティティ名
- relationType: 関係の種類("works at"、"refers to"など)
- 重要: 常に能動態で記述する
Observation(観察/事実)
エンティティに紐づく個別の情報単位:
- エンティティごとに複数保持可能
- 時間と共に追加・削除可能
- 1つのobservationには1つの情報単位を記載
公式推奨の使用方法との違い
公式推奨:
Knowledge Graphは主に以下のカテゴリの情報を保存することが推奨されている:
- Basic Identity(基本情報): 年齢、性別、場所、職種、教育レベル
- Behaviors(行動): 興味、習慣
- Preferences(好み): コミュニケーションスタイル、言語
- Goals(目標): 目的、願望
- Relationships(関係): 個人的・職業的関係
本記事の方法:
上記に加えて、作業ルール、ガイドライン、スキル定義などのメタ情報もKnowledge Graphに格納し、デフォルトメモリから参照する構造を採用。これは公式推奨の使用方法を拡張した独自の工夫である。
実装例
デフォルトメモリの記載例
ファイル操作時はKnowledge Graph「ファイル操作ルール」参照
「まとめて」を含む依頼はKnowledge Graph「スキルトリガールール」参照
技術情報検索時はKnowledge Graph「技術情報検索マニュアル」参照
各項目は25〜60文字程度。200文字制限に余裕を持たせられる。
メモリ機能(MCP)の記載例
Entity: ファイル操作ルール
entityType: file-operation-rule
observations:
- 基本原則: ファイル操作はfilesystemツール優先、複雑な処理はPowerShell使用
- filesystemツール使い分け: 単一ファイル読み込みはread_text_file、複数はread_multiple_files
- PowerShell専用コマンド: Show-TextFile(行番号付き表示)、Add-LinesToFile(行挿入)
- bash_tool使用: ファイル操作では禁止、システムコマンドのみ許可
- エラー処理_ファイル不存在: エラーメッセージ表示しファイル作成を提案
- エラー処理_権限エラー: 内容明示し対処方法提示
文字数制限なし。詳細をすべて記載可能。
検証:機能が実際に動作するか確認
理論上は有効な設計だが、実際に動作するかを3段階で検証した。
検証1: デフォルトメモリによる索引機能
検証目的: デフォルトメモリに記載した索引が、Knowledge Graphへの参照として正しく機能するか
セットアップ
- Knowledge Graphに「検証用_テストルール」エンティティを作成
- デフォルトメモリに「検証テスト実施時はKnowledge Graph『検証用_テストルール』参照」を追加
- ユーザーが「検証テストを実施してください」と依頼
検証結果:✅ 成功
動作フロー:
- ユーザー:「検証テストを実施してください」
- Claudeがデフォルトメモリを自動参照
- 「検証テスト実施時は〜」という索引を発見
- Knowledge Graphから「検証用_テストルール」を検索・取得
- エンティティ内の推奨動作「検証用ルールが正しく参照されました」を実行
結論: デフォルトメモリを「目次」として、Knowledge Graphを「本文」として使い分ける設計が実際に機能することを確認。
検証2: 曖昧トリガーからスキル実行
検証目的: 曖昧な表現(「まとめて」)から、Knowledge Graphを経由して適切なスキルが実行されるか
セットアップ
- Knowledge Graphに「検証用_スキルトリガールール」エンティティを作成
- 「『この内容をまとめて』→ knowledge-creationスキル使用すべき」を記載
- デフォルトメモリに「『まとめて』を含む依頼はKnowledge Graph『検証用_スキルトリガールール』参照」を追加
- ユーザーが「この検証結果をまとめて」と依頼
検証結果:✅ 成功
動作フロー:
- ユーザー:「この検証結果をまとめて」(曖昧な表現)
- Claudeがデフォルトメモリを自動参照
- 「『まとめて』を含む依頼は〜」という索引を発見
- Knowledge Graphから「検証用_スキルトリガールール」を取得
- 「『まとめて』→ knowledge-creationスキル」というマッピングを確認
- knowledge-creationスキルファイルを読み込み
- スキルのワークフローに従ってナレッジ作成を完了
結論: 明示的なトリガーフレーズがなくても、Knowledge Graphの情報を元に適切なスキルが実行されることを確認。
注意: knowledge-creationは筆者の独自スキルであり、Claude標準機能ではない。
検証3: トリガー記載方法の重要性
検証2の過程で、デフォルトメモリのトリガー記載方法が重要であることが判明した。
失敗パターン
❌ 曖昧な記載: 「ナレッジ作成・ドキュメント化時はKnowledge Graph参照」
この記載では動作しなかった。「〜時」という表現が、いつトリガーされるべきか不明確だったため。
成功パターン
✅ 具体的な記載: 「『まとめて』を含む依頼はKnowledge Graph参照」
具体的なキーワードを指定することで、正常に動作した。
推奨フォーマット
以下のいずれかの形式を推奨:
- キーワードベース: 「『X』を含む依頼はKnowledge Graph『Y』参照」
- 動作ベース: 「Z実施時はKnowledge Graph『Y』参照」
- 作業種別ベース: 「W作業時はKnowledge Graph『Y』参照」
いずれも判定条件が明確で、誤動作が少ない。
実装の工夫
工夫1: デフォルトメモリの「毎回参照」特性の活用
デフォルトメモリは会話開始時に毎回自動的に参照される。この特性を活用し、一般的な作業指示に対しても適切なKnowledge Graphへ誘導できる。
動作フロー
ユーザー: 「このファイルを編集して」
↓
Claude: デフォルトメモリを自動参照
→ 「ファイル操作時はKnowledge Graph『ファイル操作ルール』参照」を発見
↓
Claude: Knowledge Graphから詳細ルールを取得
→ filesystemツールを優先使用
→ エラー時の対処方法を確認
↓
Claude: ルールに従って作業を実行
明示的に「ファイル操作ルールを参照して」と指示しなくても、自動的にルールが適用される。
工夫2: 独自スキルとの連携
筆者の環境では、独自に作成したAgentSkills(knowledge-creation、technical-search-guideなど)を使用している。
これらのスキルには明示的なトリガーフレーズが定義されているが、実際の会話では様々な表現が使われる。
knowledge-creationスキルのトリガー例:
明示的: 「〜のナレッジを作成して」
暗黙的: 「この技術についてまとめておいて」「ドキュメント化して」
デフォルトメモリで広義のトリガーを定義
「まとめて」を含む依頼はKnowledge Graph「スキルトリガールール」参照
これにより、暗黙的な表現でも適切なスキルを実行できる。
注意: knowledge-creation、technical-search-guideは筆者の独自スキルであり、Claude標準機能やAnthropicが提供するものではない。
工夫3: 情報ソースの優先順位管理
技術情報を調べる際、ソースの優先順位を定義:
技術情報検索時はKnowledge Graph「技術情報検索マニュアル」参照
Knowledge Graphの内容:
Entity: 技術情報検索マニュアル
entityType: technical-search-guide
observations:
- 検索優先順位_第1: Microsoft/Azure関連はmicrosoft-learn MCP使用
- 検索優先順位_第2: AWS関連はaws-documentation MCP使用
- 検索優先順位_第3: その他はweb_search使用
- フォールバック: MCP失敗時はweb_searchにフォールバック
注意: technical-search-guideは筆者の独自スキルである。
運用結果
成果
1. 項目数制約からの解放
デフォルトメモリは現在12項目のみ使用。残り18項目の余裕がある。
メモリ機能(MCP)には100以上のobservationを保存しているが、問題なく動作。
2. メンテナンス性の向上
ルール変更時、Knowledge Graphの該当observationを更新するだけで反映される。
変更例:
変更前: 基本原則: ファイル操作はfilesystemツール優先
変更後: 基本原則: ファイル操作はPowerShell優先、シンプルな操作のみfilesystem
デフォルトメモリは変更不要。
3. 統一されたルール適用
検証により、一般的な表現でも適切なルールが自動適用されることを確認。スキルのトリガーフレーズを厳密に覚える必要が減る。
課題
課題1: アクセスコスト
Knowledge Graphへのアクセスは追加のツール呼び出しを伴うため、若干のレイテンシが発生する。
対応案: 頻繁に使う簡潔なルールは、デフォルトメモリに直接記載する判断もあり。
課題2: Knowledge Graphの肥大化
情報が増えすぎると管理が困難になる。
対応案: Entity間にRelationsを定義して構造化。定期的に不要なobservationを削除。
課題3: 参照整合性の維持
デフォルトメモリで参照しているEntityが削除されると、参照エラーになる。
対応案: Entity削除前に必ずデフォルトメモリの参照を確認。
実装のベストプラクティス
1. デフォルトメモリには「索引」のみ
✅ 良い例: 「ファイル操作時はKnowledge Graph『ファイル操作ルール』参照」
❌ 悪い例: 「ファイル操作はfilesystemツール優先、複雑な処理は...」
2. 統一されたフォーマット
すべての項目で同じ記載形式を使用:
[トリガー条件]はKnowledge Graph「[Entity名]」参照
3. 具体的なトリガー条件
✅ 良い例: 「『まとめて』を含む依頼は〜」
❌ 悪い例: 「ナレッジ作成時は〜」(いつトリガーされるか不明確)
4. 具体的なentityType
✅ 良い例: file-operation-rule
❌ 悪い例: rule(汎用的すぎる)
5. 1 observation = 1情報単位
✅ 良い例:
エラー処理_ファイル不存在: エラーメッセージ表示しファイル作成を提案
エラー処理_権限エラー: 内容明示し対処方法提示
❌ 悪い例:
エラー処理: ファイル不存在はエラーメッセージ表示し作成提案、権限エラーは対処提示...
まとめ
Claudeのメモリ機能を「インデックス」として使う方法により、以下を実現できた:
- ✅ 制約の回避: 30項目・200文字の制限から解放
- ✅ メンテナンス性向上: ルール変更が容易
- ✅ 自動適用: デフォルトメモリの「毎回参照」特性を活用
- ✅ 曖昧トリガー対応: 検証により動作を確認
重要なポイントは、「メモリに詳細を詰め込まない」こと。
- デフォルトメモリ(memory_user_edits) = 「目次」
- メモリ機能(MCP)Knowledge Graph = 「本文」
この役割分担により、柔軟で管理しやすいメモリ運用を実現できた。
検証により、この設計が実際に機能することを確認できたため、実用的な運用方法として推奨できる。
注意事項:
- 本記事の方法は公式推奨ではなく、筆者の独自の工夫
- knowledge-creation、technical-search-guideは筆者の独自スキル
- トリガー条件は具体的に記載する必要がある
Discussion