Skip to content

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 には対象のツール名(WriteBashEdit など)を指定します。

Hooks: Claude Codeの特定の操作(ツール実行前後など)に独自のシェルコマンドを自動実行できる設定機能。

実践例:ファイル保存後に自動で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エラーがあってもフック自体は失敗扱いにならず、処理が止まりません。

TypeScript: JavaScriptに型定義を追加した言語。型チェックによりバグを事前に発見しやすくなる。環境変数: APIキーやデータベース接続情報など、コードに直接書きたくない値をOSやサーバーに設定する仕組み。

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設定だけで始められるので、まずは小さな自動化から試してみましょう。