たとえ話にします。 会社の入口にある「入退室のたびに鳴るチャイム」です。誰がどんな気分で通っても、通れば必ず鳴ります。 Claude Codeでも、「道具を使う前」「道具を使った後」「返事を終えた時」など決まった瞬間に、指定した命令(コマンド)を自動で動かせます。
| 動くかどうか | たとえ | |
|---|---|---|
| スキル | AIが判断して使う | 棚の業務マニュアル |
| フック | AIの判断に関係なく必ず動く | 入口のチャイム |
「毎回、確実に」やりたいことはフック。「状況を見て上手に」やりたいことはスキルです。
なお CLAUDE.md は毎回読まれる決まりですが、AIへの「お願い」です。絶対に外せない事は、deny(No.04)かフック(No.06)で仕組みにします。
内容は大きく3つです。
「イベント」とは、フックが動く「瞬間」の名前のことです。名前は英語で、Pre=前、Post=後、ToolUse=道具を使うこと、と読めば意味が分かります。よく使うのは次の4つです。
PreToolUse:道具を使う前(止めることもできる)PostToolUse:道具を使った後Stop:Claudeが返事を終えた時Notification:Claudeが入力待ちなどで通知を出す時ほかに、会話の始まり(SessionStart)などもあります。全部は覚えなくて大丈夫です。
設定ファイル(Claude Codeの動きを決める settings.json。No.05で詳しくやります)の hooks という項目に書きます。置き場所は、自分の全作業場に効かせるなら ~/.claude/settings.json(これを「ユーザー設定」と呼びます)、その作業場だけなら .claude/settings.json です。
「どの道具の時に動かすか」は matcher(絞り込みの条件。空欄なら全部の道具)で絞れます(例:ファイルを書いた時だけ)。
{
"hooks": {
"Notification": [
{ "matcher": "", "hooks": [ { "type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'" } ] }
]
}
}
Claudeが入力待ちになった時に、Macの通知を出す例です(公式ガイドの例)。osascript は、Macの機能を文字の命令で動かす道具で、ここでは通知の表示に使っています。
○ よくある勘違い:「フックはAIにお願いする仕組み」→ ×。AIではなくClaude Code本体が動かします
○ 関係する単元:No.05 設定ファイル(書く場所)、No.03 スキル(判断して動く側)
PostToolUse)PreToolUse)止める時は、命令の終了コードを 2 にして理由を返します。終了コードとは、命令が終わる時に返す番号のことで、0 は成功、2 はフックでは「止めて」の合図です。あなたの環境にも、返事を終える時に動くフック(Stop)と、プロンプト(あなたが送る依頼文)を送った時に動くフックが入っています。
必ず動くのは強みですが、間違った命令を入れると毎回間違えます。小さく作って、1つずつ動きを確かめます。会話の入力欄で /hooks と打つと(/ で始まる、操作の呼び出しです)、いま入っているフックを見られます。
フック=AIの判断と無関係に、決まった瞬間に必ず動く。確実さが欲しい物はフック、判断が欲しい物はスキル。
問1 「返事が終わるたびに、必ずMacに通知を出したい」。向いているのは?
問2 フックを自分の全作業場で使いたい時の書き場所は?
出典:Claude Code 公式ドキュメント「Automate actions with hooks」(https://code.claude.com/docs/en/hooks-guide )/手元の ~/.claude/settings.json の hooks