Claude Codeを1日動かしていると、通知が鳴る回数は正直バカになりません。許可を求められるたびに「ポーン」、処理が終わるたびに「ポーン」。
最初は気にならなかったこの音が、何十回と繰り返されるうちに、じわじわと集中力を削っていることに気づきました。
そこで、この通知音をドラクエの効果音に置き換えました。許可待ちは「カーソル音」、完了は「バシルーラのSE」。
設定を変えた瞬間から、通知が鳴るたびにちょっとだけ楽しくなりました。
この記事でわかるのは、terminal-notifierとClaude Codeのhooksを組み合わせて通知音を自由に差し替える方法です。
具体的には、(1) notify.shの仕組みと変更箇所、(2) ~/Library/Soundsへの音源配置、(3) ffmpegでの音量調整、の3点を、実際に私が試行錯誤した手順としてそのままなぞれる形でまとめます。
Claude Codeの通知、味気なくないですか?
Claude Codeはコマンド実行の許可を求めるたびに通知を出します。デフォルトの通知音は「default」や「Glass」といったmacOS標準のシステムサウンド。もちろん機能としては十分ですが、毎日何十回も聞いていると、正直かなり単調です。
標準の「Glass」音に飽きた理由
私は複数のセッションを並行して動かすことが多く、通知音は1日で相当な回数鳴ります。
音自体は短く控えめなのですが、感情の起伏がまったくない音なので、許可待ちなのか完了なのか、音だけでは区別がつきません。
結局、通知が鳴るたびに画面を確認しに行く手間が発生していました。
通知音を変えたいと思った瞬間
きっかけは単純で、ダウンロードフォルダに保存していたドラクエの効果音素材(フリー素材サイトから入手したもの)をふと見つけたことでした。
「これ、Claude Codeの通知に使えるのでは」と思い立ち、その日のうちに設定を変えてしまいました。
ボスに許可を求めるような気分で「ボス許可をくれ」と表示させたら、想像以上にテンションが上がりました。
terminal-notifierとhooksの仕組みを理解する
Claude Codeの通知音カスタムとは、hooksで実行されるシェルスクリプト内のSOUND変数を、macOSのシステムサウンド名に差し替えることで任意の効果音を通知音として鳴らす仕組みです。
Claude Codeそのものには通知音を選ぶUIはありません(2026年8月時点)。
私の環境では~/.claude/settings.jsonのhooksでPermissionRequestとStopの2つのイベントに対して、notify.shというシェルスクリプトを呼び出す設定にしています。
この仕組みを理解しておくと、どこを変更すればいいかが一目瞭然になります。
事前準備:terminal-notifierをインストールする
まだ入れていない場合は、Homebrewで一発です(2026年8月時点で確認済みの手順)。
brew install terminal-notifierインストール後はterminal-notifier -message "test"のように単体で叩いて、通知バナーが出ることを先に確認しておきます。
ここで動かないと、以降の手順を進めても原因の切り分けができなくなるためです。
notify.shがどう音を鳴らしているか
notify.shはClaude CodeからJSON形式で渡されるイベント情報を受け取り、イベント種別に応じてメッセージとサウンドを切り替えます。
最終的にはterminal-notifierコマンドを呼び出し、macOSの通知として表示する仕組みです。中身を抜き出すとこんな感じです。
if [ "$EVENT" = "permission" ]; then
MESSAGE="ボス許可をくれ"
SOUND="nc46869_ドラクエ_カーソル音"
else
MESSAGE="ボス完了した"
SOUND="nc479263_バシルーラのSE(HD-2D版_DQ3)"
fi
terminal-notifier -title "Claude Code" -message "$MESSAGE" -sound "$SOUND"変更が必要なのは、このMESSAGEとSOUNDの2つの変数だけ。仕組みさえ分かれば、あとは音源とメッセージを差し替えるだけの単純作業です。
-soundオプションはシステムサウンド名しか受け付けない
terminal-notifierの-soundオプションの仕様が、最初につまずいたポイントです。
音声ファイルのパスを直接渡す仕組みではなく、macOSのシステムサウンド名(拡張子を除いたファイル名)を指定する仕様になっています。
つまり、ダウンロードフォルダにwavファイルを置いたままではダメで、macOSがサウンドとして認識できる場所に配置します。
カスタム音源を通知音として使う設定手順
仕組みが分かれば、あとは3ステップです。私が実際にやった順番で紹介します。
検証環境は普段Claude Codeを常時回しているMac miniのターミナルです。
~/Library/Soundsにファイルを置く
~/Library/Sounds/はmacOSが個人用のカスタムサウンドとして認識するディレクトリです。
ここにwavファイルを置くだけで、terminal-notifierからファイル名(拡張子なし)で参照できるようになります。
ディレクトリが存在しない場合は作成してから移動します。
mkdir -p ~/Library/Sounds
mv ~/Downloads/nc46869_ドラクエ_カーソル音.wav ~/Library/Sounds/notify.shのSOUND変数を書き換える
先ほどのスクリプトのSOUND変数に、拡張子を除いたファイル名を指定します。
ファイル名に日本語や括弧が含まれていても、そのまま指定すれば問題なく動きました。
SOUND="nc46869_ドラクエ_カーソル音"terminal-notifierコマンドで動作確認する
notify.shを直接編集する前に、terminal-notifierを単体で叩いて音が鳴るか確認しておくと安全です。
設定ミスに気づかないままClaude Codeを使い続けるより、先にコマンド1行で検証したほうが早いです。
terminal-notifier -title "テスト" -message "音テスト" -sound "nc46869_ドラクエ_カーソル音"これで音が鳴れば設定は成功です。
音が鳴らない時によくある原因
鳴らない場合、原因はだいたい次の3つのどれかに絞られます。
- ファイル名のスペルミス(
SOUND変数の値と~/Library/Sounds/内のファイル名が一致しているか) ~/Library/Sounds/への移動が漏れている(ls ~/Library/Sounds/で存在確認)- macOSの通知設定で「システム設定 > 通知 > terminal-notifier」がオフになっている
私の場合は3つ目に気づかず、しばらく「なぜ音だけ鳴らないのか」と設定ファイルばかり疑っていました。
通知そのものが出ているかを先に確認すると、原因の切り分けが早くなります。
完了と許可待ちで音を鳴らし分けるコツ
音を変えるだけでも十分楽しいのですが、私が本当にやりたかったのは「音を聞いた瞬間に、今どんな状態なのか分かる」ことでした。
ここを丁寧に作り込むと、通知の実用性が一段上がります。
イベントの分岐(permission/stop)を活かす
notify.shは$EVENTが「permission」かどうかで分岐しています。
許可待ちと完了で違う音を割り当てれば、画面を見なくても耳だけで状況が分かるようになります。私は次のように役割分担しました。
| イベント | 音源 | 役割 |
|---|---|---|
| 許可待ち(permission) | ドラクエのカーソル音 | 短く軽快な音で「反応待ち」を示す |
| 完了(stop) | バシルーラのSE | 存在感のある音で「終わった」を明確に示す |
効果音とメッセージ文言もセットで変える
音だけでなく、通知のメッセージ文言も同時に変更すると、体験が一気に統一されます。
私はMESSAGE変数を書き換え、許可待ちは「許可を求めています」から「ボス許可をくれ」に、完了は「処理が完了しました」から「ボス完了した」に変えました。
無機質な通知文をキャラクター性のある言葉に変えるだけで、作業中の気分がだいぶ違います。
音量調整で試行錯誤した話
ここからが正直、一番時間を使った部分です。
効果音は選んだ瞬間は満足するのですが、実際に何度も鳴らしていると「思ったより音がでかい」という問題に必ずぶつかります。
ffmpegのvolumeフィルタで音量を下げる
terminal-notifierの-soundオプションには音量調整のパラメータがありません。
音量を下げたい場合は、音源ファイル自体をあらかじめ加工しておく必要があります。
私はffmpegのvolumeフィルタを使い、同じファイル名で上書きする方法を取りました。
ffmpeg -y -i 元ファイル.wav -filter:a "volume=0.5" 一時ファイル.wav
mv 一時ファイル.wav 元ファイル.wavvolume=0.5は現在の音量の50%にするという意味です。ファイル名を変えずに上書きすれば、notify.sh側の設定はそのまま使い回せます。
何度も「もうちょっと下げて」を繰り返した理由
正直に言うと、私は最初70%まで下げて満足したはずが、実際に鳴らしてみるとまだ大きく感じ、そこから50%、50%、20%と何段階も掛け合わせで下げていきました。
実際にかけたvolumeフィルタの倍率と、そのつど残った音量(元の音量比)を記録すると次のようになります。
| 回数 | volumeフィルタの倍率 | 累積音量(元の音量比) |
|---|---|---|
| 1回目 | 0.7 | 70% |
| 2回目 | 0.5 | 35% |
| 3回目 | 0.5 | 17.5% |
| 4回目 | 0.2 | 3.5% |
1回のfilterで一気に下げず、少しずつ試しては聞き直す方法を取ったのは、下げすぎて無音同然になるのを避けたかったからです。
結果的に元の音量の3.5%程度まで下げることになりましたが、段階的に調整したおかげで、ちょうどいい塩梅を見失わずに済みました。
もし1回でも大きく下げすぎていたら、もう一度大きい音源から作り直す羽目になっていたはずです。
効果音の音量調整は、一気に決めようとせず、少しずつ削っていくのが結果的に近道だと実感しました。
よくある質問
Q1. Claude Codeの通知音は変更できますか?
A1. できます。hooksで呼び出すシェルスクリプト内のSOUND変数を、macOSのシステムサウンド名に差し替えることで自由な効果音に変更できます。
Q2. terminal-notifierの-soundオプションに音声ファイルのパスを直接指定できますか?
A2. できません。-soundオプションはmacOSのシステムサウンド名(拡張子を除いたファイル名)のみを受け付ける仕様です。ファイルは~/Library/Sounds/に置く必要があります。
Q3. 音量を下げるにはどうすればいいですか?
A3. terminal-notifierの-soundオプションには音量調整パラメータがないため、ffmpegのvolumeフィルタで音源ファイル自体を加工します。一気に下げず、少しずつ試して聞き直す方法が安全です。
Q4. 通知音がまったく鳴らない場合、何を確認すればいいですか?
A4. ファイル名のスペルミス、~/Library/Sounds/への移動漏れ、macOSのシステム設定で通知がオフになっていないかの3点を順に確認します。
Q5. 許可待ちと完了で違う音を鳴らし分けることはできますか?
A5. できます。notify.shは$EVENTの値(permissionかどうか)で分岐しているため、イベントごとに異なるSOUND変数とMESSAGE変数を設定すれば鳴らし分けられます。
Q6. terminal-notifierはどうやってインストールしますか?
A6. Homebrewでbrew install terminal-notifierを実行するだけでインストールできます。
まとめ:通知音カスタムの応用アイデア
今回はpermissionとstopの2イベントだけを変更しましたが、この仕組みは他のイベントにも応用できます。
作業効率だけでなく、日々の開発体験を少し楽しくする工夫として、ぜひ試してみてください。
イベントごとに違う効果音を割り当てる
Claude Codeの設定を見ると、PermissionRequestとStop以外にも、SessionStart・SessionEnd・Notification・PreToolUse・PostToolUseなど、多数のイベントにhooksを登録できます。
2026年8月時点でhooksのイベント数は30種類近くまで増えており、今回紹介した2イベントはそのごく一部にすぎません。
それぞれに専用の音を割り当てれば、耳だけで「今どのフェーズか」を判別できる環境が作れます。
通知メッセージをキャラクター的に遊ばせる
音だけでなく文言も自由に変えられるので、自分だけのお決まりフレーズを作っておくと愛着が湧きます。
私は「ボス許可をくれ」「ボス完了した」というフレーズにしましたが、プロジェクト名を差し込んだり、絵文字を足したりと、アレンジの余地はまだまだあります。
単なる作業ツールの通知音を、自分だけのちょっとした遊びに変えられるのが、この手のカスタマイズの一番の魅力だと感じています。