🐈‍⬛

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 で大切にしている価値観や、メンバーの紹介記事も掲載しております。

技術へのこだわりやプロダクト愛を活かして働きたい
フルリモート、フルフレックス下で最大限のバリューを発揮したい
心理的安全性の高い環境の中、チームで成果をあげてみたい
そんな思いを持った方がいらっしゃいましたら、ぜひ一度カジュアルにお話ができたらと思います。

参考

ispec inc.

Discussion