メインコンテンツへスキップ
見出し画像

Claude Codeのフック(hooks)とは?AIに「必ず」やらせるしくみ|はじめて入れたい3つ

    CLAUDE.md に「.env は触らないで」と書いておいても、それが毎回守られるとは限りません。

    公式ドキュメントでも、CLAUDE.md の中身は「読んでもらうもの」で、強制されるものではないと説明されています。

    そんなときに使えるのがフック(hooks)です。
    公式ドキュメントを読んで、何ができるのか、どこに書くのか、最初に入れたい3つをまとめました。


    画像

    フックとは:決めたタイミングで「必ず」動く命令

    フックは、Claude Code の決まったタイミングで、自分で書いた命令(シェルのコマンド)を自動で動かすしくみです。

    公式ドキュメントでは、AI が「やるかどうか」を選ぶのではなく、決まった動きが必ず起きるようにするもの、と説明されています。

    • CLAUDE.md:会話のはじめに読んでもらう「お願い」。守るかどうかは AI しだい

    • フック:決めたタイミングで毎回動く「決まり」。AI が忘れても関係ない

    前に書いた CLAUDE.md の記事では「ずっと守ってほしいことは CLAUDE.md に」と書きました。
    それでも「ここだけは絶対」というものは、フックに任せたほうが安心です。

    いつ動く?よく使う6つのタイミング

    フックが動くタイミングを「イベント」と呼びます。
    公式ドキュメントには30種類以上ありますが、最初に覚えるのはこのあたりです。


    画像
    • SessionStart:会話を始めたとき・再開したとき

    • UserPromptSubmit:指示を送った直後、AI が読む前

    • PreToolUse:ファイルの編集やコマンドの実行の直前。ここで止められる

    • PostToolUse:ツールがうまく動いたあと

    • Notification:入力や許可を待っているとき

    • Stop:AI が返事を終えたとき

    「matcher」という欄で、どのツールのときだけ動かすかも決められます。
    たとえば Edit|Write と書けば、ファイルを書きかえるときだけ動きます。

    どこに書く?3つの置き場所

    フックは設定ファイル(settings.json)の hooks という欄に書きます。

    • ~/.claude/settings.json:自分のパソコンの、すべてのプロジェクトで動く

    • .claude/settings.json:そのプロジェクトだけ。チームで共有できる

    • .claude/settings.local.json:そのプロジェクトだけ。自分専用

    書いたあとは、Claude Code で /hooks と打つと、登録されているフックの一覧を確かめられます。

    JSON を自分で書くのがむずかしければ、「入力待ちのときに通知するフックを作って」と Claude に頼んで書いてもらうこともできる、と公式ドキュメントにもあります。

    はじめて入れたい3つ


    画像

    ① 入力待ちを通知する(Notification)
    許可や返事を待っているときに、デスクトップに通知を出します。
    Mac なら、公式の例はこうです。

    {
      "hooks": {
        "Notification": [
          {
            "matcher": "",
            "hooks": [
              { "type": "command",
                "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'" }
            ]
          }
        ]
      }
    }

    ちょっと別の作業をしている間に、AI がずっと許可待ちで止まっていた……ということが減ります。
    なお Mac で通知が出ないときは、「スクリプトエディタ」の通知がオフになっていることがある、と注意書きがありました。

    ② 編集のあと、形を整える(PostToolUse)
    matcher を Edit|Write にして、ファイルを書きかえるたびに Prettier などの整形ツールを動かします。
    「整形しておいてね」と毎回頼まなくてよくなります。

    ③ 触らせないファイルを守る(PreToolUse)
    編集の前に動くスクリプトで、ファイル名が .env や .git/ なら止めます。
    止めるときは、スクリプトの最後を exit 2(終了コード2)にして、理由を書いて返します。
    理由は Claude に伝わるので、別のやり方を考え直してくれます。

    知っておきたい注意点

    • exit 0 は「許可」ではない。PreToolUse で 0 を返しても、いつもの許可の確認はそのまま出る

    • Stop は「作業が全部終わったとき」ではない。AI が返事を終えるたびに動く

    • コマンドで書きかえたファイルは、Edit|Write の matcher では拾えない。全部の変化を見たいときは別のイベント(Stop で一度まとめて調べる、など)を使う

    • フックは自分のパソコンでコマンドを動かすしくみなので、中身が分からないものはそのまま貼らない

    分かったこと

    CLAUDE.md は「読んでもらうお願い」、フックは「必ず動く決まり」。
    同じ「ルールを書く場所」でも、効き方がまったく違いました。

    全部をフックにする必要はなくて、破られたら困ることだけをフックに、それ以外は CLAUDE.md に、という分け方がちょうどよさそうです。

    みなさんに聞きたいこと

    みなさんは、AI に「これだけは絶対にやらないで」と思っていることはありますか?
    ファイルでも、コマンドでも、どんなことでも教えてもらえたらうれしいです。

    スキ・フォローしてもらえると、次の記事を書く励みになります。

    参考

    • Claude Code 公式ドキュメント「Automate actions with hooks」: https://code.claude.com/docs/en/hooks-guide

    • Claude Code 公式ドキュメント「Hooks reference」: https://code.claude.com/docs/en/hooks

    • Claude Code 公式ドキュメント「How Claude remembers your project」(CLAUDE.md): https://code.claude.com/docs/en/memory

     
     
    話題のAIを、実際に使ってから書きます。 Claude Codeでアプリを2本リリースした個人開発者です。 ・新しいAIツールを試した正直な感想 ・仕事や開発で本当に使える使い方 ・うまくいかなかったことも全部書く 「すごそう」より「使ってどうだったか」を届けます。

    あなたへのおすすめ