Claude Codeの作業が完了したらmacOSの通知音を鳴らす

Katz
長時間のコード作業中に他のタスクをしていて、Claude Codeの完了に気づかないことがあります。音による通知を設定することで、作業完了に気付けるようにし、生産性を向上させたいと思います。今回はその設定方法について調べたのでまとめます。
macOSで通知音を鳴らすには?
macOSで通知音を鳴らすには、osascriptのdisplay notificationコマンドを利用します。display notificationは以下の構文でパラメータを指定します。
osascript -e 'display notification "メッセージ" with title "タイトル" subtitle "サブタイトル" sound name "音声名"'

パラメータ名 | 必要可否 | 詳細 | 例 |
---|---|---|---|
message | Yes | 通知メッセージとして表示したい文字列を指定する | 依頼していたタスクが完了しました |
title | No | 通知タイトルとして表示したい文字列を指定する | Claude Code |
subtitle | No | 通知サブタイトルとして表示したい文字列を指定する | タスク完了通知 |
sound name | No | 通知時に鳴らす通知音を指定する | Basso、Frog、Hero、Pop、Submarine、Blow、Funk、Morse、Purr、Tink、Bottle、 Glass、Ping、Sosumi |
Claude Codeのhooksで完了に通知音を鳴らす
Claude Codeのhooks機能と連携して、Claude Codeを実行している任意のタイミング(フックイベント)で通知音を鳴らすように設定します。
今回はPostToolUse、Stop、SessionEndの3つのフックイベントのタイミングで通知音を鳴らしてみます。以下の設定内容を自身の環境に適した設定ファイルに追記してください。
フックイベント一覧
Claude Code | Hooks – フックイベント概要
イベント名 | 実行タイミング | 説明 |
---|---|---|
PreToolUse | ツール呼び出しの直前 | ツールが呼び出される前に、特定のスクリプトやコマンドを実行します。 |
PostToolUse | ツール呼び出しの直後 | ツールの実行が完了した後に、結果の処理や後続のタスクを実行します。 |
UserPromptSubmit | ユーザープロンプト送信時 | ユーザーがプロンプトを送信し、Claudeがそれを処理する前にトリガーされます。 |
Notification | Claude Codeからの通知時 | Claude Codeが通知を発行するタイミングで実行されます。 |
Stop | 応答終了時 | Claude Codeが応答の生成を完了する際に実行されます。 |
SubagentStop | サブエージェントタスク完了時 | サブエージェントがタスクを完了したときにトリガーされます。 |
PreCompact | コンパクト操作の直前 | Claude Codeがコードの圧縮や最適化などのコンパクト操作を行う前に実行されます。 |
SessionStart | セッション開始時 | 新しいセッションが開始されるか、既存のセッションが再開されるときに実行されます。 |
SessionEnd | セッション終了時 | Claude Codeのセッションが終了する際に実行されます。 |
設定ファイル
設定の種類 | ファイルパス | 内容 |
---|---|---|
ユーザー設定 | ~/.claude/settings.json | 全てのプロジェクトに適用される、個人のグローバル設定を定義します。 |
共有プロジェクト設定 | .claude/settings.json | ソース管理にチェックインされ、チームと共有される設定です。 |
ローカルプロジェクト設定 | .claude/settings.local.json | ソース管理にチェックインされない設定で、個人の好みや実験に使用されます。 |
設定内容
{
"hooks": {
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"ツール実行完了\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"セッション終了\" with title \"Claude Code\" sound name \"Ping\"'"
}
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"作業完了\" with title \"Claude Code\" sound name \"Hero\"'"
}
]
}
]
}
}
注意事項:ターミナルアプリの通知を許可する
ターミナルアプリの通知が許可されていない場合、通知が表示されないため通知を許可する必要があります。私はGhosttyを利用していますが、以下の手順でGhosttyの通知機能を有効化する必要がありました。
- Claude Codeの設定完了後、Claude Codeでセッションを開始し、通知音を鳴らすフックイベントを発生させる
- フックイベントが発生すると、Ghosttyで通知を許可するか尋ねるダイアログが表示され、System Settings → NotificationにGhosttyが表示されるようになる
- System Settings → NotificationでGhosttyのAllow notificationsをONにして通知を有効化する

動作確認
これらの設定により、Claude Codeの作業状況をリアルタイムで把握し、効率的な開発環境を構築できます。通知音が鳴るようになったため、作業が進んでいるのか、終了したのかが分かりやすい環境になりました。

ABOUT ME