💬

Claude Codeのhooksを使ってコマンド終了時にmacの通知をするようにしてみた

に公開


Claude Codeの処理終了を知りたいので設定しました。

Claude Codeのhooksとは?

Claude Code Hooks は、Claude Code のライフサイクルで発生する特定のイベント(PreToolUsePostToolUseNotificationStopSubagentStop など)のタイミングでユーザー定義のシェルコマンドを自動実行できる仕組みです。これにより コード整形の自動実行危険操作のブロック外部サービスへの通知 などを CLI だけで組み込めます。
公式が挙げる代表的ユースケースは以下です。

  • 通知: Claude Code が入力待ちや終了した瞬間に独自の通知手段を呼び出す
  • 自動フォーマット: prettiergofmt をファイル保存後に必ず実行
  • ログ取得: 走った Bash コマンドをすべて記録
  • フィードバック: コーディング規約違反を自動検出し Claude に返す

詳細は公式ドキュメントを参照してください:
https://docs.anthropic.com/en/docs/claude-code/hooks

方法

1. Stop イベント用 Hook を登録

.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 notificationScript Editor (com.apple.ScriptEditor2) として通知を送るため、初回は権限を与える必要があります。

  1. システム設定 → 通知と集中モード を開く
  2. 「Script Editor」 を探し、「通知を許可」をオン
  3. 通知スタイルを「バナー」または「アラート」に設定
  4. 集中モード(おやすみモード)がオフになっていることを確認

一度 Script Editor で以下を実行し、許可を与えると確実です。

display notification "テスト通知" with title "osascript"

3. 動作確認

# Claude Code を使ってみる例
claude /run
  • コマンドが完了し Claude Code が停止すると Stop Hook が起動
  • 右上に 「Claude Code – 作業完了」 の通知が表示されれば成功!

まとめ

  • Claude Code Hooks で コマンド終了の確定タイミング に任意処理を自動実行できる
  • macOS なら osascriptdisplay notification を使えば GUI を邪魔しないトースト通知を簡単に実装可能
  • 通知が出ない場合は Script Editor に通知権限が付与されているか をまず確認

これで長時間実行するコマンドを待つ必要がなくなり、開発フローが一段と快適になります。ぜひ試してみてください!

Discussion