Claude Codeのフックとは?AIの作業に安全柵を付ける方法

公開 更新 著者 永上裕之導入とルール
AIの作業の前に安全柵を置くイメージ

この記事の要点

  • フックは、AIの作業の決まった場面で自動で動く小さな仕組み。止める・記録する・知らせるに使う
  • 大事な決まりは「権限の設定」で守り、フックはその外側の見張り役として足す
  • 2026年10月の更新で、フック自体が失敗したときに作業を止める設定(onFailure)が加わった

Claude Code に仕事を任せ始めると、次のような心配が出てきます。

こうした心配に、人が毎回つきっきりで答えるのは大変です。Claude Code には、作業の決まった場面で自動で動く「フック(hooks)」という仕組みがあります。この記事では、公式ドキュメントにもとづいて、フックで AI の作業に安全柵を付ける考え方と、仕事で使う前に知っておきたい注意点を紹介します。

フックとは:決まった場面で自動で動く小さな仕組み

フックは、Claude Code の作業の流れの中の決まった場面で、自動で動く処理です。公式ドキュメントでは、シェルのコマンド・HTTP の送り先・MCP のツール・AIへの短い問いかけ・サブエージェントのどれかを、フックとして動かせると説明されています。ターミナル・IDE・デスクトップ・クラウドのどの使い方でも同じように動きます。

仕事で使う場面は、大きく3つに分けると考えやすくなります。

実行の前・実行のあと・終わったらの3つの場面でフックが動く図
実行の前・実行のあと・終わったらの3つの場面でフックが動く図(イメージ)
場面主なイベント名仕事での使い道
実行の前PreToolUse危ないコマンドや、触ってはいけない場所への書き込みを止める
実行のあとPostToolUse何をしたかを記録する・書いたファイルの形を整える
終わったらStop・SubagentStop作業の終わりをチャットや通知で知らせる

ほかにも、会話の始まり(SessionStart)、指示を送ったとき(UserPromptSubmit)、サブエージェントが動き始めたとき(SubagentStart)など、多くの場面が用意されています。

実行の前に止める:いちばん効く使い方

仕事で最初に入れたいのは「実行の前に止める」フックです。たとえば、ファイルを消すコマンドや、本番環境に関わる操作の前で止めます。

止め方は2通りあります。

ここで注意したいのは、終了コード1などのそれ以外の終わり方は「止めない」扱いになることです。公式ドキュメントも、決まりを守らせたいフックでは終了コード2を使うように書いています。

設定の例(考え方を示すための一般的な形)は次のとおりです。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "if": "Bash(rm *)",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/check-delete.sh"
          }
        ]
      }
    ]
  }
}

matcher でどの道具(ここではコマンドの実行)に反応するかを選び、if でさらに「削除のコマンドのときだけ」と絞り込んでいます。

どこに書くか:個人・チーム・会社の3段階

フックの設定は、置き場所で効く範囲が変わります。

置き場所効く範囲
自分の設定(ホームの .claude/settings.json)自分のすべてのプロジェクト
プロジェクトの .claude/settings.jsonそのプロジェクト。チームで共有できる
プロジェクトの .claude/settings.local.jsonそのプロジェクト。自分だけ
管理者が配る設定(managed)会社全体。管理者が決める

置き場所の違うフックは、置き換わるのではなく合わさって動きます。会社として必ず守りたい決まりは管理者が配る設定に、チームの約束はプロジェクトの設定に、個人の便利な仕組みは自分の設定に、と分けると整理しやすくなります。

仕事で使う前に知っておきたい3つの注意

公式ドキュメントには、フックを過信しないための注意も書かれています。

1. フックは「絶対の壁」ではない

if による絞り込みは「できる限り」の判定だとされています。必ず守りたい許可・禁止は、フックではなく権限(permissions)の設定で決めるのが基本です。フックは、その外側で見張る役と考えます。

2. フックが止まると、作業はそのまま進むことがある

フックには時間の上限があり、上限を超えたり、うまく起動しなかったりすると、初期設定では作業がそのまま進みます。2026年10月8日の更新(2.1.295)で、"onFailure": "block" を付けると、フック自体が失敗したときに作業を止められるようになりました。止める役のフックには付けておくと安心です。

3. プロジェクトのフックは「信頼」してから動く

プロジェクトに入っているサブエージェントのフックは、そのフォルダを信頼する確認に同意してから動きます。社外から受け取ったプロジェクトを開くときは、中のフックを読んでから信頼するようにします。また、フックは作業中の環境変数を読めるので、鍵などの秘密の値をフックの出力に出さない書き方にします。

導入の順番:小さく始めて、1つずつ足す

いきなり多くのフックを入れると、どれが効いているのか分からなくなります。次の順番がおすすめです。

  1. まず権限の設定で、使ってよい道具・使ってはいけない道具を決める
  2. 「実行の前に止める」フックを1つだけ入れ、止めたい操作で本当に止まるかを試す
  3. 「終わったら知らせる」フックを足し、長い作業を待つ時間を減らす
  4. 必要になってから「実行のあとに記録する」フックを足す

サブエージェントを何人も並べて動かすときほど、止める・知らせる仕組みが効いてきます。サブエージェントの並べ方はClaude Codeのマルチエージェント入門、役割ごとの深さの選び方はサブエージェントのeffortとモデルの使い分けで解説しています。

そのまま使える指示文の例(フックの下書き)

フックの中身も、Claude Code に下書きさせられます。

このプロジェクトに、次のフックを追加したい。下書きを作って、私が確認してから保存して。
・ファイルを削除するコマンドの前に止めて、理由を表示する(終了コード2で止める)
・フック自体が失敗したときも止める(onFailure を block にする)
・秘密の値は表示しない
最後に、止まることを確かめる手順も書いて。

「確認してから保存」と書いておくと、設定が知らないうちに変わる心配が減ります。

よくある質問

プログラミングが分からなくても使えますか?

フックの中身は短いコマンドが多く、Claude Code に下書きを作らせて、説明を読みながら確かめる形で十分に始められます。止まることを自分の目で1回確かめるのが大事です。

権限の設定とフックは、どちらを先に入れますか?

権限の設定が先です。権限で「使ってよい・いけない」を決め、フックで「止まらなかったときの見張り」や「記録・通知」を足す順番にすると、役割が重なりません。

フックが原因で作業が遅くなりませんか?

フックが重いと、そのぶん作業が待たされます。止める役のフックは短く速い処理にし、時間のかかる記録や通知は、作業の終わり(Stop)にまとめると影響を小さくできます。

出典

永上裕之

ユニコスクール株式会社 代表取締役。AIエージェント専門のスクール&コミュニティを運営しています。

この記事はAIを使って下書きし、著者が事実確認・加筆しています。ツールの機能や料金は変わることがあるため、最新の情報は各社の公式ページでご確認ください。

関連する記事