行政データの“高可用性設計”をコードで検証する:API停止に強い公開データの作り方

IT政策の提案
行政データの“高可用性設計”をコードで検証する:API停止に強い公開データの作り方

どうもおかむーです!今日はちょっとインフラ&データ寄りの話をしますよ〜

  • 公的データ、落ちるとまずいけど運用は意外と脆い
  • APIだけ公開してればOKじゃない:可用性・フォールバック・監視が肝
  • コードで信頼性を担保する設計パターンを実例&スニペットで解説します!

結論

政府・自治体は「データが常に使えること」をSLAのように設計すべきです。API公開は第一歩に過ぎず、CDN/キャッシュ/マルチソース照合/自動監視/スキーマ契約テストといったエンジニアリングで補強することで、政策評価や市民サービスの信頼性が劇的に上がります。

レポート本文

まず、現状の観察から。e-GovのAPIカタログ(https://www.e-gov.go.jp/digital-government/api)や、都道府県のオープンデータ開発者向けページ(例:埼玉県の開発者向けAPIページ https://opendata.pref.saitama.lg.jp/pages/developer )を見ると、APIの公開は進んでいます。ただ、公開の有無と「常に利用できる」ことは別問題なんですよね。

これ見てくださいよ:

  • 単一のWebサーバでAPIを公開→メンテでダウンすると全滅
  • データがPDFでしか出ないエンドポイント→機械処理に障害
  • スキーマ変更が告知されずに発生→クライアントがバーストエラー

要するに、可用性と後方互換性が甘いことが多いということです。

エンジニア的に言うと、必要なのは“耐故障性を設計に組み込むこと”です。実践的なパターンを紹介します。

パターン1:CDN+オリジン冗長化

  • オリジンを複数(本体サーバ+ミラーS3等)にする
  • CDN(CloudFrontやFastly)にキャッシュさせて読取の負荷を吸収
  • キャッシュTTLはデータ性質に合わせて可変(KPIなら短め、静的資料は長め)

パターン2:マルチソースフェイルオーバー

  • 同じ指標をe-Gov APIや都道府県API、e-Statなど複数から取得
  • 差があればアラート、重大な乖離は自動でフェイルオーバーして別ソースを提示

パターン3:論理的フォールバック(PDF→構造データ)

  • 機械可読データが無い場合、自動でPDFを取りに行きテーブル抽出(Tabula/ Camelot)→検証→キャッシュ
  • 要するに、PDFも諦めない工程を作るということです

パターン4:契約テストと監視自動化

  • OpenAPI(またはJSON Schema)でスキーマを定義
  • CIで契約テスト(Schemathesis等)を回し、破壊的変更はプルリクで止める
  • Prometheusでエンドポイントの可用性、レイテンシ、最終成功時刻を監視

コード例(小さく示します、Pythonでフェイルオーバー+キャッシュ):

# 例:requestsでAPIを複数ソースから取りに行き、ローカルRedisにキャッシュ

import requests, redis, time

r = redis.Redis()

SOURCES = ["https://api.e-gov.go.jp/example", "https://opendata.pref.saitama.lg.jp/api/example"]

KEY = 'kpi:example'

for url in SOURCES:

try:

j = requests.get(url, timeout=5).json()

# 簡易スキーマチェック

if 'value' in j:

r.set(KEY, json.dumps({'ts':time.time(),'data':j}), ex=300)

break

except Exception as e:

print('source failed', url, e)

キャッシュ読取は常に優先

cached = r.get(KEY)

要するに、消費側は「最後に成功した値」を常に見られるようにする、ということです。

データ品質検査の自動化(policy KPIのギャップ分析)

政策側が目標値をPDFやレポートで出している一方、実績は別ソースにあることが多いです。自動化の手順はこんな感じ:

  • 目標(manifest)を定期的にスクレイピングして構造化
  • 実績データをAPIで取得(e-Statや都道府県API)
  • 差分を計算してアラート出力
  • pandasで差分を出すコードは定番ですね。要するに、手作業で表を突き合わせるのをコードに置き換えるってことです。

    運用ガバナンス:SLOを定義する

    • API可用性(例:99.5%/月)
    • 最新値の最大遅延(例:6時間以内)
    • フォーマット後方互換率(重大エラーを出さない比率)

    これを契約書(または公開運用指針)に落とすことで、開発側と利用側の期待を合わせられます。GovTech東京のデータ利活用サービス(https://www.govtechtokyo.or.jp/services/data-utilization/)のように、都道府県レベルで共通化する取り組みが参考になりますよ。

    改善提案(優先度付き)

  • まずは監視とキャッシュ(短期)
  • OpenAPI/JSON Schemaを全APIで公開(中期)
  • マルチソースと自動差分検知の導入(中〜長期)
  • データSLOを公式に定義してKPIと紐付ける(長期)
  • まとめ

    行政データの価値は“使えること”にあるんです。APIを出すだけで安心せず、可用性・フェイルオーバー・スキーマ契約・監視の4本柱で守ると、政策評価や市民サービスの信頼度がぐっと上がります。技術的対策は既に現実的で、コード化すれば運用コストも下がりますよ!

    おかむーから一言

    政策はアイデアだけじゃなくて「信頼できるデータ基盤」で勝負するんです!エンジニアとして、社会インフラを再設計していきましょう〜

    シェアする