本文へ移動
AIコーディングをはじめよう

第15章・自分用に育てる

フック:決まった時に必ず動かす

第12章では、AI への決まりごとを指示ファイル(CLAUDE.md など)に書きました。指示ファイルは AI が読んで従おうとする文章なので、たいていは守られますが、守るかどうかは AI がその時その時で判断します。「毎回、必ず」やってほしいことには向いていないことがあります。

そこで使うのがフックです。フックは、「ファイルを書いたあと」「コマンドを動かす前」のような決まったタイミングで、AI ツールが自分で動かすコマンドです。AI の判断を通らないので、整形を必ずかけたり、危ないコマンドを動かす前に止めたりできます。

この章では、Claude Code を例に、フックがいつ動くか、設定ファイルにどう書くか、止めたときに画面に何が出るかを見ます。読み終わるころには、「保存したら必ず整形するようにフックを入れて」「フックで止められた」と言われたときに、何の話かが分かるはずです。

この章で見ること
指示ファイル(お願い)とフック(必ず動く仕掛け)の違い、フックを動かすタイミング(イベント)、設定ファイル settings.json の書き方、整形をかける例と危ないコマンドを止める例(実物の画面)、フックが見張る範囲、使いどころ、安全に使うための注意、3社のツールのフックを、図で順に見ます。
読み終わると
フックが「AI の判断に任せず、必ず動く」しくみだと分かり、使いどころを挙げられる
前の章までに知っていること
AI エージェントが「考える → 道具を使う → 結果を見る」をくり返して作業すること(第4章)。ファイルを書き換える前やコマンドを動かす前に許可を求めるしくみ(第6章・第10章)。指示ファイルは AI が読んで従おうとする文章であること(第12章)。
読む時間の目安
15分ほど

この章で出てくる言葉

分かる言葉は読み飛ばして構いません。途中で分からない言葉が出たら、ここに戻ってくるか、用語集で探してください。

フック
決まったタイミング(道具を使う前・使ったあと・返事を終えたときなど)に、AI ツールが自動で動かすコマンド。AI が「動かそう」と決めなくても毎回動くので、整形をかける・危ないコマンドを止める、などに使います。
イベント(フックのタイミング)
フックを動かすタイミングの名前。Claude Code では、道具を使う前の PreToolUse、使ったあとの PostToolUse、返事を終えたときの Stop、会話を始めたときの SessionStart などがあります。
マッチャー
フックを、どの道具のときだけ動かすかの絞り込み。"Edit|Write" ならファイルを書き換える道具か書く道具のとき、"Bash" ならコマンドを動かす道具のときだけ動きます。書かないと、そのイベントのたびに毎回動きます。
JSON(ジェイソン)
データを書くための決まった書き方。波かっこ { } の中に、"名前": 値 の組をコンマで区切って並べます。Claude Code の settings.json も、この書き方です。最後の組のあとにコンマを付けたり、コメントを書いたりすると、読めなくなります。
整形(フォーマッター)
コードの見た目(引用符・字下げ・改行・セミコロンなど)を、決まった形にそろえること。そろえる道具をフォーマッターと呼び、Prettier などがあります。
スクリプト
やってほしい手順(コマンドの並び)を書いておき、まとめて動かせるようにしたファイル。フックでは、受け取った中身を調べて「止める」「止めない」を決める小さなスクリプトを置くことがあります。
終了コード
コマンドやスクリプトが終わるときに返す数。0 はふつう「うまくいった」の意味です。Claude Code のフックでは、2 を返すと「止める」、0 なら「何も言わない」(いつもの流れに進む)になります。

下にスクロールすると、図が1つずつ動いて説明が進みます。見逃したら、スクロールを戻せば同じところが巻き戻ります。図は、しくみを説明するために描いた模式図です。実際のアプリの画面ではありません。

  1. 01 / 20

    指示ファイル(第12章)は、AI が読んで従おうとする「お願い」の文章です。たいていは守られますが、必ずではありません。

    守るかどうかは、AI がその時その時で判断します。Claude Code の公式も、指示ファイルは必ず守らせる設定ではなく、長すぎると決まりが埋もれる、と説明しています。

    会話では:「CLAUDE.md に書いたのに、整形し忘れることがある」は、指示ファイルがお願いだから起きることです。

    しくみの図指示ファイルとフックの違い
  2. 02 / 20

    フックは、決まったタイミングで、AI ツールが自分で動かすコマンドです。AI が「動かそう」と決めるのを待たずに、毎回必ず動きます。

    Claude Code の公式は、フックを「LLM が動かすと選ぶことに頼らず、決まった動きが必ず起きる」しくみと説明しています。お願いではなく、仕掛けです。

    会話では:「指示ファイルに書いても守られないなら、フックで強制する」は、お願いをやめて、必ず動く仕掛けにする、という意味です。

    しくみの図指示ファイルとフックの違い
  3. 03 / 20

    フックを動かすタイミングを、イベントと呼びます。この章でおもに使うのは、道具を使う前の PreToolUse と、使ったあとの PostToolUse です。

    エージェントのループ(第4章)で AI が道具を使うたびに、この2つのイベントが起きます。イベントの名前は、英語のまま設定ファイルに書きます。

    会話では:「PreToolUse のフックで止める」「PostToolUse で整形する」のように、イベントの名前で話します。

    しくみの図フックを動かすタイミング(イベント)
  4. 04 / 20

    ほかにも、会話を始めたとき・頼みを送ったとき・返事を終えたとき・人に知らせるときなどに、イベントがあります。

    Claude Code にはもっと多くのイベントがあり、一覧は公式の Hooks のページにあります。全部を覚えなくてよく、使うものだけを調べれば足ります。

    会話では:「Stop のフックでテストを動かす」は、AI が返事を終えるたびにテストを動かす、という意味です。

    しくみの図フックを動かすタイミング(イベント)
  5. 05 / 20

    フックは、第10章で見た設定ファイル(settings.json)に書きます。プロジェクトに入れるなら、.claude/settings.json の "hooks" の中です。

    中身は JSON という書き方で、波かっこ { } の中に "名前": 値 の組を重ねます。図は Claude Code の公式の例で、ファイルを書いたあとに Prettier(整形の道具)を動かします。

    会話では:「保存したら必ず整形するようにフックを入れて」と頼むと、AI がこの設定を書けます。入ったら、中身を自分でも読みます。

    しくみの図例1:ファイルを書いたあとに整える(Claude Code の公式の例)
  6. 06 / 20

    書き方は3段です。1段目は「いつ動かすか」、つまりイベントです。ここでは PostToolUse(道具を使ったあと)です。

    "hooks" の中に、イベントの名前ごとに並べます。同じファイルに、PreToolUse など別のイベントも並べて書けます。

    会話では:「それは PostToolUse に足しておいて」は、道具を使ったあとに動くフックとして書いて、という意味です。

    しくみの図例1:ファイルを書いたあとに整える(Claude Code の公式の例)
  7. 07 / 20

    2段目は「どの道具のときか」で、マッチャーと呼びます。"Edit|Write" は、ファイルを書き換える Edit か、書く Write のとき、です。

    | は「または」の意味です。マッチャーを書かないと、そのイベントが起きるたびに毎回動きます。名前の大文字と小文字は区別されます。

    会話では:「マッチャーを Bash にして」は、コマンドを動かす道具(Bash)のときだけ動くようにして、という意味です。

    しくみの図例1:ファイルを書いたあとに整える(Claude Code の公式の例)
  8. 08 / 20

    3段目は「何を動かすか」です。"type": "command" はコマンドを動かす種類で、"command" に動かすコマンドを書きます。

    ここでは、書いたファイルの名前を jq という道具で取り出し、Prettier に渡しています。Claude Code には、URL に送る・AI のモデルに判断させる種類のフックもあります。

    会話では:「フックで command not found と出た」は、"command" に書いた道具が入っていないか、場所の書き方が違う、という知らせです。

    しくみの図例1:ファイルを書いたあとに整える(Claude Code の公式の例)
  9. 09 / 20

    AI がファイルを書くと、すぐあとにフックが Prettier を動かし、見た目がそろいます。うまくいったときは、会話には何も出ません。

    図の下の「前」は AI が書いたまま、「後」は Prettier が整えたものです(この教材で実際に通した結果)。整ったかは、ファイルを開いて確かめます。

    会話では:「整形がかかっていない」と思ったら、/hooks でフックが入っているか、設定ファイルの場所が合っているかを見ます。

    しくみの図例1:フックが動く流れ
  10. 10 / 20

    設定ファイルは、置く場所で効く範囲が変わります。自分の全部のプロジェクトか、このプロジェクトだけか、です。

    .claude/settings.json は Git で共有でき、チームの全員に同じフックが入ります。自分だけのフックは settings.local.json か ~/.claude/ に書きます。

    会話では:「このフックはチームで使うから、.claude/settings.json に入れてコミットして」のように、置き場所まで指定して頼みます。

    しくみの図フックを書く設定ファイルの置き場所(Claude Code)
  11. 11 / 20

    例2:危ないコマンドを止めるフックです。道具を使う前(PreToolUse)に、Bash のときだけ、スクリプトを動かします。

    Bash はコマンドを動かす道具の名前、スクリプトは手順を書いてまとめて動かすファイルです。ここでは .claude/hooks/ にスクリプトを置きました。

    会話では:「rm -rf を止めるフックを入れて」と頼むと、AI はこのような設定とスクリプトを書けます。

    しくみの図例2:コマンドを動かす前に確かめる
  12. 12 / 20

    AI がコマンドを動かそうとすると、動かす前にフックが中身を受け取ります。スクリプトが rm -rf を見つけたら、2 を返して止めます。

    rm -rf は、フォルダーを中身ごと確かめずに消すコマンドです。スクリプトが返す数を終了コードと呼びます。2 で止めると、理由が AI に伝わります。

    会話では:「フックで止められた」は、AI がやろうとしたことを、動かす前にフックが止めた、という意味です。

    しくみの図例2:止めるか、何も言わないか
  13. 13 / 20

    見つからなければ、0 を返します。0 は「止めない」で、そのあとは、いつもの許可のしくみ(第10章)に進みます。

    0 は「許可する」ではありません。必要なら、ふだんどおり許可を求める画面が出ます。フックから「許可する」と返す書き方もありますが、設定の deny のルール(第10章)は越えられません。

    会話では:「フックは通ったのに、許可を聞かれた」は、フックが止めなかったあと、いつもの許可のしくみが働いた、ということです。

    しくみの図例2:止めるか、何も言わないか
  14. 14 / 20

    実物の画面。「build フォルダーを消して」と頼むと、AI が rm -rf build を動かそうとして、フックに止められます。

    ふだんの表示では「Ran 1 shell command」の1行にまとまります。build フォルダーは消えていません。AI の返事は、画面を写すために用意した見本の文です。

    会話では:「AI が『フックに止められた』と言っている」ときは、止めたのが正しかったかを、自分でも確かめます。

    ~/practice
  15. 15 / 20

    ctrl+o で詳しい表示にすると、止めたフックと理由が赤い字で出ます。Blocked: の後ろが、スクリプトが書いた理由です。

    「PreToolUse:Bash hook error」は、PreToolUse の、Bash に当たったフックが止めた、という意味です。もう一度 ctrl+o で戻ります(Claude Code 2.1.301、2026年10月時点)。

    会話では:「どのフックに止められたか、ctrl+o で見て」のように使います。

    ~/practice
  16. 16 / 20

    フックが見張るのは、マッチャーに当たった道具だけです。同じことを別の道具でされると、そのフックは気づきません。

    たとえば Edit|Write だけを見張っても、AI は Bash のコマンドでもファイルを書き換えられます。道具を使ったあと(PostToolUse)のフックは、起きたことを取り消せません。

    会話では:「フックだけに頼らず、許可のしくみとも重ねて守る」のように、いくつかのしくみを組み合わせて使います。

    しくみの図フックが見張る範囲
  17. 17 / 20

    フックの使いどころは、整える・止める・知らせる・確かめる・思い出させる、などです。どれも「毎回、同じように」やりたいことです。

    どれも Claude Code の公式に例があります。判断が要ることは指示ファイルやスキルに書き、毎回同じでよいことをフックにします。

    会話では:「許可を待っているときに通知が来るように、フックを入れて」のように頼めます。

    しくみの図フックの使いどころ
  18. 18 / 20

    フックは、あなたのパソコンで、あなたと同じ権限で動くコマンドです。だから、入れる前に中身を読みます。

    自分で打つコマンドと同じことができるので、知らないコマンドを自動で動かす設定にしないことが大事です。Claude Code の公式も、読んで試してから入れるよう求めています。

    会話では:「よそのリポジトリは、Claude Code で開く前に .claude/settings.json のフックを見ておく」は、知らないコマンドが自動で動かないようにするためです。

    しくみの図フックを入れるときに気をつけること
  19. 19 / 20

    フックは3社のツールにあり、名前はどれも Hooks です。PreToolUse・PostToolUse・SessionStart・Stop という同じ名前のイベントもあります。

    書くファイルと置き場所は、ツールごとに違います。Codex は、新しいフックや変わったフックを、/hooks で確かめて信頼するまで動かしません。

    会話では:「Codex でも同じフックを使いたい」と頼むと、Codex の置き場所(.codex/hooks.json など)に合わせて書き直すことになります。

    しくみの図3社のツールのフック
  20. 20 / 20

    使い分けをまとめます。指示ファイルは毎回読むお願い、スキルは必要なときに読む手順書、フックは決まった時に必ず動くコマンドです。

    公式は「毎回同じように起きるべきで、AI が考える必要のないこと」をフックに、と勧めています。フックは会話の外で動くので、結果を返さない限りコンテキストを使いません。

    会話では:「それは毎回同じだから、スキルじゃなくてフックにしよう」のように、どれに書くかを相談します。

    しくみの図指示ファイル・スキル・フックの使い分け

この章のまとめ

  1. 1

    フックは、決まった時に必ず動くコマンドです。指示ファイルは AI が読んで従おうとする「お願い」ですが、フックは AI ツールが自分で動かすので、AI の判断を通りません。道具を使う前(PreToolUse)・使ったあと(PostToolUse)・返事を終えたとき(Stop)などのイベントで動きます。

  2. 2

    設定ファイルに「いつ・どの道具のとき・何を動かすか」を書きます。Claude Code では settings.json の "hooks" に、イベント・マッチャー・コマンドの3段で書きます。道具を使う前のフックで止めるときは、終了コード 2 と理由を返します。0 なら何も言わず、いつもの許可のしくみへ進みます。見張れるのは、マッチャーに当たった道具だけです。

  3. 3

    フックは、自分と同じ権限で自動で動きます。人からもらったフックも中身を読んでから入れ、よそのプロジェクトは信頼する前に設定を見ます。入っているフックは /hooks で一覧できます。Claude Code・Codex・Antigravity CLI のどれにもフックがあり、書くファイルと置き場所はツールごとに違います。

この章の内容を確かめた情報源

確認日: 2026年10月25日

次の章第16章 サブエージェントと並べて進める作業調べものや見直しを別の AI に任せ、元の会話のコンテキストをきれいに保つ。

章の一覧へ戻る