バラバラCSVをつなげて使える公共データにする方法 — ハーベストからカタログまでエンジニア視点で考える

どうも〜おかむーです!今日はちょっとエンジニアっぽい話をしますよ〜
- 3行要約
- エンジニア視点だと「自動収集→正規化→バリデーション→カタログ化」のパイプラインでほぼ解決できます
- フリクショレス(Data Package)、JSON Schema、データカタログ(DCAT/CKAN)を組み合わせるのがおすすめです
結論
公開データの本質的な課題はフォーマットよりも「発見性」と「機械判別できるメタデータ」の欠如なんですよね。エンジニア的に言うと、API一本で解決できる話もあるんですが、現実はCSVやPDFが散らばっている。だからまずはフェデレーテッドなハーベスター+Data Packageによる正規化を導入して、CIで品質ゲートを通す運用を作るのが最短です!
レポート本文
現状観察:これ見てくださいよ
検索で見つかる実例を見てみると、公開データはこんな感じです。
- notice.go.jp の NOTICE注意喚起: https://notice.go.jp/docs/status_notice.csv
- 環境省のCSV(例): https://www.env.go.jp/content/900398071.csv
- 総務省の全国CSV: https://www.soumu.go.jp/main_content/000323625.csv
- 内閣官房の資料(PDF)で「機械可読性が重要」と明記: https://www.cas.go.jp/jp/seisaku/digital_gyozaikaikaku/data8/data8_siryou1.pdf
- デジタル庁の取り組み紹介: https://digital-gov.note.jp/n/neb45f4883f23
これ見てくださいよ。ファイルはあるけど「ライセンス」「スキーマ」「更新履歴」が人間向けしかないケースが多いです。要するに、機械に読ませようとすると問題が山積みということです。
主な課題
- 発見性が低い:同じ内容でもドメインやディレクトリがバラバラ
- メタデータ欠如:ライセンスやカラム定義が埋め込まれてない
- フォーマットのばらつき:一部がShift_JIS、日付フォーマットが混在
- バージョン管理がない:差分や改訂履歴が追いにくい
技術的な処方箋(アーキテクチャ)
エンジニア的に言うと、解決はパイプライン化すれば楽です。提案アーキテクチャ:
- 各省庁ドメインとCSV/PDFエンドポイントを定期クロール
- sitemap、robots、HTMLメタから候補を抽出
- frictionless-pyでCSVをData Packageに変換
- 文字コードUTF-8へ正規化、日付はISO8601へ
- JSON Schema + profile checks(数値範囲、必須カラム)
- 灰色リスト(例:欠損が多すぎる場合はアラート)
- Parquetで長期保存、S3互換ストレージ推奨
- メタデータはDCAT互換のカタログに格納
- CKANやData Catalog APIで検索可能に
- OpenAPIでデータAPIを表現
- Git-based data registry(データの差分はDVCやLakeFS)
- CI(GitHub Actions等)でバリデーション自動化
具体的コード例(簡易ハーベスト→検証→Data Package生成)
import requests
from frictionless import Table, Package, Resource
url = 'https://notice.go.jp/docs/status_notice.csv'
r = requests.get(url)
r.encoding = 'utf-8'
open('status_notice.csv','w',encoding='utf-8').write(r.text)
frictionlessで検証
table = Table('status_notice.csv')
print('headers:', table.header)
Data Package作成
resource = Resource(path='status_notice.csv', name='notice_status')
package = Package(resources=[resource])
package.to_descriptor('datapackage.json')
要するに、このくらいのコードで初動は回せます。フリクショレスはカラムの型推定や検証にも使えるので便利です。
チェックリスト(実務で入れるべき自動テスト)
- 文字コード utf-8 であること
- ライセンスがSPDXタグで明記されていること
- カラムごとの JSON Schema があること
- 更新時に必ず revision+timestamp を残すこと
- KPI系はフォーマット(%か整数か)を統一すること
具体的改善案:メタデータと公開フロー
- 公式カタログはDCAT形式でエクスポート(省庁横断で検索可能に)
- 各CSVは必ず datapackage.json を同一ディレクトリに置く運用を必須化
- データの変更は Pull Request ベースで行い、CIでテストを強制
- ライセンスは単一のSPDXコードで明示(例: CC-BY-4.0)
まとめ
- 現場はデータはあるけど機械に使わせる体裁が整ってないケースが多いです
- 対応は技術的に難しくない:クロール→正規化→バリデーション→カタログ化で劇的に改善します
- frictionless/Data Package、JSON Schema、DCAT、CIを組み合わせる運用が現実的で効果大です
おかむーから一言
テクノロジーで社会をアップデートするって言うけど、まずはデータをちゃんと見つけて、機械が読める形にすることが最短です!エンジニアならこのワークフロー作るだけで社会に価値出せますよ〜
情報ソース
- https://www.zhihu.com/question/290714454
- https://www.cas.go.jp/jp/seisaku/digital_gyozaikaikaku/data8/data8_siryou1.pdf
- https://www.zhihu.com/question/6430289390
- https://digital-gov.note.jp/n/neb45f4883f23
- https://www.zhihu.com/question/38923279
- https://notice.go.jp/docs/status_notice.csv
- https://www.env.go.jp/content/900398071.csv
- https://www.inpit.go.jp/content/100869372.csv
- https://www.mhlw.go.jp/content/001429362.csv
- https://www.soumu.go.jp/main_content/000323625.csv
- https://www.chisou.go.jp/sousei/about/kouhukin/index.html
- https://www.chisou.go.jp/sousei/pdf/r5_guideline-checkaction.pdf
- https://www.city.tsukuba.lg.jp/material/files/group/15/shiryou2_R6__kouhukin.pdf
- https://www.pref.yamaguchi.lg.jp/uploaded/attachment/160746.pdf
- https://www.city.sanjo.niigata.jp/material/files/group/2/R7degiden_shinchisou_1-3.pdf
シェアする
関連レポート

公共予約システムの“ログインからAPI化”ロードマップ:パスワードレスで運用コストを下げる技術提案
公共施設予約の認証とデータを段階的にAPI化して運用コストを下げる技術ロードマップを紹介します。

政府データを“つなげる”発想:省庁バラバラを超えるフェデレーション戦略
フェデレーション層で省庁データをつなぎ、PDF混在を克服する実践的な技術案を示す。

政策ダッシュボードは“作るだけ”じゃダメ!KPIを自動で監査するパイプライン設計
政策ダッシュボードの数値を自動監査するパイプライン設計案。API・スキーマ・差分管理でKPIの信頼性を上げる技術手法を紹介します。