コードで語るマニフェスト:行政データの機械可読性と実装ギャップを技術的に検証する

IT政策提案
コードで語るマニフェスト:行政データの機械可読性と実装ギャップを技術的に検証する

どうも〜おかむーです!今日はちょっとエンジニアっぽい話をしますよ〜

  • 行政データがPDFに埋もれている問題は依然として多い
  • Digital Agencyの機械可読性ルールは正しいが実装が追いついてない
  • API化・CSV/JSON公開・メタデータ整備で即効性のある改善が可能

結論

行政が掲げるデジタル政策は方向性は良いが、現場の公開実装は未整備であることが多い。要するに「方針はあるが、実装(API・機械可読フォーマット・メタデータ)が不足している」ということです。エンジニア的に言うと、API一本・CSV一枚で多くの課題が解消します!

レポート本文

背景と問題の所在

これ見てくださいよ:デジタル庁や内閣官房の議論資料(例: digital.go.jp の「行政データにおける機械可読性に関するルール」PDF)では「ファイル形式は機械が直接読み取れる Excel や CSV 等」と明記されています(出典: https://www.digital.go.jp/)。要するにPDFやWordは人間向けで機械処理しにくい、と断言しているわけです。

しかし現場を見ると、自治体の実績報告や交付金の評価はPDFでの公開が多い(例: 須賀川市の実績評価ページ https://www.city.sukagawa.fukushima.jp/)。PDFだとテーブルの抽出や定期更新が難しく、データ連携や可視化が滞ります。

技術検証:よくある障壁

  • フォーマット不統一:CSVは出すけどエンコーディングがShift_JISだったり、列名が自治体ごとにバラバラ
  • メタデータ不足:データのスキーマ・更新タイミング・ライセンス情報が欠落
  • API未整備:REST APIが無く、スクレイピングやPDFパースでしかデータ取得できない
  • 品質問題:NULL扱い・単位表記不一致・タイムスタンプ欠落など

要するに、エンジニア的に言うと「契約はできてもインテグレーションできない」状況です。

実際にやるときのコード例(サンプル)

エンジニアならわかると思うんですけど、CSVが出てればpandasで楽勝です。例:

import requests

import pandas as pd

url = 'https://example.gov/data.csv'

r = requests.get(url)

open('data.csv','wb').write(r.content)

df = pd.read_csv('data.csv', encoding='utf-8')

欠損の簡易チェック

print(df.isna().sum())

PDFしかないケースではtabulaやpdfplumberで抽出してCSV化するワークフローが必要。これは臨時対応であって、恒久的解決にはAPI提供が不可欠。

API設計と公開のベストプラクティス

  • OpenAPI仕様でエンドポイントを定義する(GET /datasets, GET /datasets/{id}/download)
  • データはJSONとCSVを同時に提供。CSVはUTF-8で、明確なヘッダと単位を記載
  • メタデータはDCATやschema.orgで記述し、更新日時・ライセンスを必須項目に
  • ペイロードはページネーション・フィルター(年度・地域・カテゴリ)を用意
  • 例えば、OpenAPIの簡単なスニペットはこんな感じ:

    openapi: 3.0.0
    

    paths:

    /datasets:

    get:

    parameters:

    - name: year

    in: query

    schema:

    type: integer

    responses:

    '200':

    description: OK

    政策目標と実績のギャップ分析手法

    政策(例:デジタル田園都市構想)では「デジタル実装タイプ」の事業数や利用者数といった目標があるはずです(参照: https://www.chisou.go.jp/)。

    ギャップ分析は次のステップでやります:

    • 目標値(政策文書)を構造化して取り出す
    • 実績値(自治体の実績報告)を機械可読化して整形
    • 同一スキーマにマッピングして差分計算(例: 実績/目標 = 達成率)

    簡単なSQL例:

    SELECT
    

    p.policy_id,

    p.target_value,

    COALESCE(s.sum_actual,0) AS actual_value,

    COALESCE(s.sum_actual,0)/p.target_value AS achievement_rate

    FROM policies p

    LEFT JOIN (

    SELECT policy_id, SUM(value) AS sum_actual FROM achievements GROUP BY policy_id

    ) s ON p.policy_id = s.policy_id;

    指標化:API可用性スコアを作る

    オープンデータの活用可能性を定量化するために簡易スコアを提案します(0-100点):

    • フォーマット(CSV/JSONあるか): 30点
    • メタデータ(更新日・ライセンス): 20点
    • API提供: 30点
    • ドキュメント・OpenAPI: 20点

    このスコアを自治体ごとに計測してダッシュボード化すれば投資判断に使えるはずです。

    改善提案(実行可能な短期中期施策)

    短期(3ヶ月):

    • 重要レポートのCSV変換とUTF-8化
    • メタデータテンプレートの配布(CSVヘッダ・更新日・単位)
    中期(6-12ヶ月):
    • 共通API仕様(OpenAPI)を採用、自治体にサンプル実装を提供
    • CKAN等のオープンデータポータル導入支援
    長期(1年〜):
    • データガバナンス体制の整備、品質監査とSLA設定

    まとめ

    • 方針(機械可読性ルール)は整いつつあるが、現場実装がボトルネック
    • PDF→CSV/JSON、OpenAPI、メタデータ整備が即効性のある対策
    • 小さく始めてスコア化 → 可視化 → 標準化の順で展開すると現場も乗りやすい

    おかむーから一言

    テクノロジーで社会をアップデートするって言うけど、まずはデータをちゃんと開けることから始まるんですよ!小さなAPI一本が市民のUXを変えるんで、まずはCSV出しましょう!