【追記:重要】Claude Code を VSCode / Cursor で使う場合の設定
2025年12月19日リリースの VSCode / Cursor 拡張機能バージョン 2.0.74 以降、フック機能(SessionStart、UserPromptSubmit、Stop など)が動作しなくなっています。2.0.73(12月17日)までは正常に動作していました。
この問題の回避策として、「Use Terminal」設定をオンにする必要があります。
設定方法:
- VSCode / Cursor の設定画面を開く
- 「Claude Code」の設定項目を探す
- 「Use Terminal」をオンにする
この設定をオンにすると、拡張機能は内部で CLI を起動して動作するため、フックが正常に機能します。
--追記ここまで
はじめに
Claude Codeを使っていると、長い会話の後にコンパクティング(要約)が発生し、せっかく設定した.claude/rulesの内容をClaudeが忘れてしまうことがあります。
この記事では、**SessionStartフックのmatcher: "compact"**を使って、コンパクティング後に自動的にルールとREADMEを再注入する方法を紹介します。
課題
Claude Codeには.claude/rulesファイルでルールを設定できますが、以下の問題があります:
- コンパクティング後、ルールの優先度が下がる
- 長い会話でルールが埋もれて忘れられる
- 毎回「ルール読んで」と言うのは面倒
既存のアプローチ(UserPromptSubmitフックで毎回表示など)はトークン消費が大きいという欠点がありました。
解決策:compact限定のSessionStartフック
SessionStartフックはsourceパラメータで発火条件を絞り込めます:
-
"new": 新規セッション開始時 -
"resume": セッション再開時 -
"compact": コンパクティング後
コンパクティング後だけにルールを再注入することで、トークン消費を最小限に抑えつつ、ルールの再認識を強制できます。
実装
1. 設定ファイル(.claude/settings.local.json)
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "/path/to/your/project/.claude/hooks/inject_rules_on_compact.py"
}
]
}
]
}
}
ポイント: "matcher": "compact"により、コンパクティング後のみフックが発火します。
2. フックスクリプト(inject_rules_on_compact.py)
#!/usr/bin/env python3
"""
SessionStartフック: コンパクティング後にルールとREADMEを注入する
source が "compact" の場合、.claude/rules と README.md の内容を stdout に出力し、
Claudeのコンテキストに自動的に追加される。
"""
import json
import sys
import os
# プロジェクトのルートパスを設定
BASE_PATH = "/path/to/your/project"
def main():
try:
data = json.load(sys.stdin)
source = data.get("source", "")
# matcherで絞り込んでいるのでsourceチェックは念のため
if source == "compact":
# ルールを出力
rules_path = f"{BASE_PATH}/.claude/rules"
if os.path.exists(rules_path):
with open(rules_path, "r", encoding="utf-8") as f:
print(f.read())
# READMEを出力(プロジェクト固有のドキュメント)
readme_path = f"{BASE_PATH}/README.md"
if os.path.exists(readme_path):
print("\n" + "=" * 80)
print("README.md")
print("=" * 80 + "\n")
with open(readme_path, "r", encoding="utf-8") as f:
print(f.read())
except Exception as e:
# エラーがあっても終了コード0で正常終了
sys.stderr.write(f"inject_rules_on_compact error: {e}\n")
sys.exit(0)
if __name__ == "__main__":
main()
3. 実行権限の付与
chmod +x .claude/hooks/inject_rules_on_compact.py
なぜREADMEも注入するのか
ルールだけでなくREADMEも注入することで、以下の効果があります:
- プロジェクト固有の仕様・アーキテクチャの再認識
- 「この機能はない」という誤った回答の防止
- コンテキスト復元による作業継続性の向上
READMEの鮮度を保つことが、Claude Codeとの開発効率を大きく左右します。
他のアプローチとの比較
| アプローチ | タイミング | トークン消費 | 用途 |
|---|---|---|---|
| UserPromptSubmit | 毎回 | 大 | ルール強制 |
| Subagent品質チェック | コード生成後 | 中 | 品質担保 |
| matcher: "compact" | compact後のみ | 最小限 | コンテキスト復元 |
効果
この方法を導入してから:
- コンパクティング後もルールが確実に守られる
- 「ルール読んで」と言う必要がなくなった
- READMEの内容を踏まえた正確な回答が得られる
- 穏やかな開発体験が実現
まとめ
-
SessionStartフックのmatcher: "compact"でコンパクティング後のみ発火 -
stdoutに出力した内容がClaudeのコンテキストに追加される - ルールだけでなくREADMEも注入することで、プロジェクト理解を維持
- トークン消費を最小限に抑えつつ、ルールの再認識を強制できる
ぜひお試しください。