TATSUYA HORIKAWA
August 9, 2026·Engineering·5 min read

毎晩『異常あり』と鳴る警報が、全部ウソだった

自動の見回りが、毎晩1件だけ『異常』を出し続けた。調べてみると、おかしかったのは見られている側ではなく、見ている側の道具だった。誤報を放置すると警報そのものが死ぬ、という話。

毎晩『異常あり』と鳴る警報が、全部ウソだった

私は、自分が関わっているサイトを毎晩まとめて見回る仕組みを動かしている。 人が寝ている間に20ほどのページを実際に開きにいって、ちゃんと表示されるか、 中身が壊れていないかを確かめ、朝に結果の一覧を出す。

ある朝から、その一覧に「異常1件」が出るようになった。 翌朝も、その翌朝も、同じ1件。

そして実際には、そのページは何ともなかった。誰が見ても普通に開ける状態だった。

誤報は、見逃しより質が悪いことがある

「実害がないなら放っておけばいい」と思うかもしれない。私はそう思わない。 誤報のいちばんの害は、人が警報を見なくなることだ。

毎晩同じ場所に同じ赤いランプが点いていると、人は3日でそれを風景として扱いはじめる。 そして、本物が混ざった夜にも同じように読み飛ばす。 警報の価値は、鳴った回数ではなく、鳴ったときに人が動くかどうかで決まる。 毎晩鳴る警報は、その時点でもう警報ではない。

だから、実害がなくても消しにいく必要があった。

何が起きていたか——郵便の転送届の話

ウェブサイトの住所には、同じ場所を指す入口が2つあることが多い。 たとえば「〇〇.com」と「www.〇〇.com」。 どちらから来た人も同じページにたどり着けるように、片方に来た人をもう片方へ自動的に送る。 郵便の転送届とまったく同じ仕組みだと思ってもらえればいい。

このとき、送る側は「ここではありません、あちらへどうぞ」という合図を返す。 そして、この合図には番号が振られている。 昔からある番号と、あとから追加された比較的新しい番号があって、意味はほとんど同じだ。 どちらも「あちらへ行ってください」と言っている。

問題はここだった。

私の見回りの道具は、昔からある番号なら、黙って新しい住所まで追いかけてくれる。 ところが新しいほうの番号を返されたときだけ、追いかけずにその場で止まる。 知らない返事を受け取った、という扱いになるからだ。

止まったので「ページを取得できませんでした」と記録される。 それが朝の一覧では「異常」と表示される。 実際には、転送先の住所ではページが完全に正常に表示されていた。 つまり壊れていたのは見られている側ではなく、見ている側だった。

なぜある日から突然そうなったのかというと、サイト側が転送の合図を新しい番号のものに変えたからだ。 サイト側は何も間違っていない。むしろ作法としては正しい。

いちばん厄介だったのは「手元では再現しない」ことだった

ここが今回いちばん面白かったところだ。

同じ見回りの命令を、私が自分の画面で走らせると、何の問題も起きない。 正常に取得できてしまう。異常も出ない。

理由は、その命令を動かす土台——プログラムを動かすための道具——の版が、 私の手元と、夜中に自動で動く側とで違っていたことだった。 新しい版はその番号にちゃんと対応していて、古い版は対応していない。 同じ命令書を渡しても、渡す相手の世代が違えば結果が変わる。

「自分の手元では動くのに、本番でだけ落ちる」という現象の正体はだいたいこれだ。 腕の問題でも、書き方の問題でもない。環境の差でしかない。 そして手元でいくら試しても、手元の道具が新しいままである限り、永久に再現しない。

こういうときは、試す回数を増やすのではなく、本番と同じ道具で一度試すのが正解になる。 今回もそれで、5分で確定した。

直し方と、危うく踏むところだったもうひとつの罠

直し方自体は単純で、見回り先を最初から転送後の住所(www のほう)に変えた。 訪問者が実際に見ているのはそちらなので、監視としてもそのほうが素直だ。

ただし、そのまま変えていたら、今度は別の理由で警報が鳴るところだった。

この見回りには、もうひとつ見張りがついている。 「昨日と比べてページの中身の量が3割以上変わっていたら、 中身が別のものにすり替わった疑いあり」という判定だ。 見た目は正常なのに配信されている中身だけが入れ替わる、という事故を拾うためのもので、 これは実際に過去1回、それで助かったことがある。

ところが、前の晩に記録されていた「昨日の中身」は、 転送の合図だけが返ってきたときの、紙切れ1枚ぶんのデータ(147バイト)だった。 新しい住所の本物のページは、約17万バイトある。

つまり監視先を直した瞬間、この見張りが 「昨日147だったものが今日17万になった。中身がすり替わっている」と判定して、 別の名前の誤報が1件生まれることになる。

なので、比較のもとになっている「昨日の記録」のほうも一緒に捨てた。 次の晩は「新しく見はじめた対象なので、まだ比べる相手がいない」という扱いで静かに始まる。

修正したあと、実際に1回走らせて確認した。 ページは正常に取得でき、タイトルも計測タグも想定どおりで、警報はゼロ。 ついでに残りの見回り先も全部調べて、同じ番号を返しているところが他に無いことも確かめた。 作業時間は、原因の特定を含めて30分ほどだった。

まとめ

  • 誤報を放置すると、警報そのものが死ぬ。 実害がなくても消しにいく理由はそこにある
  • 「異常です」と言われたら、まず本当に異常かを確かめる。今回の犯人は見張られる側ではなく、見張る側の道具だった
  • 手元で再現しないときは、自分の腕ではなく環境の差を疑う。本番と同じ道具で1回試すのが最短
  • 警報を1つ黙らせるときは、その修正が別の警報を鳴らさないかまで見る。 今回はここが本題だった

これで毎晩の1件が消えた。次にこの一覧が赤くなったときは、それは本物だ。 そう言い切れる状態を保つことが、監視という仕事の中身なのだと思う。

Thanks for reading.

読んでくれてありがとう。感想や反論、どちらも歓迎します。

SharePost