国データの鮮度と出典を扱えないまま運用すると、ある日突然、過去の記録の意味が変わります。名称も通貨も行政区画も、時間とともに動くからです。この記事では、古くなる原因を押さえ、出典と取得日をどう持ち、更新をどう進めるかを整理します。
国データはなぜ古くなるのか?
変化は一度にまとめて起きるのではなく、少しずつ積み上がります。名称が改まる、通貨が切り替わる、行政区画が再編される、郵便番号の体系が始まる、電話の符号が組み替えられる、といった出来事がそれぞれ別の時期に起こります。
したがって、ある一つの時点で正しかった一覧は、その後のどこかで必ず一部が古くなります。古くなること自体は避けられないので、古くなったことに気づける作りにしておくことが要点になります。
変化の兆しは、外からの通知として来るとは限りません。同じ値を持っているはずの二つの一覧を突き合わせたときにだけ現れる差異もあれば、利用者からの問い合わせで初めて気づく差異もあります。どちらの経路から入ってきた差異も、同じ場所に記録できるようにしておきます。
改名と通貨と行政区画の変化
変化の種類ごとに、影響の出方が違います。名称の変更は表示に現れますが、内部で符号を持っていれば保存済みの値は壊れません。通貨の変更は金額の解釈に影響するため、変更の前後で記録を分けて残す必要があります。
行政区画の再編は、下位の区分を参照している場合に影響が広がります。郵便番号の体系の切り替えは、住所の一部が使えなくなる形で現れます。どの種類の変化が自分のデータのどこに触るのかを、あらかじめ対応表にしておきます。
| 変化の種類 | 影響が及ぶ範囲 | 取りうる構え |
|---|---|---|
| 名称の変更 | 表示に出る | 内部の符号はそのまま使えます |
| 通貨の切り替え | 金額の解釈に触れる | 変更の前後で記録を分けて残します |
| 行政区画の再編 | 下位の区分を参照する側へ広がる | 参照の仕方を先に見直します |
| 郵便番号の体系の切り替え | 住所の一部に触れる | 移行の期間を決めておきます |
変化の種類ごとに、見る場所が違います。同じ一覧を毎回すべて見直すのではなく、種類に対応する箇所だけを先に確かめる順序にしておきます。
取得日を残さなければならないのはなぜか?
出典だけで日付がなければ、二つの値が食い違ったときに、どちらが新しいのかを判断できません。判断できないまま片方を選ぶと、選んだ記録が残りません。
記録には、値そのものだけでなく、どこから取ったのか、いつ取ったのか、どの範囲に当てはまるのかを一組で持たせます。一組で持っていれば、後から見た人が、これは当時の値であり現在とは違うかもしれない、と読めます。表示の画面にも取得日を出しておくと、利用者からの問い合わせが減ります。
履歴を新しい値で書き換えてはいけない?
書き換えてはいけません。確定した注文、発行済みの書類、締めた報告は、その時点の値のまま残します。現在の一覧は照会のときに別に解決します。
過去の記録を新しい一覧で上書きすると、当時の判断が現在の定義で読み直され、記録の意味が変わります。監査や照会では、当時どうだったのかが問われるため、後から直せない形で残っている必要があります。
訂正が必要な場合も、消して入れ直すのではなく、訂正の記録を重ねます。誤りに気づいた時点と、訂正した内容と、訂正の理由を一組にして残せば、後の読み手は経緯をたどれます。
二つの出典が食い違ったらどうするか?
どちらかを基準として固定し、基準から外れる扱いを例外の一覧として残します。毎回その場で判断すると、同じ案件が担当者によって違う結論になり、検証の結果も再現しなくなります。
基準を決めるときは、扱う範囲の広さと更新の頻度を手がかりにします。範囲が広く更新が落ち着いているものを土台にし、それで足りない部分だけを別の出典で補う形が扱いやすいです。例外の一覧には、なぜ外したのかを一行添えます。
変更の時期を知る手がかりとしては、公的な告知の日付を使うのが確実です。記憶や、ある時点の写しに頼ると、いつの情報なのかを説明できません。
告知と実際の適用には間があり、その間は新旧どちらの値も起こり得ます。移行の期間を認めるのか、切り替えの日で一方に寄せるのかを先に決めておけば、期間中の差異を誤りとして扱わずに済みます。
開発者向け: 出典と取得日を項目として持つ
各レコードに、出典の名前、取得した日、適用される範囲を項目として持たせます。この三つは表示に使うだけでなく、更新の判断にも使います。同じ国に二つの記録があり、取得日が違えば、新しいほうを採用する理由を説明できます。
更新の進め方は三つに分けて考えます。全体を置き換える方法、差分だけを足す方法、必要な箇所だけを直す方法です。変化の速さと影響の大きさによって選びますが、混ぜて運用すると、ある更新が別の更新を打ち消します。同じデータに対しては、どの方法を使うのかを決めておきます。
更新の履歴は追記のみで残し、古い記録を消しません。過去の記録を参照する側は、参照時点の値を解決できるようにします。
参照時点の値を返す問い合わせは、日付を指定して一件返す形にします。日付を省いた問い合わせは現在の値を返すものとし、二つの入口を混ぜないようにします。
この記事に出てくる出典の呼び名、取得日の書き方、版の番号は、いずれも持ち方を示すために作った合成の例です。実在する提供元や、実際に取得した日付を指すものではありません。試験の設計と帳票の見本としてのみ使い、対外的な証明には使えません。
次のステップ
まず、いまの一覧に取得日が入っているかを確かめてください。入っていなければ、今日の日付を足すところから始められます。次に、更新の進め方が一つに決まっているかを見ます。現状の数え方は国データの網羅率チェックリスト、規模を広げたときの手順は国をまたいだテストデータ拡張で扱っています。国ごとの項目は国の一覧から確認できます。