Claude Codeの承認待ちをSlackに通知する
はじめに
Claude Code を使っていて、承認要求を見逃してしまったことはありませんか?
先日、@shin_chaさんの記事で Slack MCP 設定の方法を学び、作業完了通知を Slack に送れるようになりました。
この記事の続編として、今回は Claude Code Hooks を使って承認待ち通知を Slack に送る方法を紹介します。
Claude Code Hooks とは
Claude Code Hooks は、特定のイベント発生時にシェルコマンドを実行できる機能です。
主なイベント:
- PreToolUse: ツール実行前
- PostToolUse: ツール実行後
- Notification: 承認要求時(今回使用)
- Stop: Claude Code 終了時
実装手順
1. Hooks 設定ファイルの作成
~/.claude/settings.json
を作成:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "$HOME/.claude/notify.sh"
}
]
}
]
}
}
2. Slack 通知スクリプトの作成
~/.claude/notify.sh
を作成:
#!/bin/bash
SLACK_BOT_TOKEN="{YOUR_SLACK_BOT_TOKEN}"
# 引数から情報を取得(将来の拡張用)
TOOL_NAME="${1:-不明なツール}"
PROJECT_PATH="${2:-$(pwd)}"
PROJECT_NAME=$(basename "$PROJECT_PATH")
APPROVAL_TYPE="${3:-ファイル操作}"
# 詳細メッセージの作成
if [ "$TOOL_NAME" != "不明なツール" ]; then
DETAIL_MESSAGE="ツール: $TOOL_NAME"
else
DETAIL_MESSAGE="承認が必要な操作があります"
fi
# Slackに通知を送る
if [ -n "$SLACK_BOT_TOKEN" ]; then
curl -X POST "https://slack.com/api/chat.postMessage" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": "YOUR_SLACK_USER_ID", # SlackのユーザーIDまたはチャンネルIDを設定
"text": "🔔 Claude Code: '"$PROJECT_NAME"'で承認待ち",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Claude Code通知*\nプロジェクト: `'"$PROJECT_NAME"'`\n'"$DETAIL_MESSAGE"'"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "📂 *パス:* `'"$PROJECT_PATH"'`\n🔧 *操作種別:* '"$APPROVAL_TYPE"'"
}
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "時刻: '"$(date +"%Y-%m-%d %H:%M:%S")"'"
}
]
}
]
}'
else
echo "SLACK_BOT_TOKEN not found in Claude Code configuration."
fi
3. 実行権限の付与
chmod +x ~/.claude/notify.sh
4. Claude Code の再起動
設定を反映させるため、Claude Code を再起動します。
5. 動作確認
仕組みの解説
動作フロー
通知の内容
Slack に届く通知には以下の情報が含まれます:
- プロジェクト名
- プロジェクトのフルパス
- 操作の種類
- タイムスタンプ
完了通知も Hooks で実装できる
「完了通知も Hooks でいいじゃん!」
Stop
イベントを使えば実装できます。
Stop Hook の設定
~/.claude/settings.json
に追加:
{
"hooks": {
"Notification": [
/* 前述の設定 */
],
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "$HOME/.claude/completion.sh"
}
]
}
]
}
}
~/.claude/completion.sh
:
#!/bin/bash
SLACK_BOT_TOKEN="{YOUR_SLACK_BOT_TOKEN}"
PROJECT_NAME=$(basename "$(pwd)")
BRANCH=$(git branch --show-current 2>/dev/null || echo "不明")
curl -X POST "https://slack.com/api/chat.postMessage" \
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": "YOUR_SLACK_USER_ID",
"text": "✅ Claude Code: 作業が完了しました",
"blocks": [{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Claude Code 作業完了*\nプロジェクト: `'"$PROJECT_NAME"'`\nブランチ: `'"$BRANCH"'`"
}
}]
}'
Hooks と Slack MCP の特徴
両方とも Slack 通知を送れますが、それぞれ得意な部分が異なります。
Hooks の特徴:
- 自動で通知が送信される
- プロジェクト名やブランチ名などの基本情報を取得
- シェルスクリプトで取得可能な範囲の情報を活用
Slack MCP(CLAUDE.md の手動送信)の特徴:
- ユーザーの指示内容や作業の詳細を含められる
- 実行したコマンドや編集ファイルを具体的に記載できる
- 作業時間などの情報も正確に把握できる
自動化を重視する場合は Hooks、詳細な作業記録を残したい場合は Slack MCP という使い分けがおすすめです。
まとめ
Claude Code Hooks を使うことで、承認要求を見逃すことなく作業を続けられるようになりました。
@shin_chaさんの記事で設定した Slack MCP と組み合わせることで、作業開始から完了まで全てを Slack で管理できます。
皆さんもぜひ試してみてください!
おわりに:採用情報
ispec では更なる事業拡大を見据え、エンジニア職にて新しいメンバーを募集しています。
採用サイトでは各求人の詳細だけでなく、ispec で大切にしている価値観や、メンバーの紹介記事も掲載しております。
技術へのこだわりやプロダクト愛を活かして働きたい
フルリモート、フルフレックス下で最大限のバリューを発揮したい
心理的安全性の高い環境の中、チームで成果をあげてみたい
そんな思いを持った方がいらっしゃいましたら、ぜひ一度カジュアルにお話ができたらと思います。
Discussion