Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Building hldays #3: A source on every record

2026年10月30日に「Dev.to」が公開したITニュース「Building hldays #3: A source on every record」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

祝日データサービス「hldays」は、情報の信頼性を高めるため、各祝日にURL、引用文、確認日時を含む出典情報を必須とする。データの鮮度はビルド時検証や自動スクリプトで維持。特にポルトガルでは、公式情報源の探索、自動スキャン、AIエージェントを駆使し、複雑な祝日情報を正確に収集・提供している。

出典: Building hldays #3: A source on every record | Dev.to公開日:

ITニュース解説

hldaysというサービスは、世界中の休日情報を提供する。このサービスが特に重要視しているのは、提供する休日データの「信頼性」だ。例えば、企業システムや旅行アプリがこのデータを利用する場合、その情報が間違っていれば大きな問題に発展する可能性がある。そこでhldaysは、「すべての記録にソース(出典)を」という原則を掲げ、データの一つ一つについて、その情報がどこから来たのか、いつ確認されたのかを明確にしている。

具体的には、hldaysの各休日データには、以下の4つの情報が含まれる。まず「URL」は、その情報が掲載されているウェブページや文書へのリンクだ。次に「ref」は、法律の条文番号など、人間が理解しやすい参照情報を示す。そして最も重要なのが「quote」で、これはURL先のページに記載されている、休日を明示する正確な文章を引用したものだ。最後に「verified_at」は、その情報がいつ最終的に確認されたかを示す日時である。URLだけでは、どこを見ればよいかはわかるが、何が書かれているかはわからない。しかし、正確な引用文があれば、利用者は自分でそのページを訪れ、情報が正しいかを確認できるため、データ提供者の主張を盲目的に信頼する必要がなくなる。これらのソース情報は、hldaysのAPIを通じて、各休日の情報とともに利用者に提供される。利用者がinclude_sources=falseというオプションを指定しない限り、日付や休日のID、種類といった基本情報に加えて、この詳細なソース情報もAPIのレスポンスに含まれる。

hldaysでは、休日データの信頼性を「verified(検証済み)」と「unverified(未検証)」の2つのステータスで管理している。「verified」と判定されるには厳しいルールがあり、これはシステムがビルドされるたびに自動的にチェックされる。もし「verified」とマークされたデータに、URLと確認日時(source.urlとsource.verified_at)が欠けている場合、ビルドプロセスは失敗する。これにより、「なんとなく正しいだろう」という曖昧な理由でデータが「verified」になることを防ぎ、常に高い信頼性を保つことができるのだ。 また、何が「公式ソース」と見なされるかについても明確な基準がある。法律、政府の公報、自治体自身のウェブサイト、政府の登録機関のページなどが公式ソースとされており、ニュース記事や一般的な銀行休日のリスト、Wikipediaなどは、情報収集のきっかけにはなるが、それだけでは「unverified」のままとなる。

休日データの収集は国によってその難易度が大きく異なる。例えば、ポルトガルには308もの自治体があり、それぞれが独自の休日を設定している。これら全ての休日を網羅した単一の公式リストは存在しないため、hldaysのチームは独自の工夫でデータを収集する必要があった。 まず、一部の自治体について手作業で丁寧に調査し、信頼できるソースを見極めるパイロット研究を行った。その中で非常に効果的だったのが「Registry trick」と呼ばれる手法だ。ポルトガルの市民登録事務所(IRN)は、地域の休日には閉鎖される。この事実を利用し、IRNのウェブサイトにある各事務所の連絡先ページをスキャンしたのだ。これらのページには、「Encerrado no feriado municipal (...)(地方の休日には閉鎖)」といった定型文とともに、具体的な休日の日付やルールが括弧書きで記載されていることが多い。hldaysのスクリプトは、政府公式ドメイン内のこれらのパターンを網羅するURLを試し、正規表現を使って括弧内の休日情報を自動的に抽出した。この手法だけで、308の自治体のうち102もの休日の情報を、ほとんど手作業なしで収集することに成功した。抽出された情報は、日付(例: "20 de agosto")であればそのまま、移動する休日(例: "quinta-feira da ascensão":昇天祭の木曜日)であれば、事前に用意されたルックアップテーブルを使って、規則的なルール(例: イースターから39日後)に変換された。 残りの自治体については、ウェブアクセス機能を持つLLMエージェント(大規模言語モデルを利用した自動調査プログラム)が活用された。各エージェントには約10の自治体が割り当てられ、「決して推測せず、記憶から埋めない」「公式とは公式ドメインで明確に休日と記載されているものに限る」「引用は実際にフェッチしたページから取得し、スニペット(検索結果の一部)からの引用は避ける」といった厳格な指示が与えられた。エージェントは検索結果のヒントを参考にしつつも、最終的なデータのステータス決定はマージスクリプトに委ねられた。これにより、エージェントが誤って「公式」と判断した情報でも、マージスクリプトがURLや引用文の存在を確認できない限り、「unverified」として扱われる仕組みとなっている。このように、LLMエージェントは手作業では困難な情報収集を助ける一方で、その結果は厳格なスクリプトによって検証され、信頼性が保たれている。

データ収集の過程では、信頼できないソースや、公式ソース間で情報が食い違うケースも明らかになった。例えば、政府の市民サービスページが誤った地域の休日を表示していたり、広くコピーされた休日リストに誤りが含まれていたりした。また、時には公式文書同士で情報が異なる「実際の衝突」も発生する。そのような場合、hldaysはどちらかの情報を盲目的に採用するのではなく、その引用文と注釈を併記し、最終的な判断を利用者に委ねる姿勢を取っている。 現在の状況として、ポルトガルの308の自治体休日のうち291は「verified」となっている。これはIRNの登録ページ、政府ウェブサイト、自治体サイト、公式文書など、信頼できるソースに基づいている。残りの17はまだ「unverified」で、そのほとんどは、自治体への直接の問い合わせで解決できると見込まれている。ポルトガルの国および地方の全ての休日は、労働法や地方条例に基づいて「verified」である。

休日情報は時間の経過とともに変化する可能性がある。自治体が休日の日付を変更したり、参照していたウェブページのデザインが変更されたり、あるいはページ自体が閉鎖されたりすることもある。このようなデータの鮮度を保つため、hldaysではscripts/verify-sources.tsというスクリプトを開発し、AIを使わずに定期的に各ソースの再チェックを行っている。このスクリプトは、各休日データに記録されているURLにアクセスし、HTMLコンテンツから保存されている引用文を探す。ページのフォーマット変更に対応するため、比較の際にはアクセント記号、引用符、空白文字などを統一する正規化処理が施される。この自動チェックにより、各ソースは「引用文がまだ存在する(ok)」「引用文は消えたが日付はまだページにある(date_found)」「引用文も日付も消えた(changed)」「HTTPエラーなどでアクセス不能(broken)」「PDFやJavaScriptレンダリングで読めない(unreadable)」のいずれかに分類される。このスクリプトを年に一度実行することで、メンテナンスの労力を、わずかな「changed」や「broken」のエントリに絞り込むことができ、常に最新の正確なデータを提供することが可能になる。

他の国、例えばブラジル、ドイツ、イギリス、ギリシャ、アメリカなどは、既存のオープンデータセットから国家レベルや州レベルの休日情報をインポートしている。これらのデータは、特定のバージョンに固定されたデータセット自体をソースとし、hldays側では「unverified」として扱われる。その代わり、別のオープンデータセットとの自動的な相互チェックが行われ、データの整合性が確認される。 もちろん、このシステムにも限界はある。「verified_at」はソースを確認した時点のものであり、今日時点でも情報が真であることを保証するものではないため、年次再チェックが必要となる。また、PDFファイルやJavaScriptによってレンダリングされるページは自動チェックができないため、一部のレコードは人間の目による確認が必須となる。日付のフォールバック機能は、ポルトガル語の固定日付にのみ有効だ。そして、登録事務所のページが「この日に閉まる」と述べていることは強い証拠となるが、それが必ずしも自治体自身の公式な決定と完全に一致するとは限らない。もしそうしたずれが生じる可能性がある場合、hldaysは引用文をそのまま示し、判断を利用者に委ねる方針を取っている。

hldaysが提供する休日データは、単なる日付の羅列ではない。その一つ一つの情報がどこから来て、どのように検証され、そして最新の状態に保たれているかを示す、徹底した信頼性確保の取り組みが背景にある。システムエンジニアを目指す上で、このようなデータ品質へのこだわりや、それを実現するためのアーキテクチャやプロセスの設計は、非常に重要な学びとなるだろう。

関連コンテンツ

関連IT用語