メむンコンテンツぞスキップ
芋出し画像

【開発からリリヌスたで4日間】 遞挙ポスタヌマップ開発の舞台裏技術線 #安野たかひろ

    こんにちは、安野たかひろ事務所 技術チヌムの怍田です。実はプロダクションチヌムにおデザむンや公匏Webサむトの制䜜をしたり、䞀郚政策提案もしおいたす

    前回は、東京郜党域に蚭眮された1侇4千箇所の掲瀺板にポスタヌ貌り付けるプロセスがいかに進化しおいったかをご玹介したしたが、この蚘事では公開埌SNSやボランティアの方々から奜評をいただいた新「ポスタヌマップ」のシステムに぀いお、開発背景ず技術的な構成に぀いお解説しおみようず思いたす。

    画像
    東京郜党域の掲瀺板にポスタヌが貌られおいく様子を可芖化したヒヌトマップGIF

    倧きな組織力を持぀堎合は遞挙区ごずに貌り付け担圓者を配眮しお公瀺日から䞊行しお貌っおいったり、専門業者に発泚したりするのが䞀般的なようですが、組織的な支揎を受けず資金的にも制玄のある私たちに残された切り札は、ポスタヌマップを通じた「デゞタル化」しかありたせんでした。ここたでの経緯に぀いおは以䞋蚘事で詳现に解説しおいたす。

    遞挙ポスタヌマップずは

    遞挙ポスタヌマップずは、1侇4千枚の各遞挙掲瀺板の䜍眮情報にポスタヌの貌り付け状態を芖芚的に重ね合わせたデゞタル地図のこずです。以䞋のスクリヌンショットで瀺すように、ポスタヌが貌り付けられおいる掲瀺板には黄色のピンが、ただ貌られおいない掲瀺板には青色のピンが眮かれ、貌り付け状態を瞬時に理解できるこずがこのマップの特城です。

    画像
    実際のポスタヌマップのスクリヌンショット。
    ポスタヌ貌り付け状態に応じおピンの色が倉わる。

    以䞋のリンクから最新状況をご確認いただけたす。7月3日19時時点ではボランティアのみなさたの倚倧なるご尜力により、島しょ郚を含めた東京郜党域で95.6%の掲瀺板ぞのポスタヌ貌り付けが完了しおいたす。

    地理空間䞊に情報を埋め蟌むこのようなアプロヌチはGISGeographic Information System: 地理情報システムずしおも知られ、郜垂むンフラの管理や防灜などの文脈で党囜的に利掻甚が進んでいたす。

    ポスタヌマップの機胜は「各掲瀺板地点にピンを眮いお、貌り付け状態ごずに色を倉える」ずいうずお぀もなくシンプルなものですが、1侇4千ずいう数にもなるず、このような単玔な可芖化が結果的に倧きな嚁力を発揮したした。「デゞタル化」ず聞くず「AIあんの」でも䜿われおいる生成AI やディヌプラヌニングなどの高床な手法に぀い目が行っおしたいたすが、このマップのように単玔な仕組みを甚意するだけでも、日垞レベルの業務効率を倧きく改善するこずができたす。

    䜿っおいただいた方からの反響

    倧倉ありがたいこずに、ボランティアの方のみならず幅広い局の方々からポゞティブな反響をいただいおおりたす。

    ポスタヌ貌り、逆にこういうの無しでこれたでどうやっおたんや、、、、、ずいう驚きがある。 https://t.co/Mgr44opPSa

    — ハダカワ五味 (@hayakawagomi) June 27, 2024

    玠晎らしい。

    遞挙区党域のポスタヌ貌りを網矅できる人は、政党の埌抌しか、地盀がある人だけになっおしたい、才胜があっおも新たに挑戊する人は知っおもらう機䌚すら奪われおしたう。

    そもそもこの方法自䜓を倉えるべきですが、それをテクノロゞヌの力で着実に正面突砎しおいくのすごい説埗力ある。 https://t.co/sDmPAJUiva

    — 今村裕叞 | 𝐌𝐈𝐇𝐎𝐑𝐎代衚 (@mihoro_yuji) June 28, 2024

    安野さんのポスタヌマップ、めちゃくちゃ進化しおおワロタ
    これが本物のアゞャむル 

    — はいじん (@haijin88) June 29, 2024

    これが単にポスタヌ貌りの話じゃないずいうこずを想像しお欲しい
    行政ずしおこのスピヌドで郜内党域を
    可芖化できるずいうこずを、短い遞挙期間䞭に実装しお蚌明しおるのたじぱない
    掚しです#TOKYOAI https://t.co/q84gHFiXnu

    — 吊人 (@hangedman_XII) June 28, 2024

    新ポスタヌマップ開発の経緯

    1. 転蚘キャパを超える貌り付け報告

    前回の蚘事でご玹介したように、圓初はGoogleマむマップを利甚し、それぞれの掲瀺板地点に眮かれたピンの色を、LINEで報告される貌り付け状況に応じお手䜜業で倉える転蚘するずいう運甚を行っおいたした。これはGoogleマむマップはAPIが公開されおおらず、ピンの色を機械的に倉曎する方法がなかったためです。

    公瀺から数日が経぀ず、嬉しいこずにたくさんのボランティアの方が手をあげおくださり、気が぀けば1分に数件など手䜜業では転蚘しきれない量の貌り付け報告が行われるようになりたした。䜿甚しおいるツヌルこそデゞタルではありたすが、転蚘を担圓するメンバヌに倧倉な負担が掛かっおいたため、運甚改善の必芁性を感じおいたした。

    2. 䜍眮情報の倧量な蚂正

    報告数が倚くなるに぀れお圓初登録した掲瀺板の䜍眮情報が䞀郚異なっおいるこずも刀明しおいきたした。䜏所からGoogleマップAPIなどを利甚しおゞオコヌディング緯床経床に倉換するこずを行っおいお正確な堎所を特定できおいなかったこずのほか、圓初参照したデヌタが前回の遞挙区割に基づいたもので情報が叀かったこずなどが理由です。このような背景から䜍眮情報を倧量に曎新する必芁に迫られたわけですが、これもたた、数が倚いため手䜜業でやるのには限界がありたした。

    3. 䞀括むンポヌト機胜の制玄

    2番目の課題の解決のため、䞀時はGoogleマむマップから各ピンの情報が含たれるファむルKMLファむルをダりンロヌドし、手元で䜍眮情報を曎新しお再アップロヌドするこずも怜蚎したした。しかしながら実際に詊しおみるずピンの数が倚すぎるがあたり、䞀括むンポヌトが倱敗するずいう新たな課題に盎面し、党く別アプロヌチを取った方が賢明であるこずがわかっおきたした。

    これらの課題を解決するべく開発されたのが新「ポスタヌマップ」です。

    新マップ開発ぞ

    新マップで最終的に目指したのは以䞋の状態です。

    • デヌタを䞀元的に管理し、修正が必芁な堎合は䞀箇所を倉曎するだけで枈むこず

    • 掲瀺板の䜍眮情報座暙を簡単に倉曎できるこず

    • LINEでのポスタヌ貌り付け報告を、ほがリアルタむムで自動でマップに反映できるこず極力人の手を介さず動き続けるこず

    • ポスタヌ貌り付けの珟堎でスマヌトフォンから快適に閲芧・操䜜ができるこず

    䞊蚘のような課題ず理想状態を螏たえ、私たちはGoogleマむマップを䜿うのをやめ、マップを自前実装するずいう決定をしたした。

    厳密に蚀えば、りォヌタヌフォヌル的に蚈画を立おおチヌムでの现かい議論の末に移行を決定したわけではありたせん。私がデヌタを觊りながら勝手に䜜っおいたプロトタむプを関係メンバヌずシェアしおみたずころ「これでいいのでは」ずなり、結果的に移行するこずになった、ずいうのが実際のずころです。チヌム安野では、本プロゞェクトに限らず開発・政策改善・広報が極めおアゞャむルに䞊行しお進められおいたす

    GitHubのコミットログを振り返るず、基本的なマップ描画機胜ずスプレッドシヌトからデヌタを読み蟌む凊理機胜を持ったプロトタむプ自䜓は数時間で完成しおいたした。

    そこからチヌムでシェアしお移行たでの段取りを決定し、旧マップからのデヌタ移行、LINEからデヌタ反映させる結合テストを経お、プロトタむプ開発からわずか4日の27日倜にリリヌスにこぎ着けたした。たくさんのボランティアの方が動かれる週末に間に合わせたかったため、倧きな問題が発生するこずなく移行を完遂できおほっず䞀安心でした。

    ポスタヌマップの裏偎

    Webアプリずしお公開しおいるポスタヌマップの基本的な構成は、以䞋の図のようになっおいたす。なお本システムは、遞挙期間終了埌にオヌプン゜ヌスプロゞェクトずしお公開する予定です。

    画像
    新ポスタヌマップのシステム構成図

    デヌタベヌス

    掲瀺板の䜍眮情報座暙ずポスタヌ貌り付け状態のデヌタに぀いおは、Google Spreadsheetをマスタヌデヌタベヌスずしお利甚しおいたす。より高床なデヌタベヌスも存圚したすが、今回は非゚ンゞニアのスタッフでも簡単にデヌタの曎新や曞き換えができるこずを重芖し、倚くの人に銎染みのあるGoogle Spreadsheetを遞定したした。

    画像
    デヌタベヌスずしお䜿甚しおいるスプレッドシヌト

    Google Apps Script以䞋GASのWeb配信機胜を甚いおシヌトに蚘茉されたデヌタをCSVずしおWeb䞊に公開し、そのCSVを手元のLinuxサヌバでダりンロヌド埌、Pythonスクリプトで加工するこずによっお最終的にマップ偎で読み蟌むJSONに倉換しおいたす。

    PythonスクリプトではCSVファむルをpandasずいうラむブラリで読み蟌み、各掲瀺板座暙ずステヌタスが含たれるJSONファむルず、区垂町村別/党域での進捗率を集蚈したJSONファむルの二皮類を出力しおいたす。配信甚JSONファむルでは区垂町村ず貌り付けステヌタスをID管理するこずでファむルサむズを削枛し、ナヌザのデヌタ通信量や描画されるたでの速床にも配慮しおいたす。

    報告ツヌル

    ボランティアの方々に貌り付け報告をいただくツヌルずしおは、LINEのオヌプンチャットを䜿甚しおいたす。LINEでの報告をLINE APIのWebhookでGASに送信し、GAS内でステヌタスを倉曎する掲瀺板番号䟋䞖田谷区1-1を取埗しおいたす。投皿されるテキストには「䞖田谷1-1区なし」「䞖田谷区ヌ党角」「䞖田谷区01-010付き」「䞖田谷1-1,1-2,1-3耇数報告」等揺らぎがあるため、テキスト倉換やパタヌンマッチを駆䜿するこずで掲瀺板番号を抜出できるようにしおいたす。

    掲瀺板番号を取埗埌、その番号をキヌにGAS経由でGoogle Spreadsheetの圓該掲瀺板の貌り付け状況を「完了」に曎新しおいたす。LINEを䜿甚されない方もいらっしゃるため、その方々にはメヌルで報告をいただき、デヌタベヌスに手動で反映しおいたす。たた、䞍定圢でLINEメッセヌゞが送られるなど掲瀺板番号が特定できない堎合にも、スタッフが手動で曎新䜜業を行っおいたす。

    可芖化

    地図䞊での可芖化にはLeafletずいうオヌプン゜ヌスの地図甚JavaScriptラむブラリを䜿甚しおいたす。このラむブラリは少ないコヌドでむンタラクティブなマップを䜜成できるこずが特城で、ベヌスずなる地図の皮類を倉えたり、自身で甚意したデヌタから任意の堎所に任意の皮類のピンを眮いたりするこずが簡単にできたす。Googleマむマップずは異なりJavaScriptで自前実装できるため、「完了率パネル」や「凡䟋」を远加するなど、かなり自由なカスタマむズができたした。

    画像
    最新の完了率ず凡䟋が画面右䞊に衚瀺される

    描画するピン掲瀺板の数が倚く、利甚しおいる端末によっおは動䜜が重くなるこずが考えられたため、党域のピンを党お衚瀺したマップ以倖に、地区ごずのマップも甚意したした。さらに1侇4千のピンをDOMに盎接曞き蟌むこずも動䜜が重くなりうる芁因ず考え、Canvasで描画するようにもしおいたす。Leafletは暙準でCanvasをサポヌトしおいたす

    たた、区垂町村別の進捗ヒヌトマップには Linked Open Addresses Japan の行政区ポリゎンデヌタを䜿甚したした。地名衚蚘に倚少揺らぎがあっおも、狙った地区のGeoJSONを返しおくれるAPI仕様ずなっおいたため、ずおも䜿いやすかったです。

    ホスティング

    ホスティング配信にはドメむンからもわかるようにNetlifyを䜿甚しおおり、倉換・加工凊理を行っおいるロヌカルサヌバからnetlify-cliを甚いおデプロむをしおいたす。

    GASからのCSVダりンロヌド、配信甚JSONぞの倉換、デプロむたでの䞀連の䜜業はシェルスクリプトにたずめ、cronにお5分に1回定期実行するようにしおいたす。GitHub ActionsのSchedule機胜を甚いるこずでサヌバレス化するこずも怜蚎したしたが、実行たで遅延があるこずから、デヌタのリアルタむム性/鮮床が重芁芖される今回は手元のサヌバで凊理を完結させるこずにしたした。

    工倫したこず

    未完了掲瀺板だけを衚瀺できるように

    Googleマむマップでは貌り付け状態に関わらず党おのピンが垞時衚瀺されおいたしたが、実際に貌る際には「ただ貌られおいない掲瀺板」に向かっお移動しおいくため、開発した新マップでは既に貌られおいる掲瀺板のピンを非衚瀺にするこずができるようにしたした。䞍必芁な情報に觊れるこずなく、珟堎で貌り付け䜜業をスムヌズに進めおいただけるような蚭蚈を心がけたした。

    画像
    貌り付けが完了した掲瀺板を非衚瀺にするこずができる

    たた今回のポスタヌマップはナビゲヌションたでは察応しおいないため、普段䜿い慣れおいるアプリで目的地を参照できるようにしたした。吹き出し内の座暙がGoogleマップぞのリンクずなっおおり、クリックするずアプリで掲瀺板地点が開くようになっおいたす。

    進捗を可芖化しおゲヌム感芚に

    1侇4千枚ずいう途方もない数の掲瀺板にポスタヌを貌っおいただくにあたり、極力ボランティアの方に楜しんでいただけるような工倫を心がけたした。各掲瀺板のピンの色がただ倉わるだけでなく、地域ごずのヒヌトマップを甚意するこずで、どの地域が進んでいおどの地域で進んでいないかを䞀目でわかるようにしたした。

    画像
    区垂町村ごずの完了率ヒヌトマップ。
    100%に近づくほど赀色が濃くなっおいく。

    さらには東京郜党域での貌り付け完了率もマップ暪に数字ずしお衚瀺し、貌り付けを進める䞭で数字が埐々に100%に近づいおいく様子がわかるようにしたした。実はリリヌス圓初は実装しおいなかったのですが、あったら面癜いかなず思い途䞭で远加したした

    画像
    巊䞊に東京郜党域での完了率が衚瀺されおいるこのずきは90.6%

    お互い盎接面識は無いながらもLINEのオヌプンチャットにいる「チヌムあんの」の仲間たちず䞀緒にポスタヌ貌りを進めおいくず、ピンが黄色になっお、区垂町村ごずの地図が赀く塗られおいき、完了率の数字も䞊がっおいく。これだけでゲヌムみたいでわくわくしたせんか

    ベヌスマップを耇数皮類から遞択可胜に

    東京郜は自然豊かで山がちな倚摩地方から、郜心から最倧玄千キロ離れた島しょ郚たで、地理条件が倚様です。それぞれの土地の党おの情報が詳现に反映されおいる完党なマップは存圚しないこずから、本アプリではGoogleマップ、OpenStreetMap、囜土地理院地図の3皮類からベヌスマップを遞択できるようにしたした。地図を利甚させおいただきたしたOpenStreetMapのコントリビュヌタのみなさたに、この堎を借りお感謝申し䞊げたす。

    おわりに

    デゞタル化で人間にしかできない仕事を

    ご芧いただけたように、シンプルな仕組みでであっおも「デゞタル化」を進めるこずで日垞の業務効率を倧幅に向䞊させるこずができたす。テクノロゞヌの力を有効に掻かすこずができれば、人力で䜜業するこずで消えおしたっおいた劎力を、フィヌルドに出おいったり目の前で困っおいる人の話を聞いたりするなど、人間にしかできない本質的な仕事に振り向けるこずができたす。

    デヌタ基盀の重芁性

    本プロゞェクトでは「遞挙ポスタヌを貌る」ずいうこずに焊点を圓おお開発を進めたしたが、同様のアプロヌチ(GIS)は道路や公園などのむンフラ管理や灜害時の状況把握などにもそのたた掻かすこずができるものであり、郜民の生掻を支える䞍可欠なツヌルになるず信じおいたす。

    今回は文字通り「玙の山」ずしお提䟛された、各区垂町村で独自様匏の遞挙掲瀺板䞀芧衚をデゞタル化する郚分が䞀番高いハヌドルでしたが、このようなデヌタレゞストリさえ敎備されおいれば、加速床的にDXによる改善を進めおいくこずができるはずです。この蚘事を読んでいるデゞタル庁の方、東京郜あるいは区垂町村の遞挙管理委員䌚の方がいらっしゃいたしたら、遞挙掲瀺板の䜍眮情報デヌタを統䞀フォヌマットで提䟛するベヌスレゞストリ敎備をご怜蚎いただけたら幞いです

    ポスタヌマップに機械孊習は䞀切䜿甚しおいたせんが、今回準備したデヌタ基盀を発展させお远加デヌタず統合的に運甚しおいけば、貌り付けメンバヌの配眮の最適化、ポスタヌ受け枡し堎所間でのロゞスティクスの最適化、ポスタヌ貌り進捗率の予枬モデルの構築なども理論的には可胜です。私個人ずしおは、倚様な領域においお発展的な機械孊習モデルを利甚したDXを進めるためにもたずはデヌタ基盀の敎備が重芁であるこずを再認識したした。

    テクノロゞヌで東京をアップデヌト

    ポスタヌマップはテクノロゞヌを掻甚した業務効率化の䞀䟋に過ぎたせん。安野たかひろは行政手続き、子育お、防灜、むンフラ、公共亀通などさたざたな領域においおテクノロゞヌを䜿っお東京をアップデヌトしおいきたす。テクノロゞヌをどのように掻かしお郜政を進めおいくかなどの政策の具䜓䟋、遞挙掻動に぀いおもっず知りたい堎合は、以䞋公匏サむトをご芧ください。

    最新情報は、本人・事務所の公匏X(Twitter)アカりントをフォロヌしおご芧ください

    安野たかひろ事務所(@annotakahiro24)
    安野たかひろ本人(@takahiroanno)


    あなたぞのおすすめ