何をしたかったか:定期処理を「誰かが見ている」状態にする
TechAthletes では、記事の公開・集計・バックアップのように毎日決まった時刻に動く処理を、共通の起動用の包み(ラッパー)から動かしています。この包みは、処理の開始と終了をそれぞれ1行ずつログに残します。そして終了コードが0でなければ、社内チャットへ通知します。
通知は最初からONにしています。通知の無い定期処理は、「回っているつもりで、実は誰も見ていない」状態になるからです。失敗したら知らせが来る、来なければ問題なし。この前提で運用していました。
この記事は、その前提が崩れた日の記録です。
何が起きたか:通知そのものが飛ばなかった
2026-09-28 の 13:39、ある定期処理が失敗しました。原因はネットワークが切れていたことでした。
ここまではよくある失敗です。問題はこの後でした。失敗を知らせるはずの通知も、同じ理由で送れなかったのです。ネットワークが切れていては、社内チャットに届けようがありません。ログに残ったのは「通知できなかった」の1行だけでした。処理の終わりと通知の結果は、ログでは次のように出ていました。
END rc=1
NOTIFY-FAILED rc=1
END の行は処理が終了コード1で終わったこと、NOTIFY-FAILED の行は通知を送ろうとして送れなかったことを表しています。チャットには何も届いていません。
この「通知できなかった」がどれくらい起きているか数えてみると、この日の1件だけでした。めったに起きないが、起きると何も届かない失敗です。失敗を知らせる経路が、失敗の原因に巻き込まれていました。
何が分かったか:「通知が来ていない」は「失敗が無かった」と見分けられない
この件で一番大きかったのは、通知が抜けたことよりも、受け取る側から見て区別がつかないことでした。
通知が飛ばなかったとき、ログに残るのは終了コードの行だけになります。チャットを見ている側にとっては、
- 処理が成功したので、通知が来なかった
- 処理は失敗したが、通知が届かなかった
のどちらも「何も来ていない」という同じ見え方になります。通知を「失敗したら来るもの」として使っている限り、届かなかった失敗は成功と同じ顔をして紛れ込みます。
通知先の設定が抜けている場合も、やはり「何も来ない」になります。つまり「何も出ていない」には、少なくとも3つの意味が混ざっていました。
どう直したか:撃ち直しと、結果を3通りの言葉で残すこと
包みの側を、次のように変えました。
- 通知が送れなかったら、ネットワークが戻るのを待って1回だけ撃ち直す。待つのは最大120秒。
- それでも送れなければ、「通知できなかった」を必ずログに残す。黙って飛ばさない。
- 通知先の設定が無い場合も、「設定が無いので通知しなかった」と残す。
そのうえで、通知の結果を必ず次の3通りのどれかで記録するようにしました。
| ログに残す言葉 | 意味 |
|---|---|
| 通知した | 送れた |
| 通知できなかった | 送ろうとして送れなかった(ネットワーク断など) |
| 通知しなかった | 送り先の設定が無い |
大事なのは、3つを別の言葉にしたことです。「通知していない」の1語にまとめてしまうと、送れなかったのか、そもそも送る設定が無かったのかが後から分かりません。「何も出ていない」を「問題なし」と読まないために、言葉を分けています。
撃ち直しは、ネットワークが待っている間に戻れば通知を届けるための手当てです。3通りの記録は、撃ち直しても届かなかったときに「届かなかった」という事実を残すための手当てです。役割が違うので、両方入れています。
対策をどこに当てるか
1つ気をつけていることがあります。今回の対策は、どれも報告の側の対策です。通知を届きやすくし、届かなかったことが分かるようにしました。けれども、ネットワーク断で処理そのものが失敗したことは、これでは変わりません。
**報告の側に当てた対策では、処理そのものは直らない。**通知を直したことで「直った」と思い込むと、元の失敗はそのまま起き続けます。対策を入れたら、「その対策は、起きた失敗そのものを再現できるか」を確かめるようにしています。
業務に置き換えると
自社の定期処理や自動化を点検するときは、次の点を確かめてみてください。
- **定期処理に通知が付いているか。**付いていなければ、回っているつもりで誰も見ていない状態になっています。
- **「通知が届かなかったこと」も残るか。**届かない通知は、無いのと同じです。送れなかったという事実が、ログなどどこかに残るかを見ます。
- **通知の経路が、障害の原因に巻き込まれないか。**ネットワーク障害の通知をネットワークで送るように、失敗と通知が同じ弱点を抱えていないかを考えます。
- 「通知が来ていない」と「失敗が無かった」を見分けられる言葉がログにあるか。「送れた」「送れなかった」「送る設定が無い」を別々に記録しておけば、後から読み違えません。
- **入れた対策が、起きた失敗そのものを再現できるかを確かめたか。**報告の改善と処理の改善は、別物として扱います。
この記事は、TechAthletes が自社のサービスを作る中で記録した実測をもとに書いています。業務への導入のご相談は 仕事の窓口 で受け付けています。