コードで語るマニフェスト:日本の政府データをエンジニア視点で検証する

IT 정책 제안
コードで語るマニフェスト:日本の政府データをエンジニア視点で検証する

どうも〜おかむーです! 안녕하세요, 오카무입니다!

  • 정부·지자체가 공개한 CSV/JSON의 기계가독성은 제각각이다
  • PDF에 묶여있는 지표는 분석을 막고, API 부재는 재사용을 어렵게 한다
  • エンジニア的に言うと、標準化とAPI化で再現性と透明性が一気に上がるんですよ

結論

정부·지자체의データ公開は量だけでなく“形”が重要。PDFに埋め込まれた表やメタデータの欠如、フォーマットの不統一が利活用の最大の障壁になっている。要するに、CSV/JSON/Schemaをきちんと整備して、OpenAPIなどでAPI提供すれば価値が一気に跳ねるということです。

本文:データ現場をコードで見る

まず、これ見てくださいよ。政府の公式CSVが直接ダウンロードできる例はある(例: https://notice.go.jp/docs/status_nicter.csv、https://www.mhlw.go.jp/content/001429362.csv)。一方で、主要な施策の実績値はPDFに埋め込まれて公開されることが多く、機械で取り出すのが辛い。要するに、機械可読性が低いとデータは使われないんです。

実例チェックリスト

  • URL直リンクでCSVが落とせるか(OK: notice.go.jp, jinji.go.jp等)
  • ヘッダとエンコーディングが明記されているか(UTF-8 vs Shift_JIS問題)
  • メタデータ(単位、更新頻度、最終更新日)が添付されているか
  • APIエンドポイントがあるか、OpenAPI定義が公開されているか

これらを満たしていれば即座に再利用できるんですけど、現場はまちまち。特に自治体ごとにCSVの列名が違ったり、日付フォーマットが統一されていなかったりする。エンジニア的に言うと、正規化されてないスキーマはデータパイプラインの地雷ですよ。

技術検証:短いコードで確認する方法

エンジニアならわかると思うんですけど、APIがなくてもまずはCSVを叩いてヘッダとエンコーディングをチェックするだけで品質の大枠はわかります。例えばPython+pandasでの簡易チェック:

import requests

import pandas as pd

from io import BytesIO

url = 'https://notice.go.jp/docs/status_nicter.csv'

r = requests.get(url)

encoding推定

r.encoding = 'utf-8'

df = pd.read_csv(BytesIO(r.content))

print(df.columns)

print(df.dtypes)

上のコードでエラーが出る場合、Shift_JISや不正な改行、BOMなどの問題が疑われます。要するに前処理コストが高いデータは、現場のアナリストの時間を食うんですよ。

ポリシーの数値目標と実績ギャップの見方

政策目標は基本的に“目標値”と“実績値”の比較で評価されるはず。ただ、実績がPDFで公開されていると、時系列分析や差分計算が手作業になってしまう。

実務的なワークフロー:

  • 目標値(政策文書)を機械可読化(YAML/JSON)
  • 実績値は周期的にCSVで公開、ETLでデータベースへ投入
  • SQLで目標達成率を算出し、ダッシュボードへ反映

SQL例(単純):

SELECT

year,

SUM(actual) / SUM(target) AS achievement_rate

FROM policy_metrics

GROUP BY year;

要するに、自動化されていれば「目標と実績のギャップ」を継続的にモニタリングできる。今はここが断絶しているケースが多いんです。

API設計と公開の具体的提案

改善策は具体的に3つ:

1) 機械可読化を義務化する

  • 政策レポートはPDFでの公表を残してもOK。ただしCSV/JSONの機械可読版を同時に公開することを要件にする

2) CSV-W / Data Package を導入

  • カラムの意味、単位、更新頻度を機械判読可能にする(CSV on the Web, Table Schema)

3) REST/GraphQL API化とOpenAPI公開

  • 例: GET /api/v1/policy_metrics?year=2024
  • レスポンスはJSON-StatやJSON-LDでメタデータ付きにする

簡単なOpenAPIスニペット例:

openapi: 3.0.0

paths:

/api/v1/metrics:

get:

parameters:

- name: year

in: query

schema:

type: integer

responses:

'200':

description: JSON array of metrics with metadata

継続可能な実装パターン

  • CIでCSVのスキーマチェック(GitHub Actions + csvlint)
  • データパイプラインはAirflow or Prefectで定期実行
  • 公開用はCDNとAPIGatewayでスケーラブルに

まとめ

  • PDFだけの公開はデータの価値を下げる。CSV/JSON + スキーマ + API化が鍵
  • 技術的には既存のOSS(CSVW, Data Package, JSON-Stat)を組み合わせるだけで改善可能
  • 小さく始めて、CIで品質担保、APIで再利用を促進するのが現実的な道

おかむーから一言

テクノロジーで社会をアップデートするのは本気で楽しいんですよ。まずは1つ、CSVをUTF-8で出すことから始めましょう!

공유하기