FIELD NOTES FOR SYSTEM MAINTAINERS

保守運用ノート

動いて当たり前のシステムを、ひとりで守る人のための実務メディア

無料ツール|印刷用チェックリスト

日付・タイムゾーンのバグ調査チェックリスト

上から優先順位で並べてあります。まずは最低ラインだけで十分です。

まずここだけ(これだけで効きます)

  • ズレの「幅」を数字で出した(9時間・1日・1時間・それ以外)
  • 画面の表示ではなく、DBに入っている生の値を1件見た
  • サーバー・DB・アプリのタイムゾーン設定を、それぞれ出力して比べた

次に確認したい

  • 日時カラムの型を確認した(変換されるタイプか、されないタイプか)
  • フレームワーク側の設定が、php.ini などの設定を上書きしていないか確認した
  • 期間指定のSQLで、終わりが <= 月末 になっていないか見た
  • 日本時間の0時〜9時にあたるデータで再現を試した
  • 検証環境と本番のタイムゾーン設定が同じか確認した

余力があれば

  • 月末・月初のデータで、月の加算・減算の挙動を確かめた
  • 外部APIから受け取る日時に、タイムゾーンの情報(+09:00Z)が付いているか確認した
  • コンテナで動かしている場合、イメージ内のタイムゾーンを確認した
  • 直す場所を1か所に決めてから手を入れた
  • 「9時間足す」のような辻褄合わせを入れていない(入れた場合は理由をコメントに残した)
  • 4つの層の設定を運用ドキュメントに書き残した

最低ラインの3つが済んでいれば、もう原因は半分絞れています。残りは、余裕のある日に少しずつで大丈夫です。

日付のズレの原因を突き止め、集計の数字が合ったことを確認して穏やかな表情を見せる一人運用の保守担当者

日付のバグを追いかけているとき、いちばんしんどいのは「自分の書いたコードが読めていないのでは」と思えてくる時間だと思います。でも、この種のバグは読解力の問題ではありません。目に見えないところで、時計が4つ動いているだけです。見えないものは、読んでも見えなくて当たり前です。

幅を測って、生の値を見て、設定を並べる。この3つを順にやれば、たいていのズレは正体を現します。今日その1件を突き止められたなら、同じ形で困っている未来の何件かも、まとめて片づいています。全部を一度にきれいにしなくて大丈夫です。まずは、4つの時計を並べて見るところから。

この内容は記事「日付・タイムゾーンのバグ調査|「1日ズレる」の原因を追う手順」のチェックリストです。印刷してそのままお使いいただけます。 / 無料ツール一覧へ