Claude Codeを使って開発をする際に、開発を進めてもらっている間に他のことをできるといいなと思ったので、Claude Code Hooksを使って通知を受け取れるようにした。
Claude Code Hooks
Claude Code フックは、Claude Code のライフサイクルのさまざまなポイントで実行されるユーザー定義のシェルコマンドです。
フックのユースケース例には以下が含まれます:
- 通知: Claude Code があなたの入力または何かを実行する許可を待っているときに、通知を受け取る方法をカスタマイズします。
- 自動フォーマット: すべてのファイル編集後に、.ts ファイルで prettier を実行し、.go ファイルで gofmt を実行するなど。
- ログ記録: コンプライアンスまたはデバッグのために、実行されたすべてのコマンドを追跡およびカウントします。
- フィードバック: Claude Code がコードベースの規約に従わないコードを生成したときに、自動フィードバックを提供します。
- カスタム権限: 本番ファイルまたは機密ディレクトリへの変更をブロックします。
Claude Code Hooksはドキュメントにあるように、任意のライフサイクルのポイントで任意のコマンドを実行できる機能です。
ユースーケースの例にあるように、通知にも使えるので、今回はこれを使って、完了通知を受け取る設定をします。
設定
~/.claude/settings.json- ユーザー設定.claude/settings.json- プロジェクト設定.claude/settings.local.json- ローカルプロジェクト設定(コミットされない)
Hooksの設定は上記のいずれかの設定ファイルで設定できます。
いくつかHookイベントがありますが、今回は
- Notification
- Stop
の2つで設定をします。
他のHookイベントは次のドキュメントから確認できます。
また、今回はterminal-notifierを使って通知を送るようにします。
実際に設定したファイルは次のようになります。
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "terminal-notifier -title 'Claude Code sent notification' -message \"${CLAUDE_PROJECT_DIR}\" -sound default"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "terminal-notifier -title 'Claude Code stopped' -message \"${CLAUDE_PROJECT_DIR}\" -sound default"
}
]
}
]
}
}
工夫しているポイントとしては、今後並列して複数のプロジェクトでClaude Codeを使った開発を行っていくと予想し、CLAUDE_PROJECT_DIRを使い、どのプロジェクトから通知が来たかをわかるようにしています。
最後に
最近、Google AI ProをやめてClaudeのProプランを始めてみたので、なるべく活用していこうと思います。
また、自分の設定がある程度固まってきたらpluginをつくりたいなと思います。