用代码审视公民政策:从CSV到API的治理检验

IT政策提案
用代码审视公民政策:从CSV到API的治理检验
  • 这篇文章用工程师视角检视政府/自治体公开数据的可用性、格式与可操作性
  • 以日本官方CSV样本、地方評価レポート和UX议题为线索,指出PDF vs CSV的现实差异与问题
  • 给出可执行的技术改进建议与简单代码范例,让政策宣言能真正被数据和开发者驱动

結論

どうもおかむーです!结论先说:政策要靠数据说话,但现在很多行政数据“在说话”的格式却是人类用的PDF而不是机器友好的API/CSV/JSON。要把マニフェスト(施政纲领)变成可验证、可复现的“代码”,需要把数据做成结构化、可发现、带元数据、有稳定API并保证可追溯性。

レポート本文

エンジニア的に言うと、政府数据治理的好坏直接决定了能不能用代码去验证政策效果。これ見てくださいよ:国のサイトやデジタル庁(digital.go.jp)、内閣府のCSV(search result 11,13)など、CSVファイルは出ている。ただし散らばっててメタデータやAPIが足りないんですよね。

1) 現状把脈:PDF、散落的CSV、そして評価レポート

  • 多くの報告書や評価はPDFベースで公開される(人間には読めるが機械処理が面倒)。要するに、データは「見えるけど使えない」状態です。
  • 一方で、政府はCSVを公開する努力もしている(例:内閣府・各種CSV, digital.go.jpの病院CSVサンプル、交付金の実績評価ページ等 / 検索結果11,13,9)。でもファイルごとにカラム名やエンコーディングが違う、緯度経度のフォーマットが統一されてない等の問題が残る。
  • UX面の指摘(検索結果2,4)からもわかる通り、自治体デジタル窓口は「使われない」ことが多い。これはUIだけの問題じゃなく、バックエンドのデータ流通が整ってないからです。

2) データ可用性・品質の技術チェックポイント

  • 機械可読性:PDF vs CSV/JSON/GeoJSON。PDFはレイアウト依存でスクレイピングが必要。要するに「非推奨」です。
  • スキーマの安定性:同一項目がファイル毎に名称や型が違う。バージョニング、スキーマ定義が必要。
  • メタデータ:更新日、ライセンス、発行機関、APIエンドポイントが付与されていないことが多い。
  • APIの有無:公開CSVはあるがREST APIが無ければリアルタイム利用やCORS対応ができない。
  • 空間情報:病院CSVに緯度経度がある例があるが(search result 13)、座標系や精度が明記されていないケースがある。

3) 政策KPIと実績のギャップの検証(例:デジタル田園都市構想)

  • 交付金やKPIの達成状況は公表されているが、KPI数値と元データが紐づいていない例あり(search result 7,9)。
  • エンジニア的に言うと、KPIを一本の時系列APIで取得できれば、差分計算や自動監査が可能になるんです。

4) 具体的な技術改善提案

  • 常時公開する「データカタログ」:各データセットにスキーマ(JSON Schema)、更新履歴、ライセンス、サンプルを添付する。推奨フォーマットはCSV/JSON/GeoJSONとし、PDFは人向けの説明に留める。
  • RESTful API + OpenAPI Spec:時系列やページネーションをサポートし、CORSを有効に。これでフロント/外部開発者が自由に利用できる。
  • データ検証パイプライン:CIでCSVのカラム・型・NULL率・ジオバリデーションをチェック。エラーが出れば公開を止める仕組み。
  • 永続的識別子:データセットに恒久URL/IDを付与(例:/api/v1/datasets/kpi/digital_initiative/)
  • UXの改善はAPI設計から:フォームや窓口はAPI一本で集約し、バックエンドでバリデーションと多言語対応を行う。

5) 小さなコード例 — CSVを拾ってKPI差分を出す(Python)

import pandas as pd

例: 内閣府のCSV URLを直接読む

url = 'https://www5.cao.go.jp/j-j/wp/wp-je24/csv/d1-1-4.csv'

df = pd.read_csv(url, encoding='utf-8', skiprows=0)

必要な列をノーマライズ

df.columns = [c.strip() for c in df.columns]

KPI列のサンプル検査

print(df[['年度','合計']].head())

時系列差分

df['合計'] = pd.to_numeric(df['合計'], errors='coerce')

df['diff'] = df['合計'].diff()

print(df[['年度','合計','diff']].tail())

要するに、API一本とちゃんとしたスキーマがあればこのコードはもっと短く、堅牢に書けますよね。

6) 活用シナリオ:自治体版“監査ダッシュボード”を作る

  • データ取得:APIで交付金実績・支出・事業指標を取得
  • 検証:CIでデータ整合性チェック、KPIと実績の乖離を自動検出
  • 公開:ダッシュボードに埋め込み、オープンデータページにリンク
技術スタックの例:FastAPI(OpenAPI自動生成) + PostgreSQL(PostGIS) + GitHub Actions(データ検証) + DataHub/CKAN(カタログ)

まとめ

  • PDFは人間用、CSV/JSON/APIは機械用。行政は両方を意識して公開を分離すべきです。
  • スキーマ、メタデータ、OpenAPI、CI検証、永続IDが揃えば、政策は「検証可能なコード」になります。
  • UX問題の多くはデータ流通の欠如に起因するので、バックエンド整備がUX改善の近道です。

おかむーから一言

僕は技術で政策を検証したいんです。データを“ただ出す”だけじゃなく、使いやすく、追跡できる形にしてほしい。エンジニアの手に渡れば、政策はもっと速く改善できるんですよ!