ntfy.sh あり)。curl -d "本文" ntfy.sh/トピック名 だけで通知が飛ぶ手軽さが特徴。watch.sh 内で NTFY_URL="https://ntfy.sh/m1104m-cli-notify" を使い、LINEメモのレポート生成・Cloudflare Pagesデプロイ完了時の通知に利用している。今回の「CLI実行完了通知」はこの用途を指していると推測。ntfy.sh の公開トピックは「トピック名がパスワード代わり」であり、知られると誰でも購読・投稿できる。watch.sh:23 で NTFY_URL="https://ntfy.sh/m1104m-cli-notify" を定義し、LINEメモを検知→Claude Codeでレポート生成→Cloudflare Pagesへデプロイ、という一連のバッチ処理が完了した際に通知を送っている(コミット 88e1c23 Deploy reports to Cloudflare Pages and notify via ntfy)。これがメモにある「今は cli の実行完了に使っている」の実体と考えられる。
Priority: high で通知curl -d "Only $avail GB available" -H "Priority: high" ntfy.sh/mytopic
pam_exec.so) と連携し、ログインの度に通知?template=github のようなクエリでGitHub/Grafana/Alertmanagerの生JSONペイロードを自動整形して送れる機能もあるAt/In ヘッダーでの遅延送信を利用し、一定時間ごとに未来の警告メッセージを予約し続け、プロセスが正常に動いていれば都度上書き、止まったら予約通り警告が届く、という仕組みが組める。長時間バッチや監視スクリプト自体が異常終了・ハングした場合に気づけるのが利点(現状の「正常終了時だけ通知」を補完する形)。
while true; do
curl -H "In: 5m" -d "Heartbeat stopped!" ntfy.sh/mytopic/check
sleep 60
done
現状は本文だけのシンプルな通知と推測されるが、以下のヘッダーを足すだけで情報量を増やせる。
| 機能 | ヘッダー | 用途例 |
|---|---|---|
| 優先度 | Priority: 5〜1 | エラー時だけ最優先で振動させる |
| タイトル | Title: ... | 「line-obsidian: レポート生成完了」等を明示 |
| 絵文字タグ | Tags: white_check_mark / warning | 成功✅・失敗⚠️を視覚的に区別 |
| クリック時URL | Click: https://... | 通知タップでPages上のレポートを直接開く |
| アクションボタン | Actions: view, レポートを開く, https://... | ボタンから即座に遷移 |
| Markdown | Markdown: yes | リンクや強調をリッチ表示 |
複合例(ドアベル通知だが構造は流用可能):
curl \
-H "Title: Door camera alert" \
-H "Priority: 5" \
-H "Tags: warning" \
-H "Click: https://home.nest.com/" \
-H "Actions: http, Open door, https://api.nest.com/open" \
-d "Someone at the door. 🐶" \
ntfy.sh/doorbell
これを watch.sh に当てはめると、成功時は Tags: white_check_mark + Click: <生成されたPages URL>、失敗時は Priority: high + Tags: warning として通知を出し分けられる。
m1104m-cli-notify のようなトピック名を知っている第三者は誰でも購読・投稿が可能(ntfy.sh はレート制限とfail2banで一定の防御はしている)。個人利用・通知内容が非機密であれば実用上大きな問題にはなりにくいが、機密情報を流す場合はセルフホストまたは require-login などのアクセス制御が推奨されている。
watch.sh のntfy通知に Title / Tags / Click(生成されたPages URLへのリンク)を追加し、通知だけで内容と結果がわかるようにリッチ化する。In ヘッダーを使ったデッドマンズスイッチ方式の導入を検討する。m1104m-cli-notify は公開トピックなので、通知内容に個人情報や機微な内容を含めないか、含めるならセルフホストや require-login の導入を検討する。