## 経緯
以前に以下の対応をしたが、結局安定しない微妙なものになってしまった。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2025-06-25 Claude Codeの作業や回答が終わり人間待ちになったとき通知を表示する
</div>
<div class="link-card-v2-content">Claude Codeの作業完了時に通知を表示したいと考え、AppleScriptの`osascript`コマンドでは通知できなかったため、GhosttyのOSC 9シーケンスを利用した。macOS 15.5、Ghostty 1.1.4、Zsh 5.9環境で動作を確認したが、通知が安定しない場合もあった。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2025-06-25 Claude Codeの作業や回答が終わり人間待ちになったとき通知を表示する" class="internal-link"></a>
</div>
%%[[📜2025-06-25 Claude Codeの作業や回答が終わり人間待ちになったとき通知を表示する]]%%
そんなときに良い記事を見たのでやってみようと思った。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://static.zenn.studio/images/logo-transparent.png" />
<span class="link-card-v2-site-name">Zenn</span>
</div>
<div class="link-card-v2-title">
Claude CodeのHooks機能で完了通知を受け取りましょう
</div>
<img class="link-card-v2-image" src="https://res.cloudinary.com/zenn/image/upload/s--vszENWYy--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:Claude%2520Code%25E3%2581%25AEHooks%25E6%25A9%259F%25E8%2583%25BD%25E3%2581%25A7%25E5%25AE%258C%25E4%25BA%2586%25E9%2580%259A%25E7%259F%25A5%25E3%2582%2592%25E5%258F%2597%25E3%2581%2591%25E5%258F%2596%25E3%2582%258A%25E3%2581%25BE%25E3%2581%2597%25E3%2582%2587%25E3%2581%2586%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:RUI%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2l4VVMwY0t3RHdtTktYOVczRUxHWUVaMk8tVnVDNXFnSWI0QjQwcEE9czk2LWM=%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png" />
<a href="https://zenn.dev/the_exile/articles/claude-code-hooks"></a>
</div>
## 環境
| 対象 | バージョン |
| --------------- | ------------------- |
| [[macOS]] | 15.5 |
| [[Ghostty]] | 1.1.4-main+3e79c4b7 |
| [[Claude Code]] | 1.0.40 |
## 方針
| タイミング | 通知アプリ | 通知制御 |
| ------------ | ---------------------------- | ---------------------------------- |
| ユーザー確認 | [[Ghostty]] | [[Claude Code]]の設定 |
| タスク完了 | [[AppleScript]] ([[OS]]通知) | [[フック (Claude Code) \| フック]] |
先の[[Zenn]]記事では、どちらも[[フック (Claude Code)|フック]]を利用した[[AppleScript]]による[[OS]]通知を行っていたが、以下の点で『ユーザー確認』は[[Ghostty]]の方が優れていると感じたため。
- 通知をクリックすると[[Ghostty]]の対象タブ(ペイン)が自動で表示・フォーカスされる
- 通知がちょうど良いタイミングで消えてくれる
- 通知受信時に該当のタブ(ペイン)がアクティブでなかったとき
- 該当のタブ(ペイン)をアクティブにすると通知が消える
- 通知受信時に該当のタブ(ペイン)がアクティブだったとき
- それ以外にフォーカスを表すと通知が消える
[[AppleScript]]を使った[[OS]]通知の場合、クリックすると[[スクリプトエディタ (Mac)|スクリプトエディタ]]が開いてしまうし、明示的に `x` ボタンを押さないと消えない。
## 設定
### ユーザー確認時
不要。
### タスク完了時
[[Claude Code]]を立ち上げ、`/hooks` を実行し、 `4.Stop...` を選ぶ。
[[AppleScript]]のコードを指定する。
```
osascript -e 'display notification "タスクが完了しました" with title "Claude Code" subtitle "処理終了" sound name "Hero"'
```
`3. User settings` を指定する。(すべてのケースで通知してほしいので)
`~/.claude/settings.json` に以下が追加されているはず。
```json
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"タスクが完了しました\" with title \"Claude Code\" subtitle \"処理終了\" sound name \"Hero\"'"
}
]
}
]
},
```
## 通知結果
ユーザー確認時はこのメッセージが届く。
![[2025-07-02-16-18-03.avif]]
タスク完了時は以下。
![[2025-07-02-17-06-53.avif]]
## トラブルシューティング
[[macOS]]で通知が上手くいかないパターンはいくつかあるので以下2つが参考になるはず。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝Claude CodeのNotificationが表示されなかったり表示されてもすぐ消えてしまう
</div>
<div class="link-card-v2-content">macOSやターミナル(Ghostty)で通知が表示されない、すぐ消える、通知センターに残らない場合の原因や「おやすみモード」「通知設定」など通知トラブルの対処法を解説している。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝Claude CodeのNotificationが表示されなかったり表示されてもすぐ消えてしまう" class="internal-link"></a>
</div>
%%[[📝Claude CodeのNotificationが表示されなかったり表示されてもすぐ消えてしまう]]%%
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝ターミナルからosascriptで通知しようとしても何も起こらない
</div>
<div class="link-card-v2-content">macOS 15.5やGhosttyでosascript display notificationコマンドを実行しても通知が表示されない場合の対処法である。おやすみモードやスクリプトエディタの通知設定が原因であることが多い。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝ターミナルからosascriptで通知しようとしても何も起こらない" class="internal-link"></a>
</div>
%%[[📝ターミナルからosascriptで通知しようとしても何も起こらない]]%%