フック
決まった操作をきっかけに自動で動く仕組み
このページのまとめ
フックは 「特定の出来事が起きたら自動でこれを実行する」設定です。~/.claude/settings.json に JSON 形式で記述します。PreToolUse(ツール実行前)・PostToolUse(ツール実行後)・Stop(セッション終了時)の 3 種類があります。 ファイル保存後の自動 Lint・コミット前のテスト確認・危険コマンドのブロックなど、Claude Code への指示なしで定型作業を完全自動化できます。
フックは、「ある出来事が起きたら、自動でこれを実行する」という設定です。 ファイルを保存したとき・コミットする前・コマンドを実行する前など、 タイミングを指定してスクリプトを自動実行できます。 普段 Claude Code に頼んでいる定型作業を、指示なしで自動化できるのが最大のメリットです。
例えば「コードを保存するたびに自動でフォーマット(整形)する」「コミット前に必ずテストを実行する」 といった作業を完全自動化できます。スキルが「指示書を呼び出す」仕組みであるのに対し、フックは「特定のタイミングで自動起動する」仕組みです。 組み合わせることで、スキルをフックで自動呼び出す高度な自動化も実現できます。
フックの種類
Claude Code のフックには用途に応じていくつかの種類があります。PreToolUse(ツール実行前)は、Claude がファイル書き込みやシェルコマンドを実行する直前に動きます。 危険なコマンドの検知・ブロックや、実行前の確認に使えます。PostToolUse(ツール実行後)は、ファイル変更後に自動でフォーマッターを走らせるといった後処理に使います。Stop(セッション終了時)は、Claude Code が応答を終えた後に通知を送ったりログを記録したりするのに使えます。
| フック名 | タイミング | 主な用途 |
|---|---|---|
| PreToolUse | ツール実行の直前 | 危険コマンドのブロック・実行前バリデーション |
| PostToolUse | ツール実行の直後 | 自動フォーマット・Lint・テスト実行 |
| Stop | Claude が応答を終えたとき | Slack 通知・ログ記録・完了報告 |
設定ファイルへの記述
フックは Claude Code の設定ファイル(~/.claude/settings.json)に JSON 形式で記述します。 「どのタイミングで(hooks のキー)」「どのコマンドを(command)」実行するかを指定するだけです。 設定後は Claude Code を再起動すると有効になります。 スクリプトの実行権限の付与を忘れずに行いましょう(chmod +x スクリプト名)。
フックに渡されるスクリプトは終了コードで Claude Code の動作を制御します。 終了コード 0 は正常終了、非 0 はエラーとして扱われます。PreToolUse フックで非 0 を返すと Claude Code はそのツール実行をキャンセルし、 危険なコマンドのブロックに利用できます。標準出力に書いたメッセージは Claude に直接渡されるため、 ブロック理由の説明や代替案を返すことも可能です。
フックで自動化できることの具体例
- ファイル保存時→ Lint(コードの品質チェック)・フォーマッターを自動実行
- コミット前→ テストが通るか確認し、失敗したらコミットをブロック
- コード変更時→ パスワード等の機密情報が含まれていないかスキャン
- コマンド実行前→ 危険なコマンド(rm -rf など)を検知してブロック
- セッション終了時→ Slack や通知ツールに作業完了を自動送信
フック設定ファイルの記述例(ESLint)
以下は ~/.claude/settings.json にフックを設定する例です。ファイル書き込み後に自動で ESLint を実行します。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "npx eslint --fix $CLAUDE_TOOL_INPUT_FILE_PATH"
}
]
}
]
}
}フックのその他の設定例(Prettier・セキュリティ)
Prettier で自動フォーマット(PostToolUse)
ファイルを書き込むたびに Prettier が自動で整形します。手動でフォーマットする手間が完全になくなります。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "npx prettier --write $CLAUDE_TOOL_INPUT_FILE_PATH"
}
]
}
]
}
}危険コマンドのブロック(PreToolUse)
rm -rf など取り消しのきかないコマンドを Claude が実行しようとしたとき、事前に止めることができます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "bash ~/scripts/check-dangerous-cmd.sh"
}
]
}
]
}
}フックの導入手順(3ステップ)
スクリプトを用意する
Claude Navi または GitHub で使いたいフックのスクリプトファイルを見つけてダウンロードします。自作する場合は任意の言語で実行可能なスクリプトを書きます。
設定ファイルに追記する
Claude Code の設定ファイル(~/.claude/settings.json)の hooks 欄に「どのタイミングで(PostToolUse 等)」「何を実行するか(command)」を追記します。
Claude Code を再起動して確認する
設定したタイミングが来ると Claude Code が自動でスクリプトを実行します。まずは安全な PostToolUse フックから試すのがおすすめです。
よくある質問
フックはどこに設定しますか?
~/.claude/settings.json(全プロジェクト共通のグローバル設定)に記述します。プロジェクト固有の設定は .claude/settings.json に書くこともできます。
フックのスクリプトはどの言語で書けますか?
Bash・Python・Node.js など、実行可能なスクリプトであれば言語は問いません。スクリプトファイルには実行権限(chmod +x)を付与してください。
PreToolUse でコマンドをブロックするにはどうすればよいですか?
スクリプトが終了コード 0 以外(非ゼロ)を返すと、Claude Code はそのツール実行をキャンセルします。標準出力に書いたメッセージはブロック理由として Claude に渡されます。
フックの設定を反映するには再起動が必要ですか?
はい、設定変更後は Claude Code を再起動すると有効になります。
スキルとフックはどう使い分けますか?
スキルは「/スキル名 と入力して手動で呼び出す指示書」です。フックは「特定のイベントが起きたら自動で実行される処理」です。組み合わせることで、スキルをフックで自動呼び出す高度な自動化も実現できます。