朝5時半の集計を、毎朝3日ぶん巻き戻すことにした

朝5時半に、誰も見ていない画面の裏で集計が走る。営業日の変わり目を朝5時に置いてあるので、その30分後に「昨日」が締まったものとして日次の売上を1行作る。 5時40分に週次、5時50分に月次。6時から10時はサーバーの保守作業に空けてあるので、定時のバッチはその前に片づける決まりにしている。 この3本は8月6日まで、それぞれ締まった期間を1回だけ集計していた。日次は前営業日の1日ぶん、週次は先週、月次は先月。 締まってから集計するのだから1回で十分だと思っていた。

売上集計画面の「日次推移」グラフ。2025年9月から2026年9月9日までの売上合計が青い棒、客単価がオレンジの折れ線で1年ぶん並び、左軸は¥0〜¥1,200,000、右軸は¥0〜¥34,000。下にキャスト別売上・コース別売上内訳のCSVボタン付きカードが見えている
この棒の1本1本が、毎朝作られる日次集計の行。右端の3本は翌朝以降も作り直される(画面はデモデータです)。

十分ではなかった。予約の完了もキャンセルも、提供した日の翌日以降に記録されることがある。深夜の仕事を朝に完了にする、翌日に「あれは来なかった」とキャンセルに直す、そういう普通の操作だ。 売上は予約を受けた日ではなくサービスを提供した日の営業日に計上するので、翌日の操作は昨日の行に入るべきなのだけれど、昨日の行はもう作り終わっている。 一方で週次と月次は期間をまるごと数え直すので、翌日の完了はそちらには乗る。結果、日次の合計と週次の数字が合わない月ができた。 もうひとつ、週次と月次は「締まった期間」しか作らないので、進行中の今週・今月は月曜や1日まで空のままで、デリヘル管理サイトのグラフの右端がゼロに見えた。ゼロの日は売上が無かった日と区別がつかない。

毎朝、3日ぶん巻き戻して作り直す

直し方は地味で、日次は前営業日だけでなく直近3日ぶんを毎朝すべて計算し直すことにした。日付をキーに上書きするので、何度走っても同じ結果になる。 翌日の完了は翌朝に、翌々日のキャンセルは翌々朝に、それぞれ該当の日の行へ反映される。週次と月次も、締まった期間と進行中の期間の両方を毎朝作るように変えた。 3日という日数は定数ひとつで、伸ばしたくなったら数字を変えるだけにしてある。

書きながら決めたことが2つ。売上ゼロの日に新しくゼロの行を作らないこと。巻き戻すたびに空の日が3行ずつ増えていくのは避けたい。ただし既に行がある日は、全件キャンセルでゼロになったならゼロへ更新する。 もうひとつは週のキーで、読む側は月曜起点の週番号で引いているのに、書く側の週の起点がずれていて別の週に入ることがあった。書く側を月曜に揃えた。 水曜の朝に集計を走らせて、月曜と火曜の日次の合計が週次と一致することをテストにしてあるので、この乖離は二度と静かには起きない。 これは8月6日にグループ会社機能の監査をしていて見つけたもので、探していた不具合とは別のものだった。監査のたびに、隣の部屋の埃が目に入る。

明日は、この話で当たり前のように使った「営業日の変わり目は朝5時」を、なぜ5時にしたのかについて書く。