「毎回ちゃんと整形してね」「危ないコマンドは流さないで」。そう毎回お願いするのは疲れるし、何より忘れます。Hooks は、その“お願いベース”をやめて仕組みで強制するための機能です。第6回は Hooks(フック)。これまでとは毛色が違います。

ひとことで言うと:Hooks は「ファイルを書いたら」「危険なコマンドの前に」といった決まったタイミングで、AIの判断を待たず必ずスクリプトを実行する仕組み。賢さではなく“確実さ”を足す。

Hooks とは ― イベントで自動的にスクリプトを実行する

Hooks は、特定のタイミング(イベント)で自動的にスクリプトを実行する仕組みです。Git を使ったことがあれば「Git hooks の Claude Code 版」と考えると分かりやすいです。

ここがこれまでとの決定的な違いです。Skills や Subagents は「Claude にお願いして、やってくれたらラッキー」。一方 Hooks は、条件に合致すれば、頼まなくても毎回必ず動きます。「賢いお願い」ではなく「機械的なルール」。だから“やってくれなかった”が起きません。

動き出すタイミングと処理の種類

フックが動き出すタイミング(これを「発火」と呼びます)には、ツールを使う前後・作業の開始や終了など、複数のきっかけが用意されています。実行できる処理も、コマンド実行・外部サービスへの通信・AIへの追加指示・別の作業担当(Subagent)の呼び出しなど複数あります。

代表的なイベント発火タイミング
PreToolUseツールを使う「前」(危険な操作のブロックに使える)
PostToolUseツールを使った「後」(編集後の整形などに使える)
SessionStart / Stopセッションの開始・終了(通知や後片付けに使える)

典型的な使い道

  • Claude がファイルを書いたら自動で lint(コード整形・チェック)を走らせる
  • rm -rf のような危険なコマンドを実行前にブロックする
  • タスクが終わったら通知を飛ばす

設定例 ― settings.json で「イベント・対象・処理」を指定する

設定は settings.json という設定ファイルに書きますが、自分でファイルを開く必要はありません。Claude Code に「ファイルを書いたら自動でチェックを走らせるフックを設定して」と言葉で頼めば書き込んでくれます(画面の案内に沿って選んでいく形で設定することもできます)。書式は、きっかけとなるイベント・反応する対象(matcher。マッチャーと読みます)・実行する処理の3つを指定する形です。たとえば「Write(ファイルへの書き込み)ツールを使った後に整形・チェックを走らせる」設定は、次のようになります。

{ "hooks": { "PostToolUse": [ { "matcher": "Write", "hooks": [ { "type": "command", "command": "npm run lint" } ] } ] } }

matcher が「どのツールに反応するか」、command が「何を実行するか」です。これで、Claude がファイルを書くたびに毎回必ず lint が走ります。「整形して」とお願いし忘れても、抜け漏れが起きません。

使い分けの軸(このシリーズの肝)。 「賢い判断が必要な作業」は Skills / Subagents、「条件が決まっていて、確実に毎回やりたいこと」は Hooks。整形・検査・通知・ガードレールのように例外なく実行したいルールは、お願いベースではなく Hooks に寄せるのが定石です。

まとめ

  • Hooks は特定のイベントで自動・確実にスクリプトを実行する仕組み(≒ Git hooks の Claude Code 版)。
  • AI の判断に依存せず、条件に合えば毎回必ず動くのが最大の価値。
  • settings.json に「イベント・matcher・処理」を書く。整形・危険操作のブロック・通知などに向く。

次回は Hooks の実践編。この記事の考え方そのままに、「編集したら自動でチェックを走らせる」フックを、ターミナルを開かず Claude に頼んで設定し、実際に動かしてみます。