2008年5月 6日
業務システムにおける祝日の扱いについて
某システムで、休日の設定をテキストファイルでチマチマ設定しなければならないものがあった。
ボクはそれを見て、「ダサイ」と思った。
振り替え休日とかハッピーマンデー法とかもロジックで組みやがれ! と。
技術ヲタにありがちな発想である。
最近になって、その考えは間違いだと気づいた。
祝日などは、「国民の祝日に関する法律」で定められている。これが意外とコロコロ変わって行くのだ。カレンダー屋さえも困るぐらい変わりやがってコノヤロー。
ロジックで組んでいた場合、法律改正とともにロジック変更が必要になる。設定ファイルで設定する場合も、その設定ファイルのメンテナンスが必要となるが、プログラマ未満のスキルの人でもメンテナンス可能であり、そーゆーことを考えると、設定ファイル案が有利だろう。
設定ファイルのメンテ方針も意外とハマルところである。
冒頭の某システムは設定ファイルを変更したら再起動が必要だった。
まあ、休日を参照する処理が大量にある場合、起動時に読み込んでおきたいのは分かる。しかし、おいそれと再起動できないシステムにおいて再起動を要するのはいかがなものか。
対処の運用におけるアプローチとしては、休日ファイルを書き換える日付を決めておくべきだろう。カレンダーが配布される時期になったら設定ファイルを書き換えて再起動すべしとドキュメントに書いておく。書いておくだけでなく、実行する。
冒頭の某システムは、ドキュメントに書いてあったが、引継ぎでちゃんと伝わっていなかった。年次処理は抜け落ちやすい。類似のものにドメイン更新や、SSL証明書更新がある。
対処のプログラムからのアプローチとしては、休日ファイルのキャッシュが考えられる。タイムスタンプが違っていたら読み込むとか、タイムスタンプを読み込むのもそこそこ時間のかかる処理なのでタイムアウト時間を設定して、タイムアウトしたらタイムスタンプを読み、新しかったらファイル読み込みとか。
だが、例えば予約システムなどにおいて休日は予約できないとか料金が高くなるとか、そういったものがある場合に、予約済みの日付に対して休日平日が変わってしまうことが起こると面倒だ。そこらへんのガードも考えると結構面倒くさい。
このエントリーのトラックバックURL:
http://weblog.rukihena.com/mt/mt-tb.cgi/777