公開データを「押し出す」時代へ:政府データのWebhook設計で政策検証をリアルタイムにする

IT政策の提案
公開データを「押し出す」時代へ:政府データのWebhook設計で政策検証をリアルタイムにする

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

  • 3行要約
- 政府・自治体の公開データは今、ポーリング(定期取得)が中心で遅延や負荷が問題になっている

- Webhook(イベントプッシュ)を標準にすると鮮度・検証性・自動化が劇的に改善する

- 設計要点は認証・署名・冪等性・スキーマ管理・配信SLO。具体的な実装例も示すよ!

結論

政府・自治体は公開データを“ファイル置き場”として公開するだけじゃなく、データ更新をイベントとして押し出すWebhookモデルを採用すべきです。エンジニア的に言うと「APIで取得する」から「イベントで受け取る」へ移行することで、政策検証のリアルタイム性と自動化が飛躍的に上がります。要するに、更新を待つ運用をやめて、更新をトリガーにする設計に切り替えようということです。

レポート本文

背景と課題

これ見てくださいよ:notice.go.jpや各省のCSV(例:notice.go.jpのNIC NTER注意喚起CSVや各種省庁のCSVが散在している)を定期的にスクレイピングしているプロジェクトが多いんですよね。e-Statやgo.jp系のデータカタログはあるけど、ほとんどがファイルやAPIのポーリング前提です。ポーリングだと

  • 遅延(更新から検証までのラグ)
  • インフラ負荷(大量のクライアントが定期アクセス)
  • 変化検出のコスト(差分計算、重複処理)

といった問題が残るんです。

提案:データ更新Webhook(イベント駆動公開データ)

概念的には簡単です。各オープンデータセットに対して「dataset.updated」「dataset.created」「dataset.deleted」などのイベントを発行し、利用者は購読(Webhook登録)して受け取る。メリットは:

  • 低遅延:更新直後に通知が来るから監視・検証がリアルタイムに近くなる
  • 効率化:ポーリング不要でインフラ負荷が下がる
  • トレーサビリティ:イベントにメタ情報(ETag、commit id、発行者)を含めれば、誰がいつ更新したかが追える

設計要点(技術チェックリスト)

1) イベント仕様

  • イベントタイプ:dataset.created/updated/deleted/snapshot
  • ペイロード:{ dataset_id, version, published_at, diff_url?, snapshot_url, schema_version }
  • 要するに、受け手が最小限で差分を扱える情報を含める

2) 認証と署名

  • HTTPS必須、かつ送信側でHMAC-SHA256署名を付与(ヘッダ例: X-Gov-Signature: sha256=...)
  • 登録時にWebhookシークレットを交換。商用と同じモデルでいいです

3) 冪等性と受信保証

  • イベントにidempotency_keyを含める。受け手はそれで重複排除
  • 配信保証はat-least-onceが現実的。受け手は重複処理対応を必須に

4) スキーマ/バージョニング

  • JSON Schemaでschema_versionを管理。schema_versionが上がったら互換性情報を付与
  • データカタログ(例:data.go.jp的なカタログ)にWebhookエンドポイント情報とサンプルペイロードを掲載

5) 配信SLOとモニタリング

  • 成功率(7日間で95%配信成功)や平均遅延(99パーセンタイルでn秒)を定義
  • 配信失敗はRetry with exponential backoff(最大72時間)とし、通知失敗は監査ログに残す

6) セキュリティとプライバシー

  • 機微データはイベント化しないか、限定されたクライアントのみに暗号化して配信
  • PIIが絡む場合はPayloadは差分指標のみ、詳細は認可されたAPIで配る

実装例(Node.js受信ハンドラ、簡易版)

// express + crypto + ajv

const express = require('express');

const crypto = require('crypto');

const Ajv = require('ajv');

const ajv = new Ajv();

const app = express();

app.use(express.json());

const SECRET = process.env.WEBHOOK_SECRET; // 登録時に受け取る

function verifySignature(body, sigHeader) {

const h = crypto.createHmac('sha256', SECRET).update(JSON.stringify(body)).digest('hex');

return sha256=${h} === sigHeader;

}

app.post('/webhook', (req, res) => {

const sig = req.header('X-Gov-Signature');

if (!verifySignature(req.body, sig)) return res.status(401).send('invalid sig');

const schema = {/ JSON Schema for event /};

if (!ajv.validate(schema, req.body)) return res.status(400).send('invalid payload');

const key = req.body.idempotency_key;

// 重複排除ロジック(DBでキーをチェック)

// 受け取ったら差分URLやsnapshotをAPIで取得して処理

res.status(200).send('ok');

});

app.listen(8080);

運用シナリオ例

  • 地方自治体がごみ収集スケジュールを公開 → 更新イベントをSlackやダッシュボードアラートに即反映
  • 保健所の感染症定点データ更新 → 監査用の自動検証パイプラインが差分を取り、目標ラインとのズレを検出

既存システムとの共存

全てを一気に入れ替える必要はないです。まずは主要データセット(災害・保健・人口動態・財政)でWebhookをオプトイン導入して、Data Catalogに購読UIを作る。e-Statや各省APIは引き続き提供しつつ、イベントが来たら新旧差分を自動で取り込むハイブリッド運用が現実的です。

政策検証へのインパクト

Webhookで鮮度が上がると、政策の実績検証が早く正確になります。例えば補助金の申請状況や支出実績をリアルタイム近くで集約すれば、目標設定(数値目標)と実績のギャップを早期に検出して介入できます。要するに、反応速度が上がるんですよね!

まとめ

ポーリング中心の公開データ運用は便利だけどもはや限界です。Webhook(イベント駆動)を導入すると、鮮度、効率、トレーサビリティが向上して政策検証がやりやすくなります。技術的には署名、冪等性、スキーマ管理、配信SLOが肝です。まずは主要データセットでパイロットを回して、Data Catalogに購読UXを作るのが現実的な一歩です。

おかむーから一言

テクノロジーは待つものじゃなくて押し出すもの。イベントを設計して行政の反応速度を上げていきましょう!

シェアする