タダです.
Claude Code に Hooks が追加されて話題になってたので概要や実際に触ってみたメモをまとめます.
/hooks Manage hook configurations for tool events
Claude Code Hooksとは
基本概念
Claude Code Hooks は Claude Code のライフサイクルの特定のタイミングで実行されるユーザー定義のシェルコマンドです.
主な使用例
ドキュメントにありますが,主なユースケースとして以下のものがあげられてます.
- 通知のカスタマイズ: Claude Code が入力を待っているときの通知方法を変更
- 自動フォーマット: ファイル編集後に
prettierやgofmtを自動実行 - ロギング:コンプライアンスまたはデバッグのために実行されたすべてのコマンドを追跡する
- フィードバック: コードベースの規約に従わないコードに対する自動フィードバック
- カスタム権限: 本番ファイルや機密ディレクトリへの変更をブロック
Hook イベントの種類
Hook イベントの種類についても簡単にまとめます.
PreToolUse: ツール呼び出しの前に実行されツールの実行をブロックしたり,フィードバックを提供できるPostToolUse: ツールが正常に完了した後に実行されるNotification:Claude Code が通知を送信するときに実行されるStop:Claude Code が応答を終了したときに実行されるSubagentStop: サブエージェントが応答を終了する直前に実行される
実際にHookを設定してみる
Bash コマンドのログを記録する Hooks を作成
ドキュメントに沿って Claude Code が実行するシェルコマンドをログに記録するシンプルな Hook を作ります.なお, jq を使うので事前にインストールしておく必要があります.
/hooks
スラッシュコマンドを実行して PreToolUse フックイベントを選択します. + Add new matcher...を選択し Bashと入力します.これにより Bash ツール呼び出しの前にのみ Hook が実行されます.

以下のコマンドを入力します.
jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt

保存場所としてUser settings を選択するとすべてのプロジェクトでこの Hook が有効になります.~/.claude/settings.json の設定を確認します.
cat ~/.claude/settings.json { "model": "opus", "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "jq -r '\"\\(.tool_input.command) - \\(.tool_input.description // \"No description\")\"' >> ~/.claude/bash-command-log.txt" } ] } ] } }
この状態で READMEをlsでみつけて という依頼をしてみた結果,Bash ツール実行時にログにも記録されました.
> READMEをlsでみつけて ⏺ Bash(ls | grep -i readme) ⎿ Error: /var/folders/n8/c4t37jqn3jd1yq_kshbfmskm0000gn/T/claude-shell-snapshot-9c88:5995: parse error near `()' ⏺ Search(pattern: "*README*") ⎿ Found 1 file (ctrl+r to expand) ⏺ README.md $ cat ~/.claude/bash-command-log.txt ls | grep -i readme - Find README files in current directory
まとめ
Claude Code の Hooks のことをさらいつつドキュメントに沿って設定してみました.