🕌

Claude Code の新機能 Hooks 使って通知しよ!

に公開

はじめに

Claude Code は端的に最高です。が、途中途中でコマンドの許可とかあって確認いるし、YOLO Mode(全部自動)だとちょっと怖いときあるし...ってことで痒いところに手がとどかなかったですが、それが Hooks で解決!
確認の必要があるときやタスクが完了したときに通知を送れるようになりました🎉

Claude Code Hooksとは

Hooksは、Claude Codeの特定のイベント(ツール実行前後、通知時、停止時など)に対してカスタムコマンドを自動実行できる機能です。これにより、ワークフローの自動化や監視が可能になります。

実装した通知システム

今回は以下の2つのシナリオで通知を設定しました:

1. Notification Hook

トリガー: Claude Codeが通知を送信する時(コマンド実行許可する時とか)
スクリプト: ~/.claude/scripts/push-notify-notification.sh

2. Stop Hook

トリガー: Claude Codeのプロセスが停止する時
スクリプト: ~/.claude/scripts/push-notify-stop.sh

完成イメージ

セットアップ方法

Step 1: スクリプトディレクトリの作成

mkdir -p ~/.claude/scripts

~/.claude/scriptsに置くのは今は問題ないはずだけど、これからはわからないので心配なら別のどっかにやるとよいかも

Step 2: 通知スクリプトの作成

Claude Codeで以下のようなシンプルな通知スクリプトを作成しました:

Notification Hook: ~/.claude/scripts/push-notify-notification.sh

#!/bin/bash
# for Claude Code Hooks Notification

# ブランチ名が指定されていない場合は現在のブランチを取得
if [ -z "$1" ]; then
    BRANCH=$(git branch --show-current)
else
    BRANCH="$1"
fi

# リポジトリ名を取得
REPO_NAME=$(basename -s .git `git config --get remote.origin.url`)

# 確認通知を送信
terminal-notifier -title "Claude Code" -message "Action needed 💬 (${REPO_NAME}/${BRANCH})" -sound Purr
echo "✅ Notification sent: Action needed for ${REPO_NAME}/${BRANCH}"

Stop Hook: ~/.claude/scripts/push-notify-stop.sh

#!/bin/bash
# for Claude Code Hooks Stop

# ブランチ名が指定されていない場合は現在のブランチを取得
if [ -z "$1" ]; then
    BRANCH=$(git branch --show-current)
else
    BRANCH="$1"
fi

# リポジトリ名を取得
REPO_NAME=$(basename -s .git `git config --get remote.origin.url`)

# 完了通知を送信
terminal-notifier -title "Claude Code" -message "Task completed🎉 (${REPO_NAME}/${BRANCH})" -sound Glass
echo "✅ Notification sent: Task completed for ${REPO_NAME}/${BRANCH}"

ちょっとポイント

git worktree で複数タスク並列で実行したときにわかりやすいようにレポジトリ名とブランチ名を通知にいれてます。

Step 3: Hooksの設定

Claude Code内で以下のコマンドを実行してHooksを設定:

# Hooksの設定メニューを開く
/hooks

設定手順:

  1. Notification Hookを選択
  2. + Add new matcher...で空のmatcherを追加
  3. コマンドに~/.claude/scripts/push-notify-notification.shを指定
  4. User settingsに保存

同様にStop Hookも設定します。

メリット

🔔 作業状況の可視化

どのリポジトリのどのブランチで作業が完了したかが一目で分かります。

🚀 生産性の向上

長時間の処理中に他の作業ができ、完了時に即座に通知を受け取れます。

🛠️ カスタマイズ可能

音の種類、メッセージ内容、通知タイミングを自由に調整できます。

注意点

  • terminal-notifierのインストールが必要(brew install terminal-notifier
  • macOSの通知許可設定の確認が必要
  • Git リポジトリ外で実行する場合はエラーでるのであしからず

まとめ

Claude Code Hooksを使用して通知を飛ばすことで、もういちいち止まってるか確認しにいかなくて良くなくなるので並列で実行するのがとっても楽になりました!

これはありがたい。でも複数タスクを並列でやってると自分が今何やってるかわからなくなるので自分を強くしないという問題があります🥺

まあもう少ししたらAgent的な何かでそのあたりも解決できる未来が来そうですね。わくわくっ


参考リンク

Kiva Tech Blog

Discussion