
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