💬
Claude Codeのhooksを使ってコマンド終了時にmacの通知をするようにしてみた
Claude Codeの処理終了を知りたいので設定しました。
Claude Codeのhooksとは?
Claude Code Hooks は、Claude Code のライフサイクルで発生する特定のイベント(PreToolUse
、PostToolUse
、Notification
、Stop
、SubagentStop
など)のタイミングでユーザー定義のシェルコマンドを自動実行できる仕組みです。これにより コード整形の自動実行、危険操作のブロック、外部サービスへの通知 などを CLI だけで組み込めます。
公式が挙げる代表的ユースケースは以下です。
- 通知: Claude Code が入力待ちや終了した瞬間に独自の通知手段を呼び出す
-
自動フォーマット:
prettier
やgofmt
をファイル保存後に必ず実行 - ログ取得: 走った Bash コマンドをすべて記録
- フィードバック: コーディング規約違反を自動検出し Claude に返す
詳細は公式ドキュメントを参照してください:
https://docs.anthropic.com/en/docs/claude-code/hooks
方法
Stop
イベント用 Hook を登録
1. .claude/settings.local.json
などプロジェクト設定ファイルに次の JSON を追記します。
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"作業完了\" with title \"Claude Code\"'"
}
]
}
]
}
}
ポイント:
-
Stop
は「Claude Code のメインエージェントが応答を終えたとき」に発火 -
matcher
を空文字にすると全てのStop
イベントで実行 -
command
に macOS 標準/usr/bin/osascript
を指定し、ワンライナーで通知を表示
2. macOS で通知を許可する
display notification
は Script Editor (com.apple.ScriptEditor2) として通知を送るため、初回は権限を与える必要があります。
- システム設定 → 通知と集中モード を開く
- 「Script Editor」 を探し、「通知を許可」をオン
- 通知スタイルを「バナー」または「アラート」に設定
- 集中モード(おやすみモード)がオフになっていることを確認
一度 Script Editor で以下を実行し、許可を与えると確実です。
display notification "テスト通知" with title "osascript"
3. 動作確認
# Claude Code を使ってみる例
claude /run
- コマンドが完了し Claude Code が停止すると
Stop
Hook が起動 - 右上に 「Claude Code – 作業完了」 の通知が表示されれば成功!
まとめ
- Claude Code Hooks で コマンド終了の確定タイミング に任意処理を自動実行できる
- macOS なら
osascript
のdisplay notification
を使えば GUI を邪魔しないトースト通知を簡単に実装可能 - 通知が出ない場合は Script Editor に通知権限が付与されているか をまず確認
これで長時間実行するコマンドを待つ必要がなくなり、開発フローが一段と快適になります。ぜひ試してみてください!
Discussion