Claude Code Hooksとは?Slackと連携させてみた
はじめに
Claude Codeから「Hooks」という概念が登場しました。
Claude Code Hooksとは?
Hooksは、Claude Codeの特定のタイミングでコマンドを実行できるようにする機能です。
これは、例えば以下のようなイベント発生時に、ユーザーが設定した処理を自動的に実行できる仕組みです。
- PreToolUse: ツールが呼び出される前
- PostToolUse: ツールが正常に完了した後
- Notification: 通知が送られる時(例: 承認リクエスト時)
- Stop / SubagentStop: メインエージェントまたはサブエージェントの応答が完了した時(例: タスク完了時)
Hooksを使うことで、Claude Codeが生成するコードやその実行プロセスに対して、開発者が独自のロジックを挿入し、より細かく制御することが可能になります。
Claude Code Hooks + Slack
普段使っているSlackと連携して、Claude Code Hooksを体験してみましょう。簡易ではありますが、Claude Codeが承認待ちのときにSlackで通知してくれるものを作ってみましょう。
Slack Webhook URLの取得
まずはSlackのWebhook URLを取得しましょう。以下の記事がとてもわかりやすいので、参考になります。
Webhook URLが手に入ったら、実際に**curlコマンドを使ってSlackに通知が届くか試してみましょう。
curl -X POST -H 'Content-type: application/json' -d '{"text":"テスト通知"}' <WEBHOOK_URL>

実際に通知がくることが確認できたらClaude Code Hooksに登録しましょう。
/hooksでコマンドを登録
今回は承認待ちのときにSlackへ通知して欲しいので、Notificationを選択します。

「+ Add new hook...」をEnterすると画像のとおり、Commandを入力する画面になります。
以下のコマンドを入力します。
curl -X POST -H 'Content-type: application/json' --data '{"text":"🤖 Claude Codeが入力を待っています"}' <WEBHOOK_URL>

以上です。簡単ですね。
通知がきてるかテスト
実際に通知が来るかテストしてみます。


問題なく通知が来ました。これまでの流れを通して、とても簡単に通知を送るまでに至りました。
登録したCommandの場所
「+ Add new hook...」からCommandを追加しました。どこへ登録されるのでしょうか。ドキュメントによると、/hooksで登録したコマンドは以下の設定ファイルに保存されます:
保存場所の選択肢:
-
~/.claude/settings.json- ユーザー設定- すべてのプロジェクトに適用される
- ホームディレクトリに保存
-
.claude/settings.json- プロジェクト設定- 特定のプロジェクトのみに適用
- プロジェクトルートに保存(コミット対象)
-
.claude/settings.local.json- ローカルプロジェクト設定- 特定のプロジェクトのみに適用
- プロジェクトルートに保存(コミットされない)
設定ファイルの構造例:
{
"hooks": {
"preToolUse": {
"Bash": [
{
"type": "command",
"command": "echo \"$(date): Running $(echo \"$CLAUDE_INPUT\" | jq -r .tool_name) with args: $(echo \"$CLAUDE_INPUT\" | jq -r .tool_input)\" >> ~/claude_commands.log"
}
]
}
}
}
ドキュメントのQuickstartの例では、User settingsを選択することで~/.claude/settings.jsonに保存され、すべてのプロジェクトで有効になることが示されています。
設定を確認したい場合は、再度/hooksコマンドを実行するか、直接該当する設定ファイルを確認できます。
[Tips]Hooksによるフィードバック
Hooksを使用することで生成したコードにフィードバックを与えることもできます。
PostToolUseフックを使って、ファイル作成後に英語への翻訳を促すフィードバックを送る設定を作成します。
「こんにちは世界」と書いたgreeting.txtを作成して
とClaudeにお願いしてみましょう。
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "echo \"[$(date)] Hook triggered\" >> ~/hook_test.log && echo '{\"decision\": \"block\", \"reason\": \"日本語ファイルを検出しました。英語版で作成してください。\"}'"
}
]
}
]
}
}

日本語を検知してHooksによるフィードバック与え、修正させることができました。
この仕組みは、Lintやフォーマッターとの連携にも活用できます。例えば、BiomeやESLintを実行した際に自動修正できないエラーが検出された場合、そのエラー内容をフィードバックとしてClaudeに送信することで、自動的に修正を促すワークフローを構築できます。
まとめ
Claude Code Hooksを使うことで、開発ワークフローを簡単に自動化できることがわかりました。
今回できたこと:
- Slack通知でClaude Codeの承認待ちを見逃さない
- 生成されたコードに自動でフィードバックを送る
Hooksは効率的にする強力なツールとなりそうです。シンプルな設定から始めて、徐々に自分のワークフローに合わせてカスタマイズしていきましょう。
より複雑な自動化へ挑戦していきたいです。
Discussion