【ClaudeCode】hooks機能を使ってセッション終了をSlackに通知させる

technologies

はじめに

みなさま、初めまして!ベンジャミンの小谷と申します。
最近Copilot AgentからClaudeCodeに移行しましたが、あまりにも機能が多く提供されており、キャッチアップが楽しくて仕方ない日々を過ごしています。

今回はClaudeCodeの新機能、hooksを使ってエージェントのセッション終了をSlackやPCに通知させる方法をご紹介したいと思います。

ClaudeCodeをバックグラウンドで動かして別作業を進めて、終わったタイミングで通知を受け取りすぐに結果を確認するといった便利な使い方が簡単に出来るので、是非導入してみてください!

⚓️ hooksとは?

Claude Codeのライフサイクルの様々なポイントで実行されるユーザー定義のシェルコマンドです。
hooksは任意のシェルスクリプトを自動実行するため、非常に強力かつ危険なツールであることをご認識ください。
https://docs.anthropic.com/en/docs/claude-code/hooks

ClaudeCode hooksでは、いくつかのイベントフックが提供されています。
いつ、何のためにフックが実行されるか」が異なるため、シェルスクリプトを実行させたいタイミングに応じて適切なフックを選択します。

フック名説明使用タイミングの例
Start Hookツール実行直前に実行されるスタート時にロギング、通知、前準備など
Stop Hookツール実行終了後に実行されるSlack通知、ログ保存、後処理の実行など
Error Hook実行中にエラーが発生したときに実行されるエラーログ出力、エラー通知など
Cancel Hookユーザーが手動で処理をキャンセルしたときに実行されるキャンセル理由の記録、通知など



🔍 Matcher(マッチャー)とは?

Matcherは、「どのツールの出力に対してこのフックを適用するか?」を指定するフィルターを指します。
BashやPython、Nodeといったツールを指定することで、ClaudeCodeが特定のツールを実行したときにのみイベントフックを実行させることが出来るようになります。

Matcherを空にすれば全ツールを指定できるので、これも用途に合わせて適切なMatcherを設定してください。

❗️Slack通知フックを導入してみる❗️

それでは、実際にClaudeCode hooksを導入してみましょう!
今回はClaudeCodeがタスクを終了した時点でSlackに通知を送るフックを設定してみます。

Step1. SlackチャンネルにIncoming Webhooksを追加

Slack通知を送るチャンネルの詳細から「インテグレーション」タブを開き、Incoming Webhooksを指定してアプリを追加します。

Slack APIの設定画面を開き、通知先チャンネルのIncoming WebhooksをONにしてWebhook URLを取得します。
例)https://hooks.slack.com/services/XXX/YYY/ZZZ

Step2. Slack通知用のシェルスクリプトを用意する

任意のディレクトリに以下のシェルスクリプトを作成してください。
一元管理するために、ClaudeCodeのsettings.jsonなどが配置されているディレクトリに配置することをおすすめします。

#!/bin/bash
MESSAGE="🤖 *Claude Code 通知*\nClaude Codeセッション終了\n"
WEBHOOK_URL="https://hooks.slack.com/services/XXX/YYY/ZZZ"

curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"${MESSAGE}\"}" "${WEBHOOK_URL}"

また、ファイルの実行権限が不足してエラーが発生する可能性があるため、スクリプトファイルに対して以下のコマンドを実行してください。

chmod +x scripts/claude-code/notify-completion-slack.sh

Step3. ClaudeCodeでhooksを設定する

ここでようやくClaudeCodeの出番です。
まずはターミナルでClaudeCodeを起動し、「/hooks」と入力してください。

指定するイベントフックが表示されます。
今回は「4.Stop」を選択してEnterを押します。

Add new hooksを選択してEnterを押します。

Commandを入力する欄が表示されます。
Step2で配置したパスを指定して、イベントフックが発火するコマンドを入力します。
 ↓ 以下サンプル

~/.config/claude/scripts/{作成したスクリプト}.sh –with-metadata

イベントフック設定を保存する範囲を指定します。
項目の右側のsettings.json(settings.local.json)に対して設定の書き込みが実行されます。

保存先定義概要
Project settings (local)今開いているプロジェクトフォルダだけ
(ローカル限定)
Project settingsプロジェクトに保存される(チーム共有を意図)
User settingsユーザー全体に共通で保存される

Step4. ClaudeCodeを再起動して結果確認

反映した変更を即座に適用するため、ClaudeCodeを再起動してください。
何らかのタスクを実行して終了後にSlackに通知が来れば成功です!

最後に

いかがでしたでしょうか?
hooksはスクリプトによる拡張性が非常に高く、開発体験の向上のための非常に強力なツールです。

SlackのPC通知をONにすればMacの端末通知を入れることも出来ますし、ログ出力や任意のプログラムを自動実行できる仕組みなんかも作れそうです。

是非試してみてください!

Related posts