Claude Codeには、権限の設定とは別に、決まったタイミングで自動的に動く仕掛けがあります。「Hooks(フック)」と呼ばれる機能で、危険な操作を実行前に止めたり、作業の結果を自動で検査したりできます。お願いとして伝えるルールと違い、Claude Codeの判断に左右されずに必ず動くため、確実に制御したい場面で役立つと考えられます。
Oikon・前川蒼『Claude Code実践入門 Agentic Coding』(SBクリエイティブ)を参考にして。
「Hooks」は、セッションの節目で自動実行される仕掛け
権限のルールより強く働く
「Hooks」は、セッションの開始やツールの実行といった節目で自動的に実行されるアクションです。
実行されるのは、コマンドやプロンプト(Claude Codeへの指示文)などです。
権限の設定(allow・ask・deny)は、操作を許可するか拒否するかをルールで決めるものです。
これに対して「Hooks」は、決まったタイミングでコードを実行できるため、権限のルールよりも強い制御を加えられます。
動作を「お願い」ではなく「仕組み」で縛りたいときに向く機能です。
動き出すきっかけは3つのグループ
Hooksが動き出すきっかけは「イベント」と呼ばれ、セッションの流れに沿って次のように分かれます。
- セッションの節目
「SessionStart」と「SessionEnd」はセッションの開始時と終了時に、「UserPromptSubmit」はプロンプトを送るたびに、「Stop」はClaude Codeが応答を終えるたびに実行されます - ツール実行のループ
ツールを呼び出すたびに、「PreToolUse(実行前)」、「ツール実行」、「PostToolUse(成功後)」の3ステップを繰り返します。入力内容のチェックや結果の検証は、ここに差し込めます - 順番が決まっていないイベント
通知、設定の変更、サブエージェントの開始・停止などです。種類が多く、アップデートで変わることもあります

設定は「イベント・マッチャー・ハンドラ」の3層で書く
3つの要素の役割
Hooksは、設定ファイル(settings.json)のhooksという項目に書きます。
構造は次の3層です。
- イベント
いつ実行するか(例:PreToolUse、UserPromptSubmit)。
大きくは、セッションの節目・ツール実行のループ・順番が決まっていないものの3グループに分かれる。 - マッチャー
どの条件で絞るか。
ツール名などを文字パターンで指定、Bash(コマンドの実行)だけ、WriteまたはEdit(ファイルの書き込み・編集)だけ、すべてのMCPツールだけ、といった絞り込みができる。 - ハンドラ
何を実行するか。
(command・prompt・agent・http・mcp_tool)

止められるイベントと止められないイベント
同じイベントでも、実行を止められるかどうかは種類によって違います。主なものは次のとおりです。
| イベント | 実行されるタイミング | 止められるか |
|---|---|---|
| SessionStart | セッションの開始・再開時 | 止められない |
| UserPromptSubmit | プロンプトの送信直後、処理の前 | 止められる(プロンプトを破棄) |
| PreToolUse | ツールを呼び出す前 | 止められる(ツールの実行をブロック) |
| PostToolUse | ツールの実行が成功した後 | 止められない(実行済み。エラー出力はClaude Codeに伝わる) |
| Notification | Claude Codeが通知を送るとき | 止められない |
| Stop | Claude Codeが応答を終えたとき | 止められる(応答の完了を阻止し、会話を続けさせる) |
| SessionEnd | セッションの終了時 | 止められない |
PostToolUseは、ツールが実行された後に動くため、すでに行われた操作を取り消せません。
止めたい操作は、実行前のPreToolUseで押さえる必要があります。
ハンドラは5種類、結果は終了コードで返す
ハンドラには、次の5種類があります。
- command
シェルコマンドを実行する。通知の送信やファイルのチェックに使う - prompt
Claudeのモデルに一度だけ評価させ、許可か拒否かを返させる - agent
サブエージェントが複数のターンをかけて検証する。テスト結果の確認などに使う - http
指定したURLへ情報を送り、外部サービスと連携する - mcp_tool
接続済みのMCP(外部のサービスとつなぐ仕組み)のツールを直接呼び出す
最もよく使われるのはcommandで、結果は終了コード(処理の成否を伝える数字)で返します。
- 0(成功)
処理は通常どおり進む。多くのイベントでは画面に表示されず、デバッグ用の記録に残る - 2(ブロック)
ツールの実行やプロンプトの処理を止め、エラー出力の内容をClaude Codeに伝える - その他(ブロックしないエラー)
処理は続け、エラーとして表示する
実行前のHooksが拒否を返すか、終了コード2を返すと、権限の確認をすべて省く「Bypass Permissionsモード」でも実行はブロックされます。
権限の設定よりも強い強制力を持つ、ということです。
「編集後の検査」と「実行前の差し止め」を組み合わせる
品質ゲートとしての2つのHooks
書籍では、2つのHooksを組み合わせて、Claude Codeが書いたコードの品質ゲート(基準を満たさないものを通さない関門)を作っていました。
- 編集後に自動で検査
PostToolUse(Edit、Write)で、ファイルが書き換わったときだけ文法チェックとテストを自動で実行。失敗した内容はClaude Codeに返され、修正を促す。 - 実行前に危険な操作を差し止め
PreToolUse(Bash)で、強制削除・強制的なプッシュ・管理者権限での実行といった取り返しのつかない操作を止める。
「どのファイルのときだけ動かすか」は、受け取った入力からファイルの場所を取り出し、拡張子で判断して絞り込む仕組みのようです。
設定ファイルや説明書の編集では検査を省き、コードを変えたときだけ走らせる、といった使い方もできるようです。

実行前に止められたとき、Claude Codeは伝えられた理由を踏まえて、別の手段を考え直します。
止めるだけでなく、次の行動を促す効果もあります。
権限の設定と重ねて二段構えにする
実行前のHooksは、Bypass Permissionsモードが有効であっても、効力を持ちます。
よって、権限の設定とHooksを組み合わせると、「権限は通っても、Hooksで止まる」という二段の防御線を張ることができます。
作るときに押さえておく点
Hooksの作り方は、Claude Codeに依頼する方法と、設定ファイルを直接編集する方法の2つ。
例えば、「止まったときにデスクトップ通知を表示するHooksを作って」と伝えるだけで、設定ファイルへの追加まで進みます。
慣れるまでは設定が難しく感じやすいため、Claude Codeに相談しながら進めるほうが、意図したものを作りやすいです。
注意したいのは、スクリプトに実行権限がないとHooksは起動せず、エラーも目立たないまま素通りしてしまう点です。
そして、設定したあとは、実際にClaude Codeへ指示を出し、動作を確かめます。
当事務所での使い方
当事務所では、Hooksを次の3つの役割で使っています。
- 実行前に止める
削除や認証情報の持ち出しにつながる操作を、Claude Codeの判断に関係なく、実行前に自動で止めています - 実行後に記録する
会計ソフトへの書き込みを、1件ずつ自動で記録しています - 素通りに気づく
Hooksにエラーが起きても作業は止まらない作りにしているため、効かなくなっていることに後から気づけるよう、エラーの痕跡を残しています
権限の設定で外枠を決めて、確実に止めたい場面と残しておきたい記録をHooksで補う、という役割分担で考えています。
