はじめに
この記事では、ClaudeCodeのhooks(フック)について解説します!
hooksを使うことによって、ClaudeCodeに確実性のある処理を行わせることができ、AI駆動開発における品質・安全性の向上や特定の処理の定型化・自動化が可能になります!
この記事ではhooksの具体的な仕組みや種類を紹介したのちに、いくつかの例を用いてhooksについて解説します!
hooksの仕様は頻繁に更新されるため、公式リファレンスの最新情報を確認することをおすすめします
hooksとは?
hooksとは、ClaudeCodeのセッションにおいて特定のイベントが発生した時に自動で実行されるカスタムシェルコマンドです
特定のイベント(セッションの終了時や編集を始める時)が発生するときに、
ユーザが登録したBashコマンドや特定の処理を実行してしてくれる機能になります!
hooksは8種類用意されております。
| hooks名 | イベントの発火条件 |
|---|---|
| PreToolUse | ツールの実行前に実行する |
| PostToolUse | ツールの実行後に実行する |
| SessionStart | セッションが開始・再開された時に実行される |
| Stop | Claudeが会話を終了すると実行される |
| PermissionRequest | 許可を求めてくる前に実行される |
| PreCompact | コンテキストを圧縮する前に実行される |
| SubagentStop | サブエージェントが終了する時に実行される |
| UserPromptSubmit | プロンプトを送信すると実行される |
これらのhooksの設定は/hooksのスラッシュコマンドを使うか、.claude/settings.jsonに直接書き込むことで可能です。
(.claude/settings.local.jsonに設定することでローカルのみに提供なども可能)
実際の例
PostToolUse
ClaudeCodeが書き込み・編集を行った後にコードフォーマッタを実行するフック
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs ./scripts/format-java.sh"
}
]
}
]
}
}
#!/usr/bin/env sh
case "$1" in
*.java) ./gradlew -q spotlessApply ;;
esac
Stop
ClaudeCodeが対話を終了する際に、プロンプトで作業の内容を確認させる
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "prompt",
"prompt": "Review whether the task is complete. If all requirements are met, respond with 'complete'. If work remains, respond with 'continue' and specify what still needs to be done."
}
]
}
]
}
}
終わりに
hooksを使うことによって、
- コンテキストの忘却による不確実性を回避した処理実行
- 繰り返し動作を定型化・自動化
といったメリットを受けることができます!
Claude.mdに明示するだけではなく、確実なルールとしてhooksを整備することは、
AI駆動開発の生産性・安全性を高めることができると思います!
最後まで、読んでいただきありがとうございました!