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

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

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

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

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

発火するタイミングと処理の種類

発火タイミングには、ツールを使う前後・セッションの開始や終了など、多数のイベントが用意されています(公式では十数種類)。実行する処理も、コマンド実行・HTTPリクエスト・プロンプト・Subagent 呼び出しなど複数あります。

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

典型的な使い道

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

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

設定は settings.json に書くか、対話的な /hooks コマンドで行います。書式は、イベント・対象(matcher)・実行する処理を指定する形です。下は「Write(書き込み)ツールの実行後に npm run lint を走らせる」例です。

{ "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・処理」を書く。整形・危険操作のブロック・通知などに向く。

次回からは2回に分けて MCP(外部サービスへの接続口) を扱います。まず学習編で仕組みを押さえ、実践編では実際に Google ドライブと連携してつまずいた話を共有します。