はじめに
Claude Code を日常的に使っていると、避けて通れないのがコンテキストウィンドウの限界です。
会話が長くなると /compact で圧縮するか、Claude Code が自動的にコンパクションを実行します。コンパクション後、AI は会話の要約を保持しますが、細かいやり取りや具体的な指示は失われます。
さらに厄介なのはセッションをまたいだ記憶です。Claude Code には /resume で前回のセッションを引き継ぐ機能がありますが、完全に新しいセッションを開始した場合、前回の会話は参照できません。「昨日の続きをやって」と言っても、Claude は昨日何を話したか知りません。
以前、cc-search というWebビューアーを作って、過去の会話履歴をブラウザで横断検索できるようにしました。
今回は、その検索機能を Claude Code プラグイン として組み込み、会話の中から直接使えるようにしたものが cc-search-plugin です。
cc-search-plugin とは
cc-search-plugin は、Claude Code のプラグインシステムを使って 2 つの機能を提供します。
1. compact 後の自動コンテキスト注入
/compact を実行すると、プラグインの hook が自動的に発火し、直近のメッセージ原文をコンテキストに注入します。これにより、compact の要約では失われがちな具体的なやり取りの内容が補完されます。
2. 過去の会話の手動検索
history-recall スキルを使って、過去のセッションをキーワード検索したり、前回の会話を呼び出したりできます。「前回の会話を呼び出して」のように自然文で Claude に依頼すると自動的にスキルが発火します。ブラウザを開く必要はありません。
Claude Code のメモリ機能との関係
cc-search-plugin の位置づけを理解するには、まず Claude Code が公式に提供するメモリ機能を知る必要があります。公式ドキュメントによると、Claude Code には 2 つのメモリシステムがあり、どちらもセッション開始時に読み込まれます。
1. CLAUDE.md ファイル — ユーザーが書く永続的な指示
CLAUDE.md は、プロジェクトや個人のワークフローに対して Claude に 永続的な指示 を与えるマークダウンファイルです。Claude はすべてのセッションの開始時にこれを読みます。
配置場所によってスコープが異なります:
| スコープ | 場所 | 用途 |
|---|---|---|
| プロジェクト指示 |
./CLAUDE.md または ./.claude/CLAUDE.md
|
プロジェクトのコーディング標準、アーキテクチャ、ワークフロー |
| ユーザー指示 | ~/.claude/CLAUDE.md |
すべてのプロジェクト共通の個人的な好み |
| ローカル指示 | ./CLAUDE.local.md |
git にチェックインしない個人的な設定 |
| 管理ポリシー |
/Library/Application Support/ClaudeCode/CLAUDE.md(macOS) |
組織全体のポリシー |
さらに .claude/rules/ ディレクトリを使えば、特定のファイルパスにスコープしたルールも定義できます。例えば src/api/**/*.ts にマッチするファイルを Claude が読み込んだときに適用されるルール、といった使い方が可能です。
/compact を実行しても CLAUDE.md は完全に生き残ります。compact 後、Claude はディスクから CLAUDE.md を再度読み込み、セッションに再注入します。つまり CLAUDE.md に書いた指示は compact で失われることはありません。
CLAUDE.md に書くべき内容の例:
# プロジェクト指示
- TypeScript を使用、strict モード必須
- テストは `npm test` で実行
- コミット前に `npm run lint` を通す
- API ハンドラーは `src/api/handlers/` に配置
2. 自動メモリ — Claude が自分で書くメモ
自動メモリは、Claude が作業中に 自分自身のためにメモを保存する 仕組みです。ビルドコマンド、デバッグの洞察、アーキテクチャノート、コードスタイルの好みなどを、Claude が将来の会話で役立つと判断した場合に自動的に記録します。
ストレージの場所:
~/.claude/projects/<project>/memory/
├── MEMORY.md # インデックス(すべてのセッションに読み込まれる)
├── debugging.md # デバッグパターンの詳細メモ
├── api-conventions.md # API 設計の決定
└── ... # Claude が必要に応じて作成
MEMORY.md の最初の 200 行のみがセッション開始時に読み込まれます。200 行を超える内容はセッション開始時には読み込まれません。Claude は詳細なメモを別のトピックファイル(debugging.md 等)に移動し、必要な時にオンデマンドで読みます。
自動メモリに保存される内容の例:
- 「このプロジェクトではビルドに
pnpm buildを使う」 - 「認証周りのテストは Redis が必要」
- 「ユーザーは 2 スペースインデントを好む」
3. 会話コンテキスト — セッション中の実データ
これは公式のメモリ機能ではありませんが、最も情報量が多いのが 会話コンテキスト です。セッション中にやり取りされる実際のメッセージ、コード変更、エラーメッセージ、設計議論のすべてが含まれます。
そして、これが 最も脆弱 です。
-
/compactを実行すると AI 要約に圧縮され、細かいやり取りは失われる - セッションを終了すると完全に消失する
- CLAUDE.md にも自動メモリにも、具体的な会話内容は保持されない
3 つのメモリ機構の全体像
また、compact 実行時の動作フローは以下のようになります:
| メモリ機構 | 誰が書くか | 保持する内容 | compact 後 | セッション間 |
|---|---|---|---|---|
| CLAUDE.md | ユーザー | プロジェクトのルール・指示 | 完全に生き残る | 永続 |
| 自動メモリ | Claude | 学んだパターン・洞察 | 影響なし | 永続(200行制限) |
| 会話コンテキスト | 会話中に蓄積 | 実際のやり取り全体 | AI 要約に圧縮 | 消失 |
| cc-search-plugin | プラグインが自動 | 直近メッセージの原文 | コンテキストに注入 | 検索で復元可能 |
cc-search-plugin が埋めるギャップ
CLAUDE.md は「何をすべきか」を定義します。自動メモリは「何を学んだか」を記録します。しかし 「何を話したか」 はどちらにも保持されません。
例えば:
- 「昨日、認証機能のバグを直した時にどういう議論をしたか」
- 「先週のリファクタリングで、なぜこのアプローチを選んだか」
- 「3日前に試して失敗した実装方法は何だったか」
これらの情報は CLAUDE.md に書くような静的なルールではなく、自動メモリが記録するパターンでもありません。具体的な会話の流れ そのものです。
cc-search-plugin は、この消失する会話コンテキストに対して 2 つのアプローチで対処します:
- compact 後の自動注入: AI 要約に加えて、直近メッセージの原文をコンテキストに追加。要約で失われた細部を補います
-
セッション間の検索:
history-recallスキルで過去の会話をキーワード検索し、必要な文脈を復元します
参考: Claude Code のメモリ機能の詳細は 公式ドキュメント を参照してください。
/memoryコマンドで現在読み込まれているメモリファイルの確認や、自動メモリのオン・オフ切り替えができます。
デフォルト compact と cc-search-plugin の違い
/compact を実行した後、デフォルトの動作と cc-search-plugin がそれぞれ何を保持するかを比較します。
| 観点 | デフォルト compact | cc-search-plugin |
|---|---|---|
| 情報源 | AI が会話全体を推論・要約 | JSONL ファイルから直近 N 件を機械的に抽出 |
| カバー範囲 | 会話全体を要約 | 直近10件のメッセージ(設定可能) |
| 内容の忠実度 | 要約(意図・判断理由を含むことが多い) | 原文テキスト(500文字で切り詰め) |
| 判断理由・文脈 | 要約に含まれる場合がある | 保存されない(生のやり取りのみ) |
| 情報量 | 多い(詳細なサマリー) | 少ない(~50行のコンパクトな出力) |
| 信頼性 | AI の要約精度に依存 | 原文そのまま |
| 過去セッション検索 | 不可 | キーワード検索可能 |
デフォルト compact は「何をなぜやったか」の全体像を保持するのに優れています。一方、cc-search-plugin は「直近の実際のやり取り」を正確に保持します。
両者は補完関係にあります。 AI の要約で失われがちな具体的な指示やコードスニペットを、cc-search-plugin が原文で補います。
インストール方法
前提条件
- Claude Code がインストール済みであること
- Node.js 18 以上 がインストール済みであること
Claude Code のインストールがまだの場合は、公式ドキュメントを参照してください。
Step 1: マーケットプレースを追加する
Claude Code のセッション内で、以下のコマンドを入力します。
/plugin marketplace add nogataka/cc-search-plugin
このコマンドにより、GitHub リポジトリがマーケットプレース(プラグインのカタログ)として登録されます。
マーケットプレースとは?
Claude Code のプラグインは、npm のようなレジストリではなく、GitHub リポジトリ単位で管理されます。/plugin marketplace addでリポジトリを登録すると、そのリポジトリに含まれるプラグインが Discover タブに表示されるようになります。
Step 2: プラグインをインストールする
/plugin install cc-search-plugin@cc-search-marketplace
このコマンドにより、プラグインがインストールされ、hooks(自動コンテキスト注入)と skills(手動検索)が登録されます。
インストール後、Claude Code の再起動が必要な場合があります。hooks や skills がうまく動作しない場合は、セッションを一度終了して再起動してみてください。
Step 3: 動作確認
インストールが完了したら、動作を確認します。
自動コンテキスト注入の確認:
/compact
コンパクション後、プラグインが直近のメッセージ原文を Claude のコンテキストに注入します。CLI 上に直接表示されるわけではありませんが、Claude が直近の会話内容を把握している状態になります。
手動検索の確認:
「前回の会話を呼び出して」と Claude に伝えると、history-recall スキルが発動し、前回のセッション内容を表示します。
アンインストール
不要になった場合は以下のコマンドで削除できます。
/plugin uninstall cc-search-plugin
使い方
自動コンテキスト注入(何もしなくてOK)
インストール後は特に意識する必要はありません。/compact を実行するか、Claude Code が自動的にコンパクションを行うたびに、hook が発火して直近のメッセージがコンテキストに追加されます。動作の流れは前述の mermaid 図を参照してください。
前回の会話を呼び出す
新しいセッションを開始した後、前回の会話内容を知りたいときは:
「前回の会話を呼び出して」
Claude が history-recall スキルを使って、前回のセッション内容を取得・表示します。
過去の会話をキーワード検索する
特定のトピックについて過去に話した内容を探したいときは:
「認証機能について前に話したよね?」
Claude がキーワード検索を行い、該当するセッションと前後のコンテキストを返します。
プロジェクト一覧を確認する
どのプロジェクトの会話が保存されているか確認したいときは:
「どのプロジェクトの会話がある?」
データソース
すべてのデータは Claude Code のローカル JSONL ファイル(~/.claude/projects/)から直接読み取ります。
- 外部サービスへの通信はありません
- データベースのセットアップは不要です
- 読み取り専用で、会話ファイルを変更することはありません
cc-search(Web ビューアー)との使い分け
| ツール | 用途 | 形態 |
|---|---|---|
| cc-search(Webビューアー) | 過去の会話をブラウザで閲覧・検索。ツール使用の詳細やAPIコストも確認できる |
npx @nogataka/cc-search で起動 |
| cc-search-plugin(Claude Code プラグイン) | Claude Code の会話内から直接、過去の会話を検索・コンテキスト注入 | Claude Code にインストール |
cc-search はブラウザで視覚的に会話を閲覧したいとき、cc-search-plugin は Claude Code のセッション内で文脈を維持したいときに使います。両方インストールしても競合しません。
まとめ
Claude Code の会話コンテキストは、compact やセッション終了で失われます。CLAUDE.md や自動メモリはルールとパターンを保持しますが、具体的な会話内容は保持しません。
cc-search-plugin は、この「会話コンテキストの消失」を緩和するプラグインです。
- compact 後に直近メッセージの原文を自動注入
- 過去の会話をキーワード検索
- セッション間でコンテキストを引き継ぎ
/plugin marketplace add nogataka/cc-search-plugin
/plugin install cc-search-plugin@cc-search-marketplace
この 2 コマンドで使い始められます。
GitHub: https://github.com/nogataka/cc-search-plugin
cc-search(Webビューアー): https://github.com/nogataka/cc-search
Issue や PR も歓迎です。