あなたの街のステータス
市区町村を選ぶと、令和2年国勢調査(e-Stat)と国土地理院の面積調から、その街の人口・年齢・世帯のかたちをステータスカードにして表示する。全国1,741市区町村の中での順位と中央値つき。良い悪いは言わず、2つの街を並べて眺められる
所要時間2時間10分
制作メモ
- AIに任せた
- 着手前の法務・規約調査(e-Statの利用規約はCC BY 4.0互換で商用可・数値データは著作権の対象外・地理院タイルはリアルタイム読込なら申請不要、をすべて一次情報の原文で確認)/国勢調査のExcelをZIPから自前で解いて1,741市区町村を取り出し、国土地理院の面積調CSVと結合する変換ツール(検算つき)/順位(同値は競技方式)・全国中央値・検索の純関数と、先に書いた受け入れテストで生成物を検収する進め方/「ワースト」などの価値判断語が画面に出たら落ちるE2Eを含む、4状態対応のテスト(ユニット23+データ検算6+E2E10)/実装の下書きをローカルLLM(Gemma3 27B・Ollama)に出させ、検収→指摘リストつき差し戻しで回す実験の運転
- 自分でやった
- 題材の指定(e-Stat × 国土地理院の地域ランキング)と「規約違反や炎上をしない作り方で」という方針の指示/実装をローカルLLM(Gemma3 27B)に任せる実験の発案
- 失敗と修正
- Gemma3 27Bにデータ変換ツールを2周書かせたが、ZIPの解凍手順や存在しないAPIを毎回作話して悪化した(1周目は検収指摘13件、2周目は指摘を渡した上で別の作話) → 「同じ失敗2回で人に返す」ルールどおり、バイナリ解析だけ検収側が実装。テキスト寄りのstats.jsは1周+修正3か所で合格、HTMLはほぼそのまま使えた=ローカル27Bは得意分野の見極めが要る
画面の配線(app.js)も存在しないライブラリ(select2)を前提に書いてきた(作話系2件目) → 検収側が書き直し。受け入れテスト(E2E10本)を先に書いてあったので、書き直しの正しさはテストで確認できた
「全町で人口>0」の検算が双葉町(07546)で落ちた。2020年国勢調査の双葉町は全町避難で、元の表でも人口が「-」 → 0に書き換えず「—」のまま表示する設計にし、「人口が欠けるのは双葉町だけ」を検証で固定。順位の母数からも正直に外れる(総人口だけ1,740)
データ読込中に検索し始めると、読み込みが終わっても候補が出ないままになる(E2Eのスイート実行だけで顕在化するタイミング差) → 読込完了時に、検索箱にフォーカスがあれば候補を出し直す。最初の直し方だと復元した街名から候補が勝手に開く副作用があり、フォーカス条件を足して解消













