AIノウハウ

Claude Codeのフック(hooks)とは?できること・設定方法【2026年】

くらべてナビ

Claude Codeのフック(hooks)を非エンジニア目線で解説。「必ず実行される自動ルール」としての位置づけ、PreToolUse/PostToolUseなど代表イベント、settings.jsonへの最小設定例、exit 2でのブロックまで。CLAUDE.mdとの使い分けも整理しました。

結論

フック(hooks)は「Claude Codeの決まったタイミングで、必ず実行される自動ルール」。CLAUDE.mdが"お願い"なのに対し、フックはLLMの判断に頼らず機械的に動くので、絶対に守らせたいこと(危険なコマンドの禁止・編集後の自動フォーマットなど)に向いています。設定はsettings.jsonのhooksブロックに書くだけです。

Claude Codeに「このフォルダは触らないで」とCLAUDE.mdに書いても、ごくたまに守られないことがあります。公式ドキュメントも「CLAUDE.mdはコンテキストであって強制ではない」という立場です。そこで用意されているのがフック(hooks)。動作の節目(ライフサイクルの特定時点)で実行される、ユーザー定義のシェルコマンドです。AIの気分に左右されず決定論的に(=毎回必ず同じように)動くのが最大の特徴です。

実体験メモ

非エンジニアの私は、CLAUDE.mdに「勝手にコミットしないで」と書いて運用していましたが、「書いたのに守られなかったらどうしよう」という不安は残っていました。フックを知って、「お願い(CLAUDE.md)と強制(フック)は別の仕組み」と整理できたのが大きな収穫。プログラミングは書けなくても、公式の例をコピペして通知を鳴らすくらいなら私でもできました。

フックは「自動で実行されるコマンド」です

フックは確認なしにシェルコマンドを実行する仕組みです。ネットで拾った設定を中身を理解しないまま貼り付けるのは避け、自分が意味を説明できるものだけを設定しましょう。書式や挙動の最新仕様は必ず公式ドキュメントで確認してください。

フック(hooks)とは

フックは、Claude Codeのライフサイクル(セッション開始、ツール実行の前後、応答完了など)の特定時点で自動実行されるユーザー定義のシェルコマンドです。ポイントは、実行するかどうかをLLMの判断に頼らないこと。条件に合えば必ず動きます。

💡 イメージは「職場の入退室ゲート」。口頭ルール(CLAUDE.md)は破られる可能性がありますが、ゲート(フック)は物理的に通さない。この確実さが違いです。

フックでできること

公式が挙げている代表的な使い道は次のとおりです。

イベントは約30種類。代表はこの7つ

フックを差し込めるイベント(タイミング)は約30種類ありますが、まず覚えるのは代表的なものだけで十分です。

イベントタイミング用途の例
SessionStartセッション開始時環境情報などのコンテキスト注入
UserPromptSubmitプロンプト送信時入力への情報追加・チェック
PreToolUseツール実行の直前危険な操作のブロック(実行前に止められる)
PostToolUseツール実行の直後編集後の自動フォーマット・通知
Notification通知の発生時音を鳴らす・外部に知らせる
Stop応答完了時完了の通知
PreCompactコンテキスト圧縮の直前圧縮前に必要な処理を挟む

matcherを使うと、対象のツールを名前で絞り込めます。たとえば "Edit|Write" と書けば「ファイル編集か書き込みのときだけ」フックが動きます。

設定方法:settings.jsonのhooksブロック

フックはsettings.jsonのhooksブロックに書きます。置き場所は3つです。

置き場所適用範囲
~/.claude/settings.json全プロジェクト共通(自分全体)
.claude/settings.jsonそのプロジェクト(チーム共有)
.claude/settings.local.jsonそのプロジェクトの自分だけ

最小の例を1つ。「ファイルを編集・書き込みするたびに、確認用のコマンドを1つ実行する」設定はこう書きます。

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'ファイルが変更されました' >> ~/claude-edits.log"
          }
        ]
      }
    ]
  }
}

これで、Claudeがファイルを編集するたびにログへ1行追記されます。ここを自動フォーマットのコマンドに差し替えれば「編集後に必ず整形」が実現します。設定済みのフックは /hooks コマンドで一覧できます(閲覧は読み取り専用)。すべてのフックを一時停止したいときは、設定に disableAllHooks: true を入れます。

ブロックの仕組み:exit 0とexit 2

フックのコマンドには、イベントのデータがJSONでstdin(標準入力)から渡されます。そしてコマンドの終了コードで挙動が決まります。

つまりPreToolUseフックで「条件に合ったらexit 2で終了する」スクリプトを用意すれば、危険な操作を実行される前に確実に止められます。

重要な性質がもうひとつ。PreToolUseのdeny(拒否)は、bypassPermissionsモードでも有効です。フックは権限の制限を強めることはできても、緩めることはできない設計になっています。

typeは5種類(commandだけ覚えればOK)

フックの実行方法(type)は5種類あります。ほとんどの用途は command で足ります。

type内容
commandシェルコマンドを実行(基本はこれ)
httpHTTP経由で外部に処理を渡す
mcp_toolMCPツールを呼び出す
promptHaikuモデルの単発判定に委ねる
agentエージェントに判断させる(実験的)

prompt は「機械的な条件では書きにくいが、軽いAI判断で足りる」場合の選択肢です。それぞれの詳細な書式は公式ドキュメントを参照してください。

CLAUDE.mdとの使い分け

伝えたいこと使う仕組み
方針・前提・好み(「日本語で」「この構成で」)CLAUDE.md
絶対に守らせたいルール(「本番を触らない」「勝手にコミットしない」)フック(PreToolUse)
作業後に毎回やること(フォーマット・通知)フック(PostToolUse)

なお、フックで縛る前に「そもそも指示が曖昧で暴走している」ケースも多いです。指示文そのものを整えたい方は、無料のAIプロンプトビルダーで依頼文を組み立ててから投げるのもおすすめです。

まとめ

関連記事:Claude Codeの全体像は Claude Codeとは?、“お願い”側の整え方は CLAUDE.mdの書き方、権限まわりは Plan modeと権限モード6種 もどうぞ。カテゴリ一覧は AI活用・ノウハウ へ。

よくある質問(FAQ)

フックとCLAUDE.mdはどう使い分ければいいですか?

CLAUDE.mdはClaudeが読んで従おうとする「お願い」で、100%の遵守は保証されません。フックはライフサイクルの決まった時点で必ず実行されるシェルコマンドなので、「勝手なコミットの禁止」のように確実に守らせたいルールはフック、方針や前提の共有はCLAUDE.md、と分けるのが基本です。

フックはどこに設定しますか?

settings.jsonのhooksブロックに書きます。置き場所は3つで、全プロジェクト共通なら ~/.claude/settings.json、チームで共有するプロジェクト用なら .claude/settings.json、自分だけのプロジェクト用なら .claude/settings.local.json です。設定済みのフックは /hooks コマンドで閲覧できます(読み取り専用)。

フックで危険な操作をブロックするにはどうしますか?

PreToolUseイベントを使います。ツール実行の直前に呼ばれ、フックがexit 2で終了するとその操作はブロックされ、stderrの内容がClaudeへのフィードバックとして渡されます。exit 0なら続行です。PreToolUseのdenyはbypassPermissionsモードでも有効で、フックは制限を強めることはできても緩めることはできません。

フックを一時的に全部止めることはできますか?

できます。設定に disableAllHooks: true を入れると、すべてのフックを無効化できます。個別の見直しは settings.json のhooksブロックを直接編集します。書式の最新仕様は公式ドキュメント(hooks-guide)で確認してください。