ClaudeCodeに作業を任せて他の仕事をしていたら、気づいたときには30分も前に処理が完了していた…そんな経験はありませんか?実は、ClaudeCodeには作業完了やユーザー入力待ちの際に自動で通知を出してくれる機能があるんです。2025年6月末に追加されたHooks機能を使えば、もう画面を何度も確認する必要はありません。
この記事を読めば以下のことがわかります。
- ClaudeCodeのHooks機能を使った通知設定の完全マスター方法
- macOS、Windows、スマホでも使える3つの通知実装テクニック
- 実際の開発現場で使われている応用事例と最新トレンド
ClaudeCodeの通知機能の正体とは?Hooksが変えた開発体験

AIのイメージ
ClaudeCodeは2025年6月30日頃にHooks機能をリリースしました。これは開発者の間で「ゲームチェンジャー」と呼ばれるほどのインパクトがあった機能です。Hooksとは、ClaudeCodeのライフサイクルにおける特定のタイミングで自動的にシェルスクリプトやコマンドを実行できる仕組みのことです。
従来は「ClaudeCodeが作業を完了したら通知してね」とプロンプトで指示しても、Claudeが忘れてしまうことがありました。しかしHooksを使えば、確実に毎回通知が届くようになります。これは単なる便利機能ではなく、開発効率を劇的に改善する革命的な仕組みなのです。
ClaudeCodeのHooksには全部で8つのイベントタイプがあります。その中でも通知に関連する主要なものは以下の3つです。
Notificationイベントは、ClaudeCodeがツールの実行許可を求めているとき、またはプロンプト入力が60秒以上アイドル状態のときに発火します。つまり、Claudeがあなたの操作を待っているタイミングで通知を出すことができます。
Stopイベントは、ClaudeCodeのメインエージェントが応答を完了したときに発火します。ただし、ユーザーによる中断の場合は発火しません。長時間かかる処理を任せて他の作業をしている場合、このイベントで通知を受け取ることで無駄な待ち時間を完全にゼロにできます。
SubagentStopイベントは、サブエージェント(Taskツール)が応答を完了したときに発火します。複雑なタスクを分割して処理している場合に便利です。
これらのイベントに対して通知コマンドを設定することで、ClaudeCodeが自動的に通知を送ってくれるようになります。設定ファイルは~/.claude/settings.jsonに配置され、一度設定すればすべてのプロジェクトで有効になります。
実践!通知を実現する3つの具体的な方法
方法1osascriptでシンプルにmacOS通知を実装する
macOSユーザーなら、外部ツールのインストールなしで今すぐ通知を実装できます。osascriptはmacOSに標準で搭載されているコマンドラインツールで、AppleScriptを実行できます。
まず、~/.claude/settings.jsonを開いて以下のように設定します。
| イベント | コマンド例 |
|---|---|
| Stop | osascript -e ‘display notification “作業が完了しました” with title “ClaudeCode” sound name “Glass”‘ |
| Notification | osascript -e ‘display notification “入力待ちです” with title “ClaudeCode” sound name “Basso”‘ |
このコマンドではdisplay notificationを使って通知を表示し、sound nameで通知音を指定しています。macOSには「Glass」「Basso」「Blow」など様々な通知音が用意されているので、好みの音を選べます。GitHubのmacOSsystemsoundsリポジトリで全ての音を確認できます。
通知がうまく表示されない場合は、システム設定の通知センターで「スクリプトエディタ」またはターミナルアプリの通知許可を確認してください。一度サンプル通知をスクリプトエディタで実行することで、通知許可のダイアログが表示されます。
方法2terminal-notifierで高度な通知機能を活用する
より柔軟な通知を実現したい場合は、terminal-notifierというOSSツールを使う方法があります。これはHomebrewで簡単にインストールできるmacOS専用の通知ツールです。
Homebrewがインストールされている環境なら、以下のコマンド一発でインストールできます。
brew install terminal-notifier
次に、~/.claude/settings.jsonに以下のような設定を追加します。
設定のポイントは、matcherフィールドを空文字列にすることで全てのイベントに対して通知を発火させられる点です。また、-messageオプションで通知メッセージを、-soundオプションで通知音を指定できます。
terminal-notifierの優れている点は、通知のカスタマイズ性が高いことです。通知のタイトル、サブタイトル、アクションボタンなど、様々な要素をコントロールできます。さらに、システム設定の通知センターで「バナー」ではなく「持続的」に設定しておけば、席を外していても後から気づくことができます。
方法3ntfy.shでスマートフォンにプッシュ通知を送る
2026年の最新トレンドとして注目されているのが、スマートフォンへのプッシュ通知です。デスクから離れていてもClaudeCodeの状態を把握できるこの方法は、特にモバイルワークをする開発者に人気があります。
ntfy.shは、HTTP経由で簡単に通知を送信できるpub-sub型の通知サービスです。アプリをインストールして、自分だけのトピック名を決めるだけで使い始められます。
まず、ntfyアプリ(iOS/Android対応)をダウンロードして、ユニークなトピック名を決めます。例えば「my-claude-alerts-x7y9z」のような推測されにくい名前にしましょう。次に、環境変数としてトピック名を設定します。
export NTFY_TOPIC=”my-claude-alerts-x7y9z”
この環境変数の設定は.bashrcや.zshrcに追加しておくと便利です。そして、~/.claude/settings.jsonに以下のように設定します。
この設定により、Notificationイベントが発火するたびにcurlコマンドがntfy.shにPOSTリクエストを送信し、あなたのスマートフォンに通知が届きます。外出中でもClaudeCodeの状態を把握できるため、カフェで作業している時や移動中でも安心です。
実際に、2026年1月に公開された事例では、開発者がiPhoneからTermiusアプリとmosh接続を使ってクラウドVM上のClaudeCodeを操作し、Poke webhookサービスを経由してスマホに通知を送る方法が紹介されています。この開発者は5つのClaudeCodeインスタンスを並行実行しており、通知システムなしでは管理が不可能だったと語っています。
transcriptを活用した作業内容の要約通知
単に「作業が完了しました」という通知だけでなく、何の作業が完了したのかを通知に含めたい場合もあるでしょう。そんなときは、ClaudeCodeが自動生成するtranscriptファイルを活用します。
StopイベントやNotificationイベントのhookが受け取るJSON入力には、transcript_pathというフィールドが含まれています。このファイルはJSONL形式(1行1JSONオブジェクト)で、セッション中のすべてのやり取りが記録されています。
以下は、transcriptから最新のアシスタントメッセージを抽出して通知に含めるシェルスクリプトの例です。
このスクリプトでは、まずINPUTとしてhookが受け取ったJSONデータを読み込み、jqコマンドを使ってtranscript_pathを抽出します。次に、そのファイルの最後の10行からアシスタントのメッセージを取り出し、改行を削除して最初の60文字に制限しています。最後に、osascriptコマンドで通知を表示する際にこのメッセージを含めます。
このスクリプトを~/.claude/hooks/notify-end.shのようなパスに保存し、実行権限を付与した上で、settings.jsonのStopイベントに以下のように設定します。
これにより、「ClaudeCode (プロジェクト名) Task Done」というタイトルで、実際の作業内容の要約が通知メッセージとして表示されます。作業内容を確認するためにターミナルに戻る必要がなくなり、通知だけで次のアクションを判断できるようになります。
ClaudeCode開発者が実践する最先端の通知活用術
ClaudeCodeの開発者であるBoris Chernyは、2026年1月にX(旧Twitter)で自身のワークフローを公開し、開発者コミュニティで大きな話題となりました。VentureBeatでも取り上げられたこの投稿では、彼が5つのClaudeCodeを並行実行し、iTerm2のシステム通知を使って管理している様子が紹介されています。
彼のワークフローの核心は、通知システムによって「待ち時間ゼロ」を実現している点です。1つのClaudeCodeがテストを実行している間に、別のClaudeCodeがレガシーモジュールのリファクタリングを行い、さらに別のインスタンスがドキュメントを作成する、というように複数の作業を同時進行させています。通知がなければこのような並行作業は不可能です。
また、音声通知を使ったアプローチも人気があります。macOSのsayコマンドを使えば、「プロジェクト名 + 完了」などのメッセージを音声で読み上げることができます。
say “プロジェクト名が完了しました”
VoiceVoxやAivisSpeechといった音声合成ソフトウェアとMCPサーバーを組み合わせることで、ずんだもんやその他のキャラクターの声で通知を読み上げることも可能です。ただし、この方法はプロンプトベースのため、確実性はhooksの直接実行よりも低くなります。
2026年1月時点での最新トレンドとしては、AI生成の要約メッセージを通知に含める手法が注目されています。claude -pコマンドを使って作業内容を20文字程度に要約し、それを通知メッセージとして表示する方法です。これにより、長い作業内容でも一目で把握できるようになります。
Hooksの8つのイベントタイプを理解して使いこなす
通知に焦点を当ててきましたが、ClaudeCodeのHooksには他にも強力なイベントタイプがあります。これらを理解することで、通知だけでなく様々な自動化が可能になります。
PreToolUseイベントは、Claudeがツールを使う直前に発火します。このイベントでは、危険なコマンド(rm -rfなど)や機密ファイル(.envファイルなど)へのアクセスをブロックすることができます。exit code 2を返すことで、ツールの実行を阻止し、Claudeにフィードバックを与えることができます。
PostToolUseイベントは、ツールの実行が成功した直後に発火します。このイベントは自動フォーマッティングに最適です。例えば、WriteツールやEditツールの後にPrettierやgofmtを自動実行することで、コードスタイルを常に統一できます。
UserPromptSubmitイベントは、ユーザーがプロンプトを送信した直後、Claudeが処理する前に発火します。このイベントを使えば、プロンプトのバリデーションや、追加コンテキストの注入が可能です。例えば、現在のgitステータスやTODOリストを自動的にプロンプトに追加することができます。
SessionStartイベントは、ClaudeCodeが新しいセッションを開始したときや既存セッションを再開したときに発火します。開発コンテキストのロード、環境設定、ログの初期化などに使えます。
PreCompactイベントは、ClaudeCodeが会話コンテキストを圧縮する前に発火します。transcriptのバックアップやコンテキストの保存に便利です。
PermissionRequestイベントは、ユーザーに許可ダイアログが表示されるときに発火します。このイベントでは、特定のコマンド(npm testなど)を自動承認したり、逆に自動拒否したりできます。matcherに「Bash(npm test*)」のように指定することで、特定のコマンドパターンに対してのみ自動承認することも可能です。
これらのイベントを組み合わせることで、ClaudeCodeの動作を完全にコントロールできるようになります。例えば、PreToolUseで危険なコマンドをブロックし、PostToolUseでフォーマッターを実行し、Stopで通知を送る、といった多層的な自動化が実現できます。
現場で本当に役立つ!実践的なトラブルシューティング集

AIのイメージ
ClaudeCodeの通知設定でよく遭遇する問題と、その解決策を実体験ベースで紹介します。これらは実際に多くの開発者が直面している課題です。
通知音は鳴るのに通知バナーが表示されない問題
この現象は非常に多くの人が経験しています。音は聞こえるのに、肝心の通知内容が見えないという状況です。原因は通知スタイルの設定にあります。macOSのシステム設定で、該当するアプリの通知スタイルが「なし」や「バッジのみ」になっている可能性があります。
システム設定→通知から、ターミナルアプリまたはterminal-notifierを探して、通知スタイルを「バナー」または「アラート」に変更してください。さらに重要なのは、「プレビューを表示」オプションを「常に」に設定することです。これを「ロック中のみ」にしていると、作業中は通知内容が表示されません。
また、VScodeの統合ターミナルからClaudeCodeを実行している場合、通知の挙動が不安定になることがあります。これはVScodeが独自のターミナルエミュレーターを使用しているためです。この場合、iTerm2やKittyなどの専用ターミナルアプリから実行すると安定します。
settings.jsonを編集したのに反映されない悪夢
これは初心者が必ず一度は経験する問題です。settings.jsonを編集して保存したのに、全く変化がない。実は、ClaudeCodeはセキュリティ上の理由から、実行中のセッションには設定変更を即座に反映しない仕様になっています。
解決方法は2つあります。1つ目は、ClaudeCodeを完全に終了して再起動することです。Ctrl+Dでセッションを終了し、再度claude codeコマンドを実行します。2つ目は、/hooksスラッシュコマンドを使って設定を確認し、変更を承認することです。/hooksを実行すると、設定ファイルの変更がレビュー待ちになっている場合、それを確認して適用できます。
さらに厄介なのが、JSONのシンタックスエラーです。カンマの付け忘れや括弧の閉じ忘れがあると、settings.json全体が無視されます。ClaudeCode v2.0以降では/doctorコマンドが追加され、設定ファイルの検証ができるようになりました。通知が動かない場合は、まず/doctorを実行してエラーをチェックしましょう。
複数のClaudeCodeを並行実行したときの通知地獄
Boris Chernyのように5つのClaudeCodeを並行実行すると、通知が大量に飛んできて逆に混乱する問題が発生します。これを解決するには、プロジェクト名やセッション情報を通知に含めることが重要です。
以下のようなスクリプトを作成して、どのプロジェクトからの通知なのかを明確にします。
このスクリプトでは、現在のディレクトリ名(通常はプロジェクト名)を取得し、通知タイトルに含めています。これにより「personal-blog作業完了」「client-app入力待ち」のように、どのプロジェクトの通知なのかが一目でわかります。
さらに上級者向けのテクニックとして、プロジェクトごとに異なる通知音を設定する方法があります。プロジェクトの.claude/settings.jsonに個別の設定を書くことで、重要なプロジェクトには「Sosumi」、通常のプロジェクトには「Glass」のように使い分けられます。
CLAUDE.mdと組み合わせた最強の自動化プロンプト集
通知機能を最大限活用するには、CLAUDE.mdファイルとの組み合わせが効果的です。ここでは実際に現場で使われている実践的なプロンプトパターンを紹介します。
作業完了時に必ず要約を生成させるプロンプト
CLAUDE.mdに以下の指示を追加することで、Claudeが作業完了時に必ず要約を生成するようになります。
この指示により、Claudeは作業完了時に/tmp/claude-summary.txtに要約を書き出します。そして、Stopイベントのhookでこのファイルを読み取って通知に含めることができます。重要なのは「必ず」という強い表現と、具体的なファイルパスを指定することです。
許可確認時に何を待っているのか明示させるプロンプト
Notificationイベントで通知を受け取っても、何の許可を待っているのかわからないことがあります。この問題を解決するために、CLAUDE.mdに以下を追加します。
この指示により、Claudeはツール実行前に一時ファイルに実行内容を記録します。Notificationイベントのhookでこのファイルを読み取ることで、「npm testの実行許可待ち」のような具体的な通知を送れます。
長時間タスクのみ通知させるスマートな条件分岐
すべての作業で通知が来ると煩わしいため、実行時間が一定以上かかった場合のみ通知したいというニーズがあります。以下のシェルスクリプトで実現できます。
このスクリプトでは、transcriptから処理時間を推定し、5分以上かかった場合のみ通知を送ります。短時間のタスクでは通知が来ないため、集中を妨げられません。
チーム開発で差がつく!共有設定とベストプラクティス
個人での利用も便利ですが、チーム全体で通知設定を統一することで、さらに大きな効果を得られます。
gitで管理すべき設定としてはいけない設定
プロジェクトの.claude/settings.jsonはgitにコミットできますが、個人の通知設定(通知音や通知先)はコミットすべきではありません。チームメンバーごとに好みが異なるからです。
ベストプラクティスは、.claude/settings-template.jsonという名前でテンプレートをgitに含め、個人の設定は.gitignoreで除外することです。各開発者は初回セットアップ時にテンプレートをコピーして、自分好みにカスタマイズします。
Slack通知との統合で見逃しゼロ
個人の通知だけでなく、チーム全体で進捗を共有したい場合は、Slack通知との統合が効果的です。以下のようなhookスクリプトでSlackに通知を送れます。
Incoming Webhookを使えば、CI/CDパイプラインのように、ClaudeCodeの作業完了をチーム全体に通知できます。これは特にペアプログラミングや、レビュー待ちの状態を共有する際に有用です。
上級者だけが知っている通知のパフォーマンス最適化
通知機能を使い込むと、パフォーマンスの問題に直面することがあります。特に大量のツール実行が発生するプロジェクトでは、hookの実行時間が積み重なって全体の処理速度に影響します。
並列実行とタイムアウト設定の黄金比
ClaudeCodeのhooksはデフォルトで並列実行されます。つまり、同じイベントに複数のhookが登録されている場合、それらは同時に実行されます。これは効率的ですが、リソースを大量に消費する可能性があります。
タイムアウトは個別のhookごとに設定でき、デフォルトは60秒です。通知のような軽い処理には5秒程度に設定することで、フリーズを防げます。
このように、各hookにtimeoutを設定することで、1つのhookがハングした場合でも他のhookに影響を与えません。
重複実行を防ぐデバウンス戦略
PostToolUseイベントで自動フォーマッターを実行している場合、連続したファイル編集で何度もフォーマッターが起動する問題があります。これを防ぐには、デバウンス機構をスクリプトに組み込みます。
このスクリプトは、ロックファイルを使って最後の実行から2秒以内の再実行をスキップします。これにより、連続した編集操作でもフォーマッターは最後に1回だけ実行されます。
セキュリティを考慮した安全な通知設定
通知機能は便利ですが、セキュリティリスクも考慮する必要があります。特に外部サービスに通知を送る場合、機密情報が漏洩する可能性があります。
transcriptに含まれる機密情報のフィルタリング
transcriptファイルには、APIキーやパスワードなどの機密情報が含まれる可能性があります。通知に要約を含める場合、これらをフィルタリングする必要があります。
このスクリプトは、一般的な機密情報のパターンをに置き換えます。正規表現を調整することで、プロジェクト固有の機密情報パターンにも対応できます。
ntfy.shのトピック名の安全な管理
ntfy.shを使う場合、トピック名が推測されると誰でも通知を受信できてしまいます。環境変数で管理するだけでなく、.envファイルとdotenvライブラリを使った管理を推奨します。
.envファイルは.gitignoreに追加し、チームメンバー間では別の安全な方法(1PasswordやAWS Secrets Managerなど)で共有します。
ぶっちゃけこうした方がいい!
ここまで様々な通知方法やカスタマイズを紹介してきましたが、正直に言うと、最初から完璧を目指すのは逆効果です。私自身、最初は全てのイベントに通知を設定して、結局通知が多すぎて無視するようになった経験があります。
個人的に最も効率的だと思うのは、「Stop + osascript」から始めて、必要に応じて徐々に拡張するアプローチです。osascriptは外部依存がなく、5行程度の設定で動くので、まずこれで作業完了通知だけを実装してください。1週間使ってみて、本当に便利だと感じたら、次はNotificationイベントを追加する。そして本当に必要だと感じたら、transcriptからの要約抽出やntfy.shでのモバイル通知に進む。
もう1つ重要なのは、通知音の選択は真剣に考えるべきだということです。私は最初「Sosumi」という目立つ音を使っていましたが、1日に50回も鳴ると完全にストレスになりました。結局「Glass」というソフトな音に落ち着きました。通知は「気づかせる」ものであって「驚かせる」ものではありません。
また、複数のClaudeCodeを並行実行する場合、通知よりもtmuxやiTerm2のタブ管理の方が重要です。通知だけに頼ると、結局「どのタブを開けばいいんだっけ?」となります。私のおすすめは、tmuxでウィンドウ番号を固定し、通知メッセージに「ウィンドウ3が完了」のように番号を含めることです。これなら「Cmd+3」で即座に該当ウィンドウに切り替えられます。
最後に、チーム開発での失敗談を1つ。全員が同じ通知音を使っていたため、誰のClaudeCodeが完了したのか分からず混乱しました。結局、プロジェクトごとに異なる通知音を割り当てるルールを作り、「プロジェクトA=Glass、プロジェクトB=Ping」のように決めました。これだけで音を聞いただけでどのプロジェクトか判断できるようになり、効率が劇的に改善しました。
要するに、通知設定は「シンプルに始めて、痛みを感じたところから改善する」のが最も効率的です。最初から完璧な設定を目指して時間を浪費するより、まず基本の通知を動かして実際に使ってみる。そこで見えてくる課題に対して、この記事で紹介したテクニックを1つずつ適用していく。それが、通知機能を本当に自分のものにする最短ルートです。
よくある質問
通知が表示されないときの対処法は?
通知が表示されない場合、まず確認すべきはシステムの通知許可です。macOSの場合、システム設定の「通知」からターミナルアプリ、スクリプトエディタ、またはterminal-notifierの通知を有効にする必要があります。また、~/.claude/settings.jsonにJSON構文エラーがあると、hooksが全く動作しなくなります。ClaudeCodeの/doctorコマンドを使って設定ファイルをチェックしましょう。
WindowsでもClaudeCodeの通知は使える?
もちろん使えます!Windowsでは、PowerShellのNew-BurntToastNotificationコマンドレットを使って通知を実装できます。また、Pythonのwin10toastライブラリを使う方法もあります。さらに、クロスプラットフォーム対応のntfy.shを使えば、OS関係なくスマホに通知を送れます。
複数のプロジェクトで異なる通知設定を使い分けたい
Hooksの設定は3つのレベルで管理できます。~/.claude/settings.jsonに書いた設定はユーザーレベルで全プロジェクトに適用されます。プロジェクトディレクトリの.claude/settings.jsonに書いた設定はプロジェクトレベルでそのプロジェクトにのみ適用されます。さらに、エンタープライズ環境では管理ポリシーレベルの設定も可能です。プロジェクト固有の通知音や通知先を設定したい場合は、各プロジェクトの.claude/settings.jsonを編集しましょう。
通知の頻度が多すぎて邪魔になる場合の対策は?
通知が多すぎる場合は、matcherフィールドを活用して通知する対象を絞り込みましょう。例えば、PostToolUseイベントで「Write|Edit」のようにmatcherを指定すれば、ファイルの書き込みや編集時のみ通知されます。また、長時間実行されるタスクのみ通知したい場合は、シェルスクリプト内で処理時間を計測し、一定時間以上かかった場合のみ通知を送るロジックを実装することもできます。
音声通知とデスクトップ通知を併用したい
音声とデスクトップ通知の併用は非常に効果的です。hooksの配列には複数のコマンドを指定できるため、1つ目のhookでosascriptによるデスクトップ通知を実行し、2つ目のhookでsayコマンドによる音声通知を実行することができます。音声は作業中でも気づきやすく、デスクトップ通知は後から確認できるという利点があります。
まとめ通知機能で開発体験を次のレベルへ
ClaudeCodeの通知機能は、単なる便利機能ではなく、開発効率を根本的に変える革命的な仕組みです。Hooks機能を使えば、osascript、terminal-notifier、ntfy.shなど様々な方法で通知を実装できます。
この記事で紹介した3つの方法を使えば、macOSユーザーは今すぐ外部ツールなしで通知を開始でき、より高度な通知が必要な場合はterminal-notifierやntfy.shを活用できます。さらに、transcriptを活用すれば作業内容の要約も通知に含められます。
ClaudeCodeの開発者Boris Chernyが実践している5つの並行実行ワークフローや、モバイルからの開発など、2026年の最新トレンドも紹介しました。これらの手法を取り入れることで、あなたもClaudeCodeを使った開発効率を劇的に向上させることができるでしょう。
まずは最もシンプルなosascriptを使った通知から始めて、徐々に自分のワークフローに合った方法にカスタマイズしていくことをお勧めします。通知機能を活用して、ClaudeCodeとの共同作業を最大限に効率化しましょう!


コメント