広告の自動点検が14回動き、合格も不合格も0回だった話

期待していたのは「翌朝に合否が並んでいること」

広告の点検と自動改善を行う自動処理を、毎日決まった時刻に走らせている。人が見なくても回る状態にするために最初に要るのは、走ったかどうかではなく、走った結果が合格だったか落ちたかが、後から読める形で残っていることだと考えていた。実行が終わったら、そのジョブが何を読み戻して、どう判定したのかが記録に出る。翌朝その記録を開けば、合格か不合格かが並んでいる。そういう状態を期待していた。

期待が成り立っているかを確かめるため、実行状況を書き出しているログファイル(job-status.jsonl)を、直近14日ぶんの窓で読み返した。読み方は単純で、窓の中にあるこの自動処理の実行レコードを拾い、ステータスが合格・不合格・未確認のどれになっているかを数えるだけにしている。

実際に出ていたのは、合否の付いていない記録だった

2026-09-10〜2026-09-23の14日を窓にして数えた結果が次のとおり。

見た期間 14日(2026-09-10〜2026-09-23)
この自動処理が動いた回数 14回
未確認だった回数 14回
合格だった回数 0回
落ちた回数 0回
未確認だった割合 100.0%

動いてはいる。止まってもいない。落ちてもいない。ただし合格も0回で、落ちたのも0回だった。全部が未確認のまま置かれている。

ここで書き方を決めておく必要がある。落ちた回数が0回だったことを、そのまま「異常なし」とは書かない。落ちた記録が無いのは、判定そのものが成立していないからであって、中身が正しかったからではない。確かめていないものを正常と書かない。この記事でいちばん守りたいのはそこだけと言っていい。

未確認の理由は「読み戻した証拠が出ていません」

ログには、なぜ確かめられないのかの理由も一緒に残っていた。記録に出ていた文面は「読み戻した証拠が出ていません」。つまり、この自動処理が広告側の設定や数値を実際に読み戻して、その内容をもとに判定した、という痕跡がログに出ていない。

実行の開始と終了は残る。例外も出ていない。しかし判定の材料が残っていないので、合格とも不合格とも書けない。結果として、判定欄は未確認で埋まる。数えた期間のあいだ、これが14回続いた。

この段階で言えるのは、原因が次のどれかに絞られていない、ということだけである。読み戻し自体をしていないのか、読み戻してはいるが証拠をログに書く処理が抜けているのか、書いてはいるが集計側が拾えていないのか。切り分けができていないので、どれかに決め打ちして直すことはしていない。

窓をずらして数え直しても、最後の未確認は04:10のまま

一度きりの集計だと、たまたまその期間だけの話かもしれない。そこで、窓の始点と終点を一日ずつずらして読み直した。

  • 14日(2026-09-10〜2026-09-23)/最後に未確認になった時刻:2026-09-23T04:10
  • 14日(2026-09-11〜2026-09-24)/最後に未確認になった時刻:2026-09-24T04:10
  • 14日(2026-09-12〜2026-09-25)/最後に未確認になった時刻:2026-09-25T04:10

窓をずらすたびに、最後に未確認になった時刻も一日ぶん進む。時刻はいずれも04:10で揃っている。毎朝同じ時刻に起動して、同じように未確認で終わっている、という読み方になる。途中でたまに合否が付いていたなら、窓をずらした時点で最後の未確認の時刻は止まるはずだが、止まっていない。

まだ直っていない

この記事を書いている時点で、この問題は直っていない。直す前にやることが残っているからである。

  1. ジョブの実装をさかのぼり、読み戻した内容をログへ書く処理が存在するかを確認する
  2. 存在する場合、その処理が実行の流れのどこで呼ばれ、どの条件で飛ばされるかを追う
  3. 書かれているのに集計側へ届いていないのか、そもそも書かれていないのかを分ける

つまり、実装漏れなのか、タイミングの問題なのか、設定の取り違えなのか。ここを分けないまま「証拠を出す処理を足す」と、証拠が出ないまま行数だけ増える。だから今は、原因の特定を次の一手として置いている。

人間の仕事は減ったか

減っていない。

この自動処理が入ったことで、点検と改善の操作そのものは人が触らなくても起動するようになった。そこは自動化である。ただし、動いた14回について、合格だったのか落ちたのかは人が別途たしかめないと分からない。未確認だった割合は100.0%で、判定を人が肩代わりしている状態が続いている。

自動運転と呼べるのは、結果の可否を機械側が言い切り、人がその言い分を後から抜き取りで検算できる状態になってからだと考えている。今はその手前にいる。実行は自動、判定は手動。残っているので、残っていると書く。

この記事から持ち帰れること

自動処理を入れたあとに最初に見るべきなのは、エラー件数ではなく未確認の件数だった。落ちた回数が0回という数字は、放っておくと「うまくいっている」と読めてしまう。同じ期間に合格も0回だったことを並べて初めて、判定が成立していないと分かる。

合格・不合格・未確認の三つを分けて数える。未確認が残っているあいだは、その自動処理は「回っている」と書かない。今回の窓では、その基準で見て未確認が100.0%だった。