あなたの街のステータス
指標を選ぶと、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統計GIS)の小地域重心を人口で重み付けした1,741点の代表点計算と、順位で塗る地図(海岸線なし・単一色相・方向つき凡例・タップでカードへ)
- 自分でやった
- 題材の指定(e-Stat × 国土地理院の地域ランキング)と「規約違反や炎上をしない作り方で」という方針の指示/実装をローカルLLM(Gemma3 27B)に任せる実験の発案/公開後に「地図にしてほしい。ランキングごとにヒートマップ化」と作り直しを発案(Day 010・014と同じ流れ)
- 失敗と修正
- 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のスイート実行だけで顕在化するタイミング差) → 読込完了時に、検索箱にフォーカスがあれば候補を出し直す。最初の直し方だと復元した街名から候補が勝手に開く副作用があり、フォーカス条件を足して解消













