🪝

Claude CodeのUserPromptSubmitフックでCLAUDE.mdを自動読み込みする方法

に公開

はじめに

Claude Codeを使用していると誰もが経験する問題があります。CLAUDE.mdで詳細なルールを定義しても、長時間の会話が続くうちに、設定した内容が徐々に反映されなくなり、本来のルールから逸脱した動作をし始めるという現象です。

この問題を根本的に解決するのが、UserPromptSubmitフックによる自動読み込みです。この記事では、UserPromptSubmitフックの設定方法と、Control+Rで簡単に動作確認する方法を解説します。

この記事の対象者

  • Claude Codeを日常的に使用しているが、ルールが守られないことに悩んでいる開発者
  • プロジェクト固有の設定を毎回手動で読み込むのが面倒だと感じている方
  • 大規模なCLAUDE.mdを使用していて、トークン消費量を削減したい方

この記事で解決できる課題

  • CLAUDE.mdファイルの自動読み込みによる作業効率化
  • プロジェクト固有のルールの確実な適用
  • 長時間の会話でもルールが忘れられない仕組みの構築
  • 毎回のプロンプト送信時に自動的にルールが適用される仕組みの実現

UserPromptSubmitフックとは?

UserPromptSubmitフックは、Claude Codeのsettings.jsonで設定できる機能で、ユーザーがプロンプトを送信する直前に自動的に実行されるフックです。

このフックを活用することで、以下のようなことが可能になります:

  • 特定のファイルの内容を自動的にプロンプトに追加
  • 環境変数やシステム情報を事前に取得
  • カスタムルールやガイドラインを確実に適用

設定方法

1. settings.jsonの作成・編集

Claude Codeの設定ファイルsettings.jsonは、プロジェクト配下にも配置できますが、~/.claude/settings.json(ユーザーホームディレクトリ)に配置することを推奨します

ユーザーホームディレクトリに設定する大きなメリット:

  • 一度設定すれば全てのプロジェクトで自動的にCLAUDE.mdが読み込まれる
  • プロジェクトごとに個別の設定を行う必要がない
  • 新しいプロジェクトでも即座に適用される

注意: プロジェクト固有のルールやチーム開発での設定共有を実現したい場合は、プロジェクト直下のsettings.jsonに設定し、コマンド内のパスを$HOME/.claude/CLAUDE.mdから./CLAUDE.mdなどプロジェクト内のパスに変更してください。

2. UserPromptSubmitフックの追加

settings.jsonに以下の設定を追加します:

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "if [ -f $HOME/.claude/CLAUDE.md ]; then echo '【必須ルール】以下のCLAUDE.mdの内容を最優先で遵守すること:' && echo '---' && cat $HOME/.claude/CLAUDE.md && echo '---' && echo '✅ 上記ルールを読み込み、これから全ての動作で遵守します'; else echo '⚠️ CLAUDE.mdが見つかりません'; fi"
          }
        ]
      }
    ]
  }
}

3. CLAUDE.mdファイルの作成

~/.claude/CLAUDE.mdにあなたの独自ルールやプロンプトを記述します:

# CLAUDE.md

Always respond in Japanese to the user.

動作確認方法

設定が正しく機能しているか確認するには、Control+Rを使用します:

Control+Rで確認

  1. Claude Codeでチャットを開始
  2. 何かプロンプトを入力して送信
  3. AIの応答を受け取った後、Control+R(Macの場合はCmd+R)を押す
  4. フックによって自動的に読み込まれたルールが表示され、「✅ 上記ルールを読み込み、これから全ての動作で遵守します」というメッセージが確認できれば成功!

※Control+Rを使うことで、UserPromptSubmitフックが正しく動作しているかを確認できます。AIの応答に「✅ 上記ルールを読み込み、これから全ての動作で遵守します」が含まれていれば、フックが正常に機能しています。

実際の動作例

UserPromptSubmitフックが正しく設定されると、プロンプトを送信するたびに以下のような内容が自動的に追加されます:

【必須ルール】以下のCLAUDE.mdの内容を最優先で遵守すること:
---
# CLAUDE.md

Always respond in Japanese to the user.
---
✅ 上記ルールを読み込み、これから全ての動作で遵守します

この例では、シンプルに「日本語で応答する」というルールが設定されています。実際のCLAUDE.mdには、より詳細なプロジェクト固有のルールや指示を記述できます。

CLAUDE.mdのトークン消費量削減について

デメリット

CLAUDE.mdが大きい場合、毎回のリクエストでトークン消費量が大きくなります。これは以下のような問題を引き起こします:

  • 🚨 利用制限:毎回大量のトークンを消費することで、利用制限にかかりやすくなる
  • ⚡ レスポンス速度の低下:大量のトークンを処理するため、応答時間が長くなる
  • 📊 コンテキストウィンドウの圧迫:利用可能なコンテキストが減少し、長い会話が困難に

改善策:MCPを活用した効率的な情報管理

この問題は、CipherSerenaなどのMCPを利用することで解決できます。

具体的には、大量のルールをMCPに移行し、CLAUDE.mdには「必要な情報はCipherやSerenaから取得すること」といった指示を記載します。これにより、AIは必要な時だけMCP経由で関連情報を検索・取得するようになります。

この方法により、従来膨大なトークンを消費していたものが、削減され、コストを削減できます。

その他にも、Custom slash commandやSub Agentを使った方法などもあります。これらの方法を組み合わせることで、より効率的なトークン管理が可能になります。
https://zenn.dev/sc30gsw/articles/ff81891959aaef

効果:

  • ✅ トークン消費量を大幅に削減(従来比で最大80%削減も可能)
  • ✅ レスポンス速度の向上
  • ✅ コストの削減
  • ✅ より長い会話セッションが可能に

この方法により、従来膨大なトークンを消費していたものが、必要最小限の消費に抑えられ、より効率的な運用が可能になります。

まとめ

UserPromptSubmitフックを使うことで:

  • ✅ 長時間の会話でもCLAUDE.mdのルールが忘れられない
  • ✅ 毎回のプロンプト送信時に自動的にルールが適用される
  • ✅ 手動での読み込み作業が完全に不要になる
  • ✅ Control+Rで動作確認が簡単にできる

UserPromptSubmitフックの最大の強みは、条件を満たせば確実に発動するという点です。これにより、設定したルールを忘れることなく、より確実にClaude Codeに守らせることが可能になります。

長時間の会話でルールが忘れられてしまう問題に悩んでいる方は、ぜひこの設定を試してみてください!

この記事の作成方法

この記事は、AIツールを効果的に活用して作成しました:

  1. NotebookLMでベストプラクティスの学習

    • Zennの記事作成に関するベストプラクティスをNotebookLMに読み込ませて要点をまとめました
    • 読みやすい技術記事の構成や、読者を引き込むための工夫を学習
  2. Claude Codeカスタムコマンドの活用

    • Claudeのプロジェクト機能を使用し、カスタムコマンドのドキュメントを事前に読み込ませたプロジェクトを作成
    • プロジェクト内でNotebookLMでまとめたベストプラクティスを投げ、記事作成用のカスタムコマンドを作成
    • 記事の構成、見出し、内容の整理を効率的に実施
  3. 対話的な改善プロセス

    • Claude Codeとの対話を通じて、記事の内容を段階的に改善
    • 読者視点での疑問点や改善点を繰り返し修正

このようなAIツールを組み合わせることで、技術記事を効率的に作成することができました。

参考リンク

株式会社ZOZO

Discussion