この記事の結論
Claude Codeの通知は通知音・デスクトップ通知・スマホの3通りですが、僕の会社の無人の定期処理ではスマホに届かず、1日10通上限のメールに切り替えました。hooksの設定例と6秒・60秒の目安も載せています。
目次9項目
【無料・メールだけ】Claude Code 2daysセミナー(第二の脳構築講座)の次回開催の案内を受け取る →
Claude Codeの通知を受け取る方法は、通知音・デスクトップ通知・スマホへのプッシュ通知の3通りから選べます。ただ、僕の会社が無人で回している定期処理では、スマホへの通知が届きませんでした。だから今は、処理が終わった結果をサーバーからのメールで受け取る形にしています。
2026年10月2日、定期タスクの結果をスマホで知ろうとしたところ、定期タスクのセッションはRemote Controlにつながらず、通知は来ませんでした。今は1日10通までの上限の中で、朝・昼・晩の3回だけ結果のメールを送っています。
この記事では、通知音・hooks・スマホ通知の条件を公式ドキュメントで確かめ、無人の処理の結果をメールで受け取る実例まで並べます。「席を外している間に終わったら、どう気づけばいいの?」と迷っている方は、最初の章で全体がつかめます。
Claude Codeの通知は「通知音・デスクトップ通知・スマホ」の3通り
Claude Codeで作業の終わりや入力待ちに気づく方法は、手元で鳴る通知音、画面の隅に出るデスクトップ通知、スマホへのプッシュ通知の3つです。この3つで足りないときに、hooksで自分の通知を足します。
公式ドキュメントでは、作業が終わったときや許可の確認で止まったときに、席を外していそうなら通知の出来事が起きると書かれています。これを音や通知に変えておけば、長い作業の間に別の仕事ができます。
4つの受け取り方の違い
どこで気づけるかと、無人の処理で使えるかを並べました。下の「無人の処理」の列は、僕の会社で試した範囲の結果です。
| 受け取り方 | 気づける場所 | 主な設定 | 無人の定期処理で |
|---|---|---|---|
| 通知音(ターミナルのベル) | そのMacの前 | preferredNotifChannel を "terminal_bell" | 席にいないと気づけない |
| デスクトップ通知 | そのMacの画面 | Ghostty・Kitty・iTerm2は既定で出る | 席にいないと気づけない |
| hooksの通知(Notification) | コマンドしだい | ~/.claude/settings.json の hooks | 何を動かすかで変わる |
| スマホへのプッシュ通知 | 外出先のスマホ | Remote Control+/config の2つのスイッチ | 実測では届かなかった |
席の近くで使うなら、通知音かデスクトップ通知で足ります。僕は、席を外す時間が長い処理ほど、手元の外へ届く手段を先に決めておくほうがいいと考えています。
Claude Codeの通知音とデスクトップ通知は、ターミナルで出方が変わる
デスクトップ通知が設定なしで出るのは、2026年10月時点の公式ドキュメントではGhostty・Kitty・iTerm2の3つだけです。ほかのターミナルでは、ベルを鳴らす設定かhooksを足します。
通知音だけでいいなら preferredNotifChannel
いちばん手軽なのは、ターミナルのベルを鳴らす設定です。~/.claude/settings.json に次の1行を足すと、作業の終わりなどでベルが鳴ります。
{
"preferredNotifChannel": "terminal_bell"
}
macOS付属のターミナル(Apple Terminal)で鳴らないときは、ベルの設定も見てください。公式ドキュメントでは、初回のターミナルの設定を受け入れると、ベル音がオフになります。
戻すには、ターミナルの設定の「プロファイル」→「詳細」にあるベルの項目をオンにします。「通知音が急に鳴らなくなった」ときは、まずここを疑うと早いです。
iTerm2とtmuxは、もう一段の設定が要る
iTerm2は通知が出る3つに入っていますが、OSの通知センターへ渡すには転送をオンにします。設定の Profiles → Terminal で「Notification Center Alerts」をオンにします。
続けて「Filter Alerts」を開き、「Send escape sequence-generated alerts」もオンにします。どちらか片方だけだと、通知センターには出ません。
tmuxの中で動かすと、通知は既定で外側のターミナルまで届きません。~/.tmux.conf に set -g allow-passthrough on を足して読み込み直します。
SSHでつないだ先のClaude Codeでも、デスクトップ通知は手元のマシンに届くと公式に書かれています。それでも出ないときは、OSの設定でターミナルに通知の許可があるかを確かめます。
claude code hooks で通知する:Notificationの書き方と6秒・60秒
好きな音を鳴らしたい、別のアプリに知らせたいときは、hooksのNotificationを使います。hooksの通知は、Claude Code自身の通知を置き換えず、並んで動きます。
hooksそのものの仕組みと設定ファイルの置き場所は、Claude Codeのhooksの使い方と実例にまとめました。ここでは通知に使う部分だけを書きます。
macOSで音を鳴らす最小の設定
次の例は、Claude Codeが通知を出すたびに、macOS標準の効果音を鳴らす設定です。matcher を空にすると、すべての種類の通知で動きます。
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }
]
}
]
}
}
書いたあとは、Claude Codeの入力欄で /hooks を開くと、Notificationの下に登録が見えます。すでに hooks の項目があるファイルなら、全体を置き換えずに Notification を横に足します。
許可待ちは約6秒、入力待ちは約60秒で動く
通知の種類は matcher で絞れます。よく使うのは次の2つで、公式ドキュメントに動く時刻の目安が書かれています。
| matcher | 動くとき(公式の目安) | 向いている使い方 |
|---|---|---|
permission_prompt | 許可の確認が出て約6秒たったとき。ターミナルでは打鍵のたびに先へ延びる | 確認で止まったことに気づく |
idle_prompt | 応答が終わって約60秒、何も入力していないとき | 作業の終わりに気づく |
idle_prompt は、裏でエージェントが動いている間や、利用上限の解除を待っている間は動きません。作業の終わりをすぐ知りたいなら、約60秒の遅れがあると知っておくと戸惑いません。
許可の確認で止まる原因そのものは、Claude Codeが途中で止まる原因に書きました。通知は「止まったことに気づく」手段で、止まらない設定とは別に考えます。
デスクトップ通知を出すなら、権限の落とし穴に注意
macOSでは、osascript で通知を出す例が公式にあります。この通知はスクリプトエディタを通して出るため、そこに通知の許可が無いと何も出ず、エラーも出ません。
出ないときは、osascript -e 'display notification "test"' を一度実行します。そのあと、システム設定の「通知」でスクリプトエディタの通知を許可します。許可を求める画面は自動では出ません。
Notificationフックでは、止めたり変えたりはできない
Notificationフックに届くのは、通知の文(message)、題名(title)、種類(notification_type)の3つです。フックの結果で通知を止めたり、Claude Codeを止めたりはできません。
公式ドキュメントでは、外部のサービスへの転送や記録などの「ついでの処理」に使うものとされています。応答の終わりで何かをしたいなら、Claude Codeが応答を終えたときに動く Stop を使います。
Claude Codeのスマホ通知は、Remote Controlが有効なときだけ
スマホへのプッシュ通知は、Remote Controlが有効なセッションで、Claudeが送るかどうかを決める仕組みです。公式ドキュメントでは、送られるのは主に長い作業が終わったときと、続けるのに判断が要るときです。
まずスマホアプリに同じアカウントでログインし、通知を許可します。次に /config で「Push when Claude decides」か「Push when actions required」をオンにします。
通知の種類ごとの細かい設定は無く、この2つのスイッチだけです。また、接続したターミナルで入力している間や、そのウィンドウを見ている間は、スマホへの通知は飛ばされます。
Remote Controlの始め方とスマホからの操作は、Claude Codeをスマホから使うRemote Controlに書いています。
ここで大事なのは「Remote Controlが有効なとき」という条件です。人が開いて使うセッションでは満たしやすい一方、誰も触らない処理では、この条件が満たされているかを先に確かめる必要があります。
2026年10月2日、定期タスクの通知はスマホに届かなかった
僕の会社で通知を見直したきっかけは、毎日決まった時刻に動かしている無人の作業でした。2026年10月2日に試したところ、定期タスクのセッションはRemote Controlにつながらず、スマホへの通知は届きませんでした。
何を試して、何が起きたか
この日に作ったのは、社内の定期処理が終わったら結果を知らせる仕組みです。僕が欲しかったのは、Macを開けたまま放っておいても、終わったら手元で分かる形でした。
デスクトップアプリの定期タスクは、公式ドキュメントでは、予定の時刻に新しいセッションを自動で始めます。社内の記録では、そのセッションはRemote Controlにつながらず、スマホ通知が届きませんでした。
毎回が新しいセッションなので、前の回の続きを渡すには工夫が要ります。その方法はClaude Codeのセッション再開と引き継ぎに書きました。
スマホ通知はRemote Controlが有効なときの機能なので、仕様どおりの結果です。人が開いたセッションで届く通知が、無人のセッションでも届くとは限りません。
同じ日には、許可待ちでの停止も起きていた
同じ10月2日の朝には、定期処理の2本が許可の確認で止まり、昼前に再実行しています。止まった理由と直し方は、途中で止まる原因の記事(上の章のリンク先)に詳しく書きました。
無人の処理では、止まっても知らせが来なければ、次に画面を開くまで気づけません。だから結果を知らせる道を、Claude Codeの通知とは別に持つことにしました。
結果はメールで受け取る形にした:1日10通の上限と3つの便
僕の会社では、2026年10月2日から、定期処理の結果をメールで受け取る形を本線にしています。サーバーに置いた通知用のPHPが、届いた結果をメールにして送ります。
この通知メールは、2026年10月4日にヘッダーを確かめたとき、SPF と DMARC が通っていました。社員のメールの方は通っておらず、その調べ方は DMARC fail の原因と直し方 にまとめています。
しくみは「最後の手順で送信役を呼ぶ」だけ
定期処理の指示文の最後の手順で、送信用のスクリプトを動かします。スクリプトはその回の結果をまとめて、サーバーの通知用PHPに渡し、PHPがメールを送ります。
宛先はサーバー側で固定していて、送る側からは変えられません。送る側の指示が書き換えられても、宛先は変わらない作りです。
送信の上限は1日10通です。送る側が何度も動いてしまっても、メールが際限なく出ることはありません。
1日5回の処理に、メールは3便だけ
2026年10月23日に、社内の定期処理を1日5回(7時・10時半・12時40分・18時・22時)にすると決め、翌24日から動かしています。このとき、メールを送る便は朝・昼・晩の3つだけにしました。
理由は、通知用PHPの1日10通の上限です。12時40分と22時の回はメールを送らず、その結果は次の便に載せます。
| 処理の回 | メール | 結果が載る便 |
|---|---|---|
| 7時(朝) | 送る | その回 |
| 10時半(昼) | 送る | その回 |
| 12時40分 | 送らない | 18時の便 |
| 18時(晩) | 送る | その回 |
| 22時 | 送らない | 翌朝7時の便 |
送信用のスクリプトは、前回送ってから終わって、まだどのメールにも載っていない結果を拾います。だから送らない回の結果も、取りこぼさずに次の便でまとめて届きます。
メールに寄せたら、まとめる設計が要った
2026年10月6日には、別に出していた要約のメールを止めて、結果のメールに1つの欄として入れました。失敗したときだけは、すぐ送るメールを残しています。
メールの通数は増やさず、1通に載せる中身を増やす形です。僕なら上限のあるメールでは、最初から「どの便に何を載せるか」を表にしてから作ります。
メールの側も止まることがある
10月4日には、メールに載せる外部サービスの数字を取る部分で認証が切れ、送り直しが止まりました。僕の承認で、ログインが切れても影響しない鍵の方式に切り替えています。
知らせの道を1本にすると、その道が止まったときに気づけません。僕は、メールが来ないこと自体を「何かが止まっている」合図として扱うのがいいと考えています。
無人の処理で通知を設計するときの注意
無人の処理では、「終わったら知らせる」より「止まっても気づける」ほうが大事だと僕は考えています。僕の会社の運用から、先に決めておきたいことを4つに分けました。
始める前に決める4つのこと
- どこで受け取るか:席の外で知りたいなら、そのMacの外へ届く手段(メールやチャット)を選ぶ
- 何回まで送るか:送り先の上限を先に確かめ、回数を決める。上限に合わせて便をまとめる
- 失敗の知らせを別にするか:結果のまとめとは別に、失敗だけはすぐ届く道を残す
- 来ないときをどう読むか:知らせが来ないこと自体を、止まった合図として扱う
Stopフックで送る方法もある
指示文の手順に入れる代わりに、Stopのフックで送信のコマンドを動かす方法もあります。Stopは応答が終わるたびに動くので、送り先の上限との相性を先に考えます。
コマンドのフックは "async": true を付けると、Claude Codeを待たせずに裏で動きます。外のサービスに送るなら、相手の宛先や鍵は設定ファイルに直接書かず、別の場所で管理します。
{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "/path/to/send-result.sh", "async": true }
]
}
]
}
}
上の例のスクリプト名は架空です。メールの宛先も、スクリプトの外で管理する形にしておくと、設定ファイルを人に見せるときに困りません。
定期タスクはMacが起きている間しか動かない
デスクトップアプリの定期タスクは、アプリが開いていて、Macが起きている間だけ動きます。スリープ中に予定の時刻を過ぎた回は飛ばされ、起きたときに1回だけ取り戻しの実行が入ります。
つまり、知らせが来ない理由が「止まった」ではなく「そもそも動いていない」こともあります。
対話なしで回すならclaude -pで定期実行する方法を、Mac標準の仕組みで時刻を決めるならlaunchdでclaudeを動かす設定を見てください。
まとめ
- Claude Codeの通知は、通知音・デスクトップ通知・スマホへのプッシュ通知の3通り。足りないときはhooksのNotificationで自分の通知を足す
- デスクトップ通知が設定なしで出るのはGhostty・Kitty・iTerm2だけ。ほかは
preferredNotifChannelを"terminal_bell"にするか、hooksで音を鳴らす - Notificationの
permission_promptは許可の確認から約6秒、idle_promptは応答の終わりから約60秒で動く。通知を止めたり変えたりはできない - スマホ通知はRemote Controlが有効なときの機能。僕の会社では2026年10月2日、無人の定期タスクから届かなかった
- 僕なら無人の処理は最初から、上限つきのメールのように手元の外へ届く道を1本決め、来ないこと自体を止まった合図にします
よくある質問
Claude Codeの作業が終わったら通知音を鳴らせますか?
鳴らせます。設定ファイルの preferredNotifChannel を "terminal_bell" にするとターミナルのベルが鳴ります。好きな音にしたいなら、Notificationフックで音を再生するコマンドを動かします。macOSなら afplay で標準の効果音を鳴らせます。
Claude Codeのデスクトップ通知が出ないのはなぜですか?
多くはターミナルの違いです。2026年10月時点の公式ドキュメントでは、何も設定せずにデスクトップ通知が出るのはGhostty・Kitty・iTerm2だけです。iTerm2は通知の転送をオンにする設定が要り、tmuxの中では allow-passthrough が要ります。
Notificationフックで、Claude Codeの動きを止めたり変えたりできますか?
できません。公式ドキュメントでは、Notificationフックは通知を止めたり書き換えたりできず、記録や外部への転送などに使うものとされています。応答の終わりで続けさせたいときは、Stopフックを使います。
定期タスクの結果をスマホで知るにはどうすればいいですか?
公式のスマホ通知はRemote Controlが有効なセッションの機能です。僕の会社の実測では、無人の定期タスクはRemote Controlにつながらず通知が届きませんでした。今は結果をメールで受け取っています。
