会計基準データベースの原文忠実化
CF計算書の基礎知識ページに会計基準の引用コンポーネント(BookkeepingStandardRef)を組み込もうとしたら、そもそもソースデータのJSONが原文と食い違っていた。修正を始めたら芋づる式にASBJのドメイン移行が見つかり、最終的にリンクページ198件のURL検証まで走ることになった1日。
発端: 引用コンポーネントの追加
CF計算書の基礎知識ページに、連結CF作成基準の条文を引用表示するBookkeepingStandardRefコンポーネントを追加した。ところが、コンポーネントが参照するJSONデータに第二一項や注解注1・注2が入っていない。条文テキストを表示しようにも、表示する中身がなかった。
JSONを直す前に: Codexからの指摘
最初はHTMLテンプレート側を修正しようとしたが、Codexレビューで方針を変えた。
HTMLは生成物であり、JSON(ソースデータ)を編集すべき
HTMLに条文テキストをベタ書きすると、他のコンポーネントから同じ条文を参照できなくなる。JSONを唯一のソースにして、HTMLはそこから生成する。この指摘でJSONファーストの方針が固まった。
provision_numberのフォーマット修正
条文番号の表示で「注解注1」が「第注1項」と表示される不具合を見つけた。formatProvisionNumber関数が全ての番号に「第○項」パターンを適用していたのが原因。
// Before: 全て「第○項」で表示
const formatProvisionNumber = (num: string) => `第${num}項`
// After: 「注」で始まる場合はそのまま表示
const formatProvisionNumber = (num: string) =>
num.startsWith('注') ? num : `第${num}項`
ASBJドメイン移行の発見
条文の原文を確認しようとASBJサイト(asb.or.jp)にアクセスしたら、ページが見つからない。調べてみると、ASBJが旧サイト(asb.or.jp)から新サイト(asb-j.jp)にドメインを移行していた。
旧URLでアクセスするとリダイレクトされるものもあるが、404を返すものもある。standards.jsonに登録していたsource_urlの多くが旧ドメインのままだった。
42基準のソース一括収集
ドメイン移行を発見したことで、全基準のソースを一度洗い直す判断をした。
- ASBJ 24件: 新サイト(asb-j.jp)からHTMLで取得
- JICPA 10件: PDFで取得
- FSA(金融庁): PDFで取得
- 合計42基準のソースを手元に確保
agent-browserでHTMLを取得し、html_to_json.pyスクリプトで条文JSON形式に変換した。31件が自動変換に成功し、残りは手動で調整した。
cf-jitsumu-shishin.jsonの原文照合
CF実務指針のJSONについて、Turso DBに格納済みのOCRテキストと突き合わせた。
照合の結果、既存JSONには53条文しか入っていなかったが、原文には61条文ある。欠落していた8条文を追加し、既存条文のテキストも原文に合わせて修正した。
JSONの上書き事故と復元
ここで事故が起きた。新しく取得した基準JSONを既存ファイルに上書きしてしまい、引用マッピング(citations.json)が壊れた。citations.jsonは各ページがどの条文を引用しているかの対応表で、条文IDが変わると全ての引用リンクが切れる。
# gitから復元
git checkout -- data/citations.json
復元後、新規ファイルのみを保持する方針に切り替えた。既存のcitations.jsonが参照しているIDは一切変更せず、新しい基準は新規ファイルとして追加する。上書きではなく追加。この原則を忘れると同じ事故を繰り返す。
リンクページ198件のURL検証
ASBJのドメイン移行がわかった以上、リンクページ(supports/link)に載せている全URLも検証が必要になった。198件のリンクを1件ずつチェックした。
| 対象 | 件数 | 内容 |
|---|---|---|
| e-Gov | 19件 | 法令URLの更新(パス構造変更) |
| JICPA | 6件 | リンク切れ修正 |
| ASBJ | 55件 | asb.or.jp → asb-j.jp に更新 |
| standards.json | 25件 | source_urlの旧→新ドメイン更新 |
| その他 | 残り | 変更なし(正常応答を確認) |
合計で105件のURLを書き換えた。
今日の学び
JSONファーストの原則
HTMLにデータを埋め込むと、他のコンポーネントから参照できなくなる。Codexの指摘がなければHTMLを直接編集し続けて、後から引用コンポーネントを作るときに二重管理に陥っていた。
上書きではなく追加
既存のマッピングファイルが参照しているIDを変更すると、依存先が全て壊れる。パッケージマネージャのsemverと同じ発想で、既存IDは不変にして新規追加で対応する。gitからの復元で事なきを得たが、コミット前に気づけたのは運がよかった。
ドメイン移行は連鎖する
ASBJのドメイン移行1件を見つけたら、standards.jsonのURL、リンクページのURL、引用コンポーネントの参照先と、3箇所に波及した。1つの外部依存の変更がどこまで影響するかを洗い出す作業は、地味だが後回しにすると被害が広がる。