Claude Code hooks(フック)とは——ライフサイクルの要所で確定的に自動実行する
Claude Code hooks(フック)は、Claude Codeのライフサイクルの特定の時点で自動実行されるユーザー定義のシェルコマンドで、「必ずこうなってほしい」をLLMの判断に頼らず確定的に実現する仕組み。定番イベントはSessionStart/UserPromptSubmit/PreToolUse/PostToolUse/Notification/Stop/SubagentStop/SessionEnd/PreCompactの9つで、PreToolUse等はブロック可能(保護ファイル編集や危険コマンドを止められる)。設定はsettings.jsonの"hooks"キーにイベント名→マッチャ→type+commandの形で記述。入出力はstdinにJSON(session_id・tool_input等)を受け取り、終了コード0(成功)/2(ブロック、stderrがClaudeに渡る)または構造化JSON(continue・decision:block・permissionDecision:deny/allow/ask等)で返す。原則は「制限はきつくできるが緩くできない」(denyは常に優先、bypassPermissionsでも止まる。ただしプラグインのmodは覆せる場合がある)。定番ユースケースは編集後の自動整形(PostToolUse+Edit|Write)・保護ファイル防御・危険コマンド阻止・コンテキスト再注入(SessionStart)・通知/監査ログ・終了前テスト(Stop)。安全面では任意のシェルコマンドを自分の権限で実行するため信頼できるフックだけを設定し、入力の検証/クォート・機微ファイル回避が必須。対話型のセッションでは、フォルダを信頼するまで設定ファイルのフックは走らない(安全機構)。設定ファイルを直接編集した変更は通常自動で反映される。公式ドキュメントに基づき、定番9イベントと入出力契約を軸に整理する。