「Claude Codeに任せたら、本番のファイルを意図せず書き換えられてしまった」「AIが何をしているかわからなくて怖い」——Claude Codeを導入し始めたチームから、こういった声を私たちは繰り返し聞いています。Hooksはまさにこの問題を解決するための機能です。AIが何かアクションを起こす直前または直後に、あらかじめ決めた処理を自動で挟み込めます。設定ファイルを数行書くだけで、ファイル保存時の自動フォーマットや、危険なコマンド実行前の確認ダイアログを実現できます。
目次
- Claude Code Hooksとは何か
- なぜHooksが必要なのか
- 主要フックの種類と使い分け
- Hooksの設定方法
- 実務での活用例
- ファイル保存のたびに自動フォーマット
- 危険なコマンド実行前に確認を挟む
- Slackへの作業完了通知
- 操作ログの自動記録
- 非エンジニアが知っておくべき注意点
- この記事のポイント
- よくある質問(FAQ)
1. Claude Code Hooksとは何か
Claude CodeのHooks(フック)とは、AIが行うツール操作に対して「割り込み処理」を設定できる機能です。
プログラミングの世界では「フック(hook)」は「引っかける」という意味で使われます。ある処理の流れに対して、追加の処理を「引っかける」ように挿入できることから、この名前がついています。
たとえばClaude Codeが「ファイルを書き換える」という操作をしようとしたとき、その直前に「本当に実行してよいか確認する」処理を自動で挟む、といったことができます。
2. なぜHooksが必要なのか
Claude Codeを使い始めた多くのチームが最初にぶつかる壁は、「AIが勝手に動きすぎる」という感覚です。
指示した内容を実行してくれるのは便利ですが、本番環境のファイルを意図せず書き換えてしまったり、削除してはいけないデータを消してしまったりするリスクも生じます。
Hooksはこの問題に対する答えです。AIが何かしようとしたときに「待て」を入れる仕組みを持つことで、人間がコントロールを失わずにAIを活用できます。
私たちmalnaがClaude Codeを社内外で導入支援してきた経験では、Hooksの設定をしていないチームほど「思わぬ操作が起きた」と感じるケースが多く、逆にHooksを丁寧に設定したチームは安心して委任度を上げていけています。
3. 主要フックの種類と使い分け
Claude CodeのHooksには多数のイベント(フックの種類)が用意されています。非エンジニアの方がまず押さえておきたい主要なものを、タイミングごとに整理します(出典:Claude Code Docs「Hooks reference」)。
| 分類 | イベント | 実行タイミング |
|---|---|---|
| セッション単位 | SessionStart | セッション開始時 |
| セッション単位 | SessionEnd | セッション終了時 |
| ターン単位 | UserPromptSubmit | プロンプトを送信する前 |
| ターン単位 | Stop | Claudeの応答が完了したとき |
| ツール実行 | PreToolUse | ツール実行の直前(実行をブロックできる) |
| ツール実行 | PostToolUse | ツール実行が成功した後 |
| ツール実行 | PostToolUseFailure | ツール実行が失敗した後 |
| ツール実行 | PermissionRequest | 権限確認が発生したとき |
| その他 | PreCompact / PostCompact | 会話の圧縮(コンパクト化)の前後 |
| その他 | SubagentStart / SubagentStop | サブエージェントの開始・終了時 |
| その他 | Notification | Claudeからの通知発生時 |
このほかにもFileChanged(ファイル変更検知時)、ConfigChange(設定変更時)、PreModelSwitch(モデル切り替え前)など、多数のイベントが用意されています。全イベントの一覧は、公式ドキュメント「Hooks reference」を参照してください。
4. Hooksの設定方法
Hooksは、次のいずれかのsettingsファイルに記述します(出典:Claude Code Docs「Hooks reference」)。
| 設定ファイル | 適用範囲 |
|---|---|
~/.claude/settings.json | 全プロジェクト・自分だけ |
.claude/settings.json | そのプロジェクト・リポジトリで共有可能 |
.claude/settings.local.json | そのプロジェクト・自分だけ(gitignore対象) |
| 組織の管理ポリシー設定 | 組織全体 |
プラグインのhooks/hooks.json | プラグインが有効な範囲 |
設定の基本的な形は次のようになります。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/check.sh" }
]
}
]
}
}
- ハンドラの種類:
command(シェルコマンドを実行する。標準入力でJSONを受け取り、標準出力で結果を返す)、http、mcp_tool、prompt、agent(実験的機能)が指定できます - matcher(対象の指定):
"*"または省略で全ツールが対象になります。"Edit|Write"のように|で区切って複数のツール名を指定することもでき、正規表現も使えます
終了コードの意味
コマンド型のフックは、終了コード(exit code)によって挙動が変わります。
- 0(成功):標準出力がJSON形式であれば、その内容が解釈されます
- 2(ブロック):処理を止めます。PreToolUseであれば、そのツールの実行自体を止められます。理由は標準エラー出力、またはJSONの
permissionDecisionReasonで伝えられます - それ以外の非ゼロ:処理はブロックしませんが、エラーとして扱われます
セッション内で/hooksと入力すると、現在設定されているHooksの一覧を確認できます(読み取り専用の確認用コマンドで、変更は設定ファイルを直接編集する必要があります)。また、settingsでdisableAllHooks: trueを設定すると、組織の管理ポリシーによるHooksを除くすべてのHooksを無効化できます。
このような設定を書くのが難しいと感じる場合でも、claudecode道場のカリキュラムでは実際に動く設定テンプレートを提供しているため、コピーして使うだけで始められます。
5. 実務での活用例
ファイル保存のたびに自動でフォーマットをかける
コードを書いた後に「見た目を整える(フォーマット)」作業は、毎回手動でやると面倒です。PostToolUseフックを使えば、Claude Codeがファイルを書き換えた直後に自動でフォーマットコマンドを実行できます。
チームで作業する場合、全員が同じフォーマット設定を持っていれば、「誰が書いても同じ見た目になる」状態を維持できます。
危険なコマンドの実行前に確認を挟む
rm -rf(ファイルの強制削除)や本番データベースへのアクセスコマンドは、誤って実行すると取り返しがつきません。PreToolUseフックのcommandスクリプトが終了コード2を返すようにしておけば、そのコマンドの実行自体をブロックでき、AIが自律的に動いている場面でも人間が最終判断できます。
Slackへの作業完了通知
Claude Codeが長時間かかる処理を終えたとき、StopフックのcommandにSlack通知を送るスクリプトを指定しておくと、終わるまで画面を見ていなくても完了に気づけます。私たちの社内では、レポート生成タスクが完了したときに担当者のDMへ通知が届くよう、この仕組みを使っています。
操作ログの自動記録
何をいつAIに実行させたかの記録を残すことは、トラブル発生時の原因調査に役立ちます。PostToolUseフックで全操作をCSVやテキストファイルに記録しておくと、「いつ・何の操作が行われたか」をあとから追えます。
6. 非エンジニアが知っておくべき注意点
Hooksは強力な仕組みですが、設定を誤ると意図しない動作を引き起こすこともあります。
特に気をつけたい点は以下の3つです。
- PreToolUseでコマンドを止める設定は慎重に: 必要な処理まで止まってしまうと、Claude Code全体が動かなくなることがある
- ログファイルの肥大化: PostToolUseでログを書き続けると、ファイルが際限なく大きくなる。定期的な削除の設定もセットで入れること
- シークレット(APIキーなど)をコマンドに直書きしない: セキュリティ上のリスクになるため、環境変数を経由して渡す
- スクリプトの実行権限とパス: フックに指定するスクリプトファイルには
chmod +xで実行権限を与えておく必要がある。指定したパスが存在しない場合は警告だけでフックが実行されない(サイレントに無効化される)ため、/hooksで意図通り設定されているか確認すること
claudecode道場では、これらの落とし穴を避けるためのチェックリストと、実際にmalnaが使っているHooks設定テンプレートを公開しています。
7. この記事のポイント
- Hooksとは、AIの操作に「割り込み処理」を設定できるClaude Code固有の機能
- PreToolUseで実行前の制御、PostToolUseで実行後のログ・通知が実現できる
- セッション開始・プロンプト送信・ツール実行・サブエージェントなど、多数のイベントが用意されている
- 危険なコマンドへの確認挿入・Slack通知・操作ログ記録など、安全性と自動化を両立できる
- 設定は
~/.claude/settings.jsonや.claude/settings.jsonへのJSON記述で完了し、/hooksで設定内容を確認できる - Hooksなしでチームに展開すると「AIが勝手に動く」と感じるリスクが高くなる
よくある質問(FAQ)
Q. Hooksの設定にはプログラミングの知識が必要ですか?
A. JSON形式のテキストを編集できれば基本的な設定は可能です。ただし、実行するコマンドを自分で書くにはシェルの基礎知識が役立ちます。claudecode道場では、コピーして使えるテンプレートを提供しているため、知識がなくても始めることができます。
Q. HooksはClaude Codeのどのバージョンから使えますか?
A. Hooks機能はClaude Codeの主要バージョンで対応しています。最新の対応状況はAnthropicの公式ドキュメントをご確認ください。
Q. Hooksを設定しなくてもClaude Codeは使えますか?
A. 使えます。Hooksは任意の設定です。ただし、チームで使う場合や本番環境に近い作業を行う場合は、安全性の観点からHooksの設定を強くお勧めします。
Q. 設定したHooksが意図通りに動いているか確認する方法はありますか?
A. セッション内で/hooksと入力すると、現在設定されているHooksの一覧を確認できます。あわせてPostToolUseでログファイルに記録する設定にしておくと、実際の動作確認もしやすくなります。claudecode道場のカリキュラムでは、デバッグの手順も含めて解説しています。
Q. HooksとClaude Codeのスキル(カスタムコマンド)は何が違いますか?
A. スキルは「ユーザーが明示的に呼び出す処理」、HooksはClaude Codeの操作に「自動で割り込む処理」という違いがあります。両方を組み合わせることで、より細かい制御が可能になります。
組織全体でのClaude Code導入・安全設計の相談はmalnaのAI導入コンサルへ
claudecode道場で実践的なClaude Code研修を始める(無料公開中)
あわせて読みたい:




