代码で語るマニフェスト:从政府CSV看开放数据与施政可验证性

どうも〜おかむーです!今日はちょっとエンジニアっぽい話をしますよ〜
- 这篇文章用“代码的眼睛”看政府公开CSV,评估机器可读性、API可用性和政策可检证性
- 以实际目录(notice.go.jp、env.go.jp、mhlw.go.jp、soumu.go.jp、inpit.go.jp的CSV)为例,指出问题并给出工程改进方案
- 提出可执行的技术路线:模式化Schema、OpenAPI、持续验证与可溯源的数据发布フロー
結論
公開CSVは増えてきて嬉しいんですけど、エンジニア的に言うと「ただ置いてある」ケースが多くて、連結・検証・再現が難しい!要するに、機械可読でも“実用的”じゃないことが多いということです。だからこそ、スキーマ・API・自動テストを導入して、政策と数値をコードで結びつけられるようにしましょう。
レポート本文
使ったデータ(参照元)
- NOTICE:https://notice.go.jp/docs/status_notice.csv
- 茨城県(環境省コンテンツ):https://www.env.go.jp/content/900398071.csv
- 国内移行データ2011(inpit):https://www.inpit.go.jp/content/100869372.csv
- 救護施設(厚労省):https://www.mhlw.go.jp/content/001682075.csv
- 全国(総務省):https://www.soumu.go.jp/main_content/000323625.csv
これ見てくださいよ、CSVが公開されているのは良いんですけど、次のようなパターンが散見されます。
エンジニア的に言うと、これAPI一本で解決する話なんですよね。では具体的にどうするか。
技術的評価ポイント
- 機械可読性:CSVはOKだが、CSVW/JSON Table SchemaやJSON-LDでスキーマ化されていればよりベター
- 連携性:地域・施設などのエンティティに永続ID(JISコードや国土数値情報ID)を付与
- アクセス性:ダウンロードだけでなくREST API(/facilities、/notices)とGraphQLを提供
- 信頼性:データ公開時にスキーマ検証、差分パブリッシュ、署名付きリリース
実務的なコード例
まずは手を動かしてCSVを読み込むときの実務スニペット(Python/pandas):
import chardet
import requests
import pandas as pd
url = 'https://notice.go.jp/docs/status_notice.csv'
r = requests.get(url)
enc = chardet.detect(r.content)['encoding']
df = pd.read_csv(pd.compat.StringIO(r.content.decode(enc)), parse_dates=['notice_date'], dtype={'pref_code': str})
正規化例: 都道府県コードをJISに揃える
mapping = {'茨城県': '08'}
df['pref_code'] = df['pref_name'].map(mapping).fillna(df['pref_code'])
要するに、エンコーディング検出→明示的なdtype→日付パースの順で堅牢に読み込むのがコツです。
次にDB設計のミニマム例(Postgres DDL):
CREATE TABLE notices (
id SERIAL PRIMARY KEY,
source_url TEXT NOT NULL,
notice_date DATE NOT NULL,
prefecture_jis CHAR(2),
category TEXT,
raw_json JSONB,
published_at TIMESTAMP DEFAULT now()
);
CREATE INDEX ON notices (prefecture_jis, notice_date);
APIのミニマムOpenAPIスニペット(アイデア):
paths:
/api/v1/notices:
get:
parameters:
- name: prefecture_jis
in: query
schema:
type: string
responses:
'200':
description: list of notices
政策の数値目標と実績のギャップ(検証手順)
政策が「〜年までに○○を達成する」と言っている場合、検証は以下の流れでやると良いです:
ここで重要なのは「計算式が公開されているか」。同じ数でも算出方法が違えば議論になるので、コードで再現できることが必須です。
改善提案(実行可能な短期・中期施策)
短期(1〜3ヶ月)
- 各CSVに機械読取可能なメタデータ(CSVW/JSON Table Schema)を添付
- 文字コードをUTF-8に統一し、バリデーションパイプラインを用意
- ライセンス(CC-BY等)を明確にする
中期(3〜12ヶ月)
- 公的データのための共通API仕様(OpenAPI + 標準レスポンス)を定義
- 永続ID(JISなど)を全データセットに導入して紐付けを容易化
- CI(GitHub Actions等)でスキーマチェック、サンプルクエリの自動実行
長期(1年〜)
- データカタログ(DCAT)とメタデータの公開で検索性を高める
- 差分API(/changes?since=)やWebhookでリアルタイム連携
- 政策→データ→検証のワークフローを自治体に展開
活用シナリオ
- 緊急通知(notice.go.jp)のリアルタイムダッシュボードとアラート配信
- 救護施設データ(mhlw)と人口データを結合して避難リソース最適化
- 県ごとの環境指標(env.go.jp)を時系列で比較し施策効果を測定
まとめ
- CSV公開は第一歩で良いけど、エンジニア目線では「標準化」「ID付与」「API化」「自動テスト」が揃って初めて実用的になる
- 政策の検証性はデータの再現可能性にかかっている。コードで算出できるようにしよう!
- 短期はスキーマ付与・UTF-8化、中期はAPI整備、長期は差分・リアルタイム化とガバナンスの強化を進めるのが現実的な道筋
おかむーから一言
テクノロジーで社会をアップデートするのはむずかしいけどめっちゃ楽しい!エンジニアとして、政策をコードで検証できる世界を一緒に作りましょう!
信息来源
- 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/001682075.csv
- https://www.soumu.go.jp/main_content/000323625.csv
- https://ja.wikipedia.org/wiki/%E5%85%AC%E5%85%B1
- https://www.intec.co.jp/column/smartcity-08.html
- https://kotobank.jp/word/%E5%85%AC%E5%85%B1-494676
- https://www.digital.go.jp/resources/data_case_study_private
- https://www.manawin.jp/languagegap/general/koukyou-kouteki/
- https://www.zhihu.com/question/290714454
- https://metidx-gov.note.jp/n/n9468573c213b
- https://www.zhihu.com/question/6430289390
- https://ai-government-portal.com/%E5%85%AC%E5%8B%99%E5%93%A1%E3%81%AE%E6%96%B0%E3%81%97%E3%81%84%E6%8C%91%E6%88%A6%E3%80%8C%E8%A1%8C%E6%94%BFux%E6%94%B9%E5%96%84%E6%A5%AD%E5%8B%99%E5%A7%94%E8%A8%97%E3%80%8D%E5%AE%8C%E5%85%A8%E3%82%AC/
- https://www.zhihu.com/question/38923279
相关报告

代码で語るマニフェスト:以香川县公共设施预约系统为例的技术与数据审视
以香川县公共设施预约系统为例,从API、数据格式与标准化角度检视自治体系统,给出可执行的技术改进方案与代码示例。

用代码说话的宣言:从机器可读性到API化,解读日本数字化政策的数据工程路径
从Digital庁到e-Stat,评估日本数位政策的数据交付形态,提出API化与工程化改进路线,附代码与验证示例。

コードで語るマニフェスト:日本政府データをエンジニア視点で検証する
政府のマニフェストをデータとコードで検証。PDF多用やAPI断片化を指摘し、e-StatやJapan Dashboardを例に具体的な改善案とコード例を提示します。