Claude Code Hooksで開発ワークフローを自動化する
Hooksとは何か?どこに書くのか?
Section titled “Hooksとは何か?どこに書くのか?”Claude Codeのhooks機能を使うと、ツールの実行前後に独自のシェルコマンドを差し込めます。たとえば「ファイルを書き込む前にバックアップを取る」「コード生成後に自動でlintを走らせる」といった処理を、AIの操作に割り込んで実行できます。
設定は ~/.claude/settings.json(グローバル設定)またはプロジェクトルートの .claude/settings.json(プロジェクト設定)に記述します。まずはファイルを開いて、以下のような構造を追加しましょう。
{ "hooks": { "postToolUse": [ { "matcher": "Write", "hooks": [ { "type": "command", "command": "echo 'ファイルが書き込まれました: ' $CLAUDE_TOOL_INPUT_PATH" } ] } ] }}postToolUse はツール実行後に動くフック、matcher には対象のツール名(Write、Bash、Edit など)を指定します。
実践例:ファイル保存後に自動でlintを実行する
Section titled “実践例:ファイル保存後に自動でlintを実行する”実際の開発でよく使われるのが、ファイル書き込み後に自動でESLintを実行するパターンです。以下の設定を追加すると、ClaudeがJavaScript/TypeScriptファイルを書き込むたびにlintが走ります。
{ "hooks": { "postToolUse": [ { "matcher": "Write", "hooks": [ { "type": "command", "command": "npx eslint --fix $CLAUDE_TOOL_INPUT_PATH 2>&1 || true" } ] } ] }}$CLAUDE_TOOL_INPUT_PATH はClaude Codeが自動でセットする環境変数で、書き込まれたファイルのパスが入ります。|| true をつけることでlintエラーがあってもフック自体は失敗扱いにならず、処理が止まりません。
Bashツールにフックして作業ログを残す
Section titled “Bashツールにフックして作業ログを残す”もうひとつ便利な使い方が、Claudeが実行したBashコマンドをすべてログファイルに記録することです。あとから「何のコマンドが実行されたか」を追跡できます。
{ "hooks": { "postToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "echo \"$(date '+%Y-%m-%d %H:%M:%S') CMD: $CLAUDE_TOOL_INPUT_COMMAND\" >> ~/.claude/bash_history.log" } ] } ] }}このように設定しておくと、~/.claude/bash_history.log にタイムスタンプ付きでコマンドが蓄積されていきます。チーム開発でAIが何をしたかをレビューしたいときにも重宝します。hooksはシンプルなJSON設定だけで始められるので、まずは小さな自動化から試してみましょう。