💭
Claude Code の Hooks を理解するために/hooksを使った登録まで日本語でまとめる
まえおき
執筆時点でclaude codeのバージョン 1.0.40でした。
バージョン凄い勢いで上がってますね。
昨日のバージョン1.0.38で追加された Hooks について、日本語のまとめが欲しかったのでまとめます。
Claude Code Hooks
公式ドキュメントから抜粋
Hooks(フック)とは
シェルコマンドを登録してClaude Codeの動作をカスタマイズおよび拡張します
導入
Claude Codeフックは、Claude Codeのライフサイクルの様々なポイントで実行されるユーザー定義のシェルコマンドです。フックはClaude Codeの動作を決定論的に制御し、LLMによる実行判断に依存せずに、特定のアクションが常に実行されるようにします。
使用例には次のようなものがあります:
- 通知: Claude Code が入力または何かを実行する許可を待機しているときに通知を受け取る方法をカスタマイズします。
- 自動フォーマット:ファイル編集のたびにprettier.ts ファイル、.go ファイルなどで実行します。gofmt
- ログ記録: コンプライアンスまたはデバッグのために、実行されたすべてのコマンドを追跡してカウントします。
- フィードバック: Claude Code がコードベースの規則に従わないコードを生成した場合に、自動フィードバックを提供します。
- カスタム権限: 運用ファイルまたは機密ディレクトリへの変更をブロックします。
これらのルールを、指示を求めるのではなくフックとしてエンコードすることで、実行が予想されるたびに実行されるアプリレベルのコードに提案を変換します
とりあえず見てみる
とりあえずヘルプを見たいので、PowerShellを開いてWSL>ClaudeCodeに入って「/hooks」を入力してエンター押します
- PowerShell(Windows)
wsl
- PowerShell(WSL)
claude
- PowerShell(ClaudeCode)
/hooks
以下のようなHookコンフィグが出てきますが、英語なんで翻訳します。
- Hookで利用できるのはシェルだよという説明
Claude Codeの処理中に実行するように登録できるシェルコマンドです。
• 各フックイベントには、それぞれ独自の入力および出力の動作があります
• イベントごとに複数のフックを登録でき、それらは並行して実行されます
• /hooks 以外でフックに変更を加えた場合は、再起動が必要です
• タイムアウト: 60秒
- Hookの利用は自己責任のだよという趣旨
フックの安全性とセキュリティを確保することは、お客様自身の責任です
• フックは、あなたのユーザーアカウントがアクセスできるすべてのファイルを変更、削除、またはアクセスできます
• 悪意のある、または不適切に作成されたフックは、回復不可能なデータ損失やシステムの損傷を引き起こす可能性があります
• Anthropicは、フックの使用に起因するいかなる損害についても、一切の保証を提供せず、一切の責任を負いません
• データ漏洩を防ぐため、信頼できるソースからのフックのみを使用してください
• 続行する前に、フックのドキュメント (https://docs.anthropic.com/en/docs/claude-code/hooks) を確認してください
- 設定するHookの選択
1. PreToolUse - ツール実行前
2. PostToolUse - ツール実行後
3. Notification - 通知送信時
4. Stop - Claudeが応答を完了する直前
各Hookのタイミング
PreToolUse - ツール実行前
PreToolUse - ツールマッチャー
コマンドへの入力は、ツール呼び出し引数のJSONです。
終了コード 0 - 標準出力/標準エラー出力は表示されません
終了コード 2 - モデルに標準エラー出力を表示し、ツール呼び出しをブロックします
その他の終了コード - ユーザーにのみ標準エラー出力を表示しますが、ツール呼び出しは続行します
PostToolUse - ツール実行後
PostToolUse - ツールマッチャー
コマンドへの入力は、"inputs" (ツール呼び出し引数) と "response" (ツール呼び出しの応答) のフィールドを持つJSONです。
終了コード 0 - 標準出力がトランスクリプトモード (Ctrl-R) で表示されます
終了コード 2 - モデルに直ちに標準エラー出力を表示します
その他の終了コード - ユーザーにのみ標準エラー出力を表示します
Notification - 通知送信時
通知
Stop - Claudeが応答を完了する直前
停止
終了コード 0 - 標準出力/標準エラー出力は表示されません
終了コード 2 - モデルに標準エラー出力を表示し、会話を続行します
その他の終了コード - ユーザーにのみ標準エラー出力を表示します
実際のHookを設定してみる
まずは、登録
どれも説明だけでは不明なので、今回は「Stop」のタイミングにHookしてみます。
以下を選択
4. Stop - Right before Claude concludes its response
初回なので1つしかないですが Add new hook...を選択
1. + Add new hook… No hooks configured yet
親切にExamplesがありますね。
保存するコンフィグを選択(今回はローカル)
1. Project settings (local) Saved in .claude/settings.local.json
登録確認
先ほどローカルに保存したので一旦ClaudeCodeから抜けます
/exit
カレントディレクトリある「.claude/settings.local.json」の内容を確認します
cat ./.claude/settings.local.json
ありました。登録されています~
登録までの完了
次回は、実際にHook動かしてみます
Discussion