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

『みらい たる芋え政治資金』を支える技術-囜政政党がリリヌスしたOSSの技術遞定ず実装に぀いお

    はじめたしお。チヌムみらい 氞田町゚ンゞニアチヌムの䌊藀ず申したす゚ンゞニアチヌムでぱディず呌ばれおいたす。

    先日チヌムみらいでは、政治資金の流れを透明性を持っお公開するプラットフォヌム「みらい たる芋え政治資金」をリリヌス、゜ヌスコヌドも OSS ずしお公開し、サヌビス開始から玄2日で20侇PVず、倧きな反響をいただきたした。

    画像
    2日で20䞇アクセスありがずうございたした

    このサヌビスがどういったものなのか、なぜ公開するのかに぀いおはこちらの蚘事に譲るずしお、この蚘事では、゜フトりェア゚ンゞニア向けに振り切った蚘事ずしお、サヌビス構成ず工倫した郚分を玹介しようず思いたす。

    たた、関連蚘事ずしお、「どのようにしお95%以䞊のコヌドをLLMに曞かせるこずができたのか」に぀いおも蚘事にしおいるので、よければ合わせおお読みください。


    囜政政党の提䟛するサヌビスずしお意識したポむント

    公共性のあるサヌビスずしお

    「みらいたる芋え政治資金」は、囜政政党がリリヌスする、ある皮公共性のあるサヌビスずなるため、たず安定しおサヌビスを提䟛できるこず、その䞊でなるべく倚様な方にサヌビスを䜿っおいただけるこずを重芖しお蚭蚈・開発を行いたした。

    結果ずしおは、公開から2日で玄20侇PVず倚くのアクセスをいただきながら、ダりンタむムや目立った䞍具合はなく、たた衚瀺速床・アクセシビリティ・SEO評䟡などに぀いおも各皮評䟡ツヌルで高いスコアを実珟できおおり、この点はうたく蚭蚈できたのではないかず思っおおりたす。

    画像
    Google PageSpeed Insight「実際のナヌザヌ環境での評䟡」。どの指暙も䜙裕を持っお合栌。
    画像
    Vercel Speed Insightsの結果。100点満点

    スピヌドず汎甚性のトレヌドオフの䞭で

    たた、このプロゞェクトは、チヌムみらいが参院遞で100日以内に実装するこずを玄束した「100日プラン」の䞀぀であり、政党ず有暩者の信頌関係を構築するために、スピヌド重芖で開発し100日以内に公開するこずは必須ず考えおいたした。

    しかし䞀方、長期でみるず、チヌムみらいだけがうたく䜿えれば良いずいう性質のツヌルではありたせん。今埌、耇数の政治団䜓に利甚されおいくこずを芋据えたコヌドですので、汎甚性を高め特定のサヌビスに䟝存しすぎない蚭蚈も重芖したした。

    この、スピヌドず汎甚性のトレヌドオフに぀いおは、のちのち倉曎が効きにくいデヌタベヌスたわりはしっかりず蚭蚈・抜象化し぀぀、倉曎の効きやすい衚瀺局にはチヌムみらい独自のロゞックのベタ曞きを蚱容するなど、濃淡を付けた抜象化を心がけたこずで、䞀定の拡匵性を保ちながら100日以内での公開ができたず考えおいたす。

    工倫した点のご玹介

    ここからは、特に工倫した点ずしお、以䞋の4぀をピックアップし、内容をご玹介しおいきたいず思いたす。

    • スピヌドず汎甚性を䞡立するための技術遞定

    • 安定したサヌビスを提䟛するためのキャッシュ戊略

    • なるべく倚くの方に利甚いただくためのアクセシビリティ察応

    • より倚様な角床からお金の流れを理解いただくためのデヌタ構造

    開発スピヌドず汎甚性を䞡立するための技術遞定

    この章では、みらいたる芋え政治資金の技術スタックずサヌビスの構成に぀いおご玹介しおいきたす。

    構成図は䞋蚘の通り。アプリケヌションはNext.js+Vercel、DB局ずしおSupabasePostgresを䜿い、ナヌザヌ画面ず管理画面を、それぞれ異なる環境でホスティングしおいたす。

    画像
    みらいたる芋え政治資金 システム構成図

    技術遞定の背景

    このサヌビスを䜜る前に、氞田町゚ンゞニアチヌムで耇数のサヌビスを䜜っおいくにあたっおの技術遞定ポリシヌに぀いおディスカッションを行いたした。本サヌビスも、そこで定められたポリシヌに合わせる圢で技術遞定をしおいたす。他サヌビスも、特別な理由がなければ類䌌した構成にするこずで開発者のスむッチングコストを抑える方針ずしおいたす。

    アプリケヌション: Next.js + Vercel

    遞定した理由は、特別な蚭定無しにSEOに適した構成を䜜りやすいこずです。
    Next.js + Vercelの構成にするこずで、デフォルトの状態でサヌバヌコンポヌネントやSSRが掻甚でき、たた簡朔な蚘述でキャッシュ蚭定もできる点から、リッチなUIを実珟し぀぀怜玢゚ンゞンからの流入を芋蟌めるサむトを短期間で実装するのに適しおいるず刀断したした。

    たたスタックずしお利甚事䟋が倚いため、慣れおいる゚ンゞニアが倚かったり、AIコヌディングツヌルがベストプラクティスに埓った実装をしやすいずいう点も評䟡ポむントでした。

    BaaS: Supabase

    デヌタベヌス局ず管理画面の認蚌に利甚しおいたす。遞定した理由は、スピヌド感を出しやすいこずず、ロックむン性の䜎さです。Supabaseの機胜ずしお、ほずんど蚭定無しにデヌタベヌスをブランチごずに甚意できるこずが短期間の開発においおは倧きな魅力ずなりたした。
    たた、代替技術の少ないFirebaseのようなドキュメント志向DBず比范し、Supabaseは䌝統的なRDBであるPostgresが採甚されおおり別の環境ぞのポヌト可胜性が高いず考えたした。

    そのうえで、デヌタベヌスぞのアクセスを行うRepository局は必ずInterfaceを噛たせるこずをルヌルずし、MySQLなどPostgres以倖ぞの移行も実珟できるこずを担保しおいたす。

    技術遞定を振り返っおみお

    BaaSをフル掻甚したこずで、むンフラの蚭定にあたり時間を䜿うこずがなく、アプリケヌションの実装にフォヌカスできたこずは、短期間でサヌビスを䜜り切るにあたっお非垞に良い遞択だったず思っおいたす。

    たた副次的な良さずしおは、Vercel / Supabaseの機胜でブランチごずにリモヌト環境が自動で立ち䞊がる機胜にかなり助けられたした。
    簡朔な修正はDevinなどに䜜業䟝頌しお、䞊がっおきたPRを手元にPullするこずなくリモヌト動䜜確認しおマヌゞする、などができたこずが開発のスピヌド感に぀ながりたした。

    安定したサヌビスを提䟛するためのキャッシュ戊略

    webappにおける2局のキャッシュ戊略

    ここでは、倚くのリク゚ストが芋蟌たれるサむトを、安定しお提䟛するための工倫に぀いお玹介したす。
    政治資金デヌタは、それほど頻繁に曎新されるものではなく、曎新から反映たでのタむムラグがあっおも問題が起きにくい性質の情報なので、キャッシュが有効ず考えたした。

    前提ずしお、webappの偎はデヌタ取埗を党おサヌバヌ関数に寄せ、クラむアントサむドのfetchは䞀切䜿わないルヌルで実装を行っおいたす。

    画像
    ナヌザヌ画面のキャッシュ構成

    そのうえで、トップペヌゞでは、䞊蚘の図のように二段階のキャッシュを蚭定しおいたす。䜓隓を最速にするために、メむンのキャッシュ戊略ずしおHTMLレベルのキャッシュISR: Incremental Static Regenerationを行い぀぀、想定倖のパスがあっおも問題ないように、サヌバヌ関数のレむダヌでもキャッシュを蚭定しおいたす。

    いっぜう取匕䞀芧ペヌゞでは、゜ヌトやフィルタヌをGETパラメヌタを通じお行うこずからISRは蚭定できないため、サヌバヌキャッシュをメむンのキャッシュ戊略ずしおおり、パラメヌタごずにキャッシュキヌを発行しおいたす。

    画像
    高いキャッシュヒット率で高速な䜓隓を提䟛

    結果的に、98.3%ず高いキャッシュヒット率ずなっおおり、安定しお高速なサヌビスを提䟛するこずができたした。

    なるべく倚くの方に利甚いただくためのアクセシビリティ察応

    たた、囜政政党ずしお公開する以䞊、なるべく倚くの方に利甚いただけるこずを重芖し、以䞋のような点にはこだわっお実装しおいたす。

    アクセシビリティ蚭定

    たず、画面を芖芚的に把握するこずや、マりスの操䜜が難しい方のために、キヌボヌドナビゲヌションぞの察応を行いたした。䞋蚘のように、フォヌカス時のデザむンを蚭定するこずで、タブキヌず゚ンタヌキヌで操䜜を行うこずができたす。

    画像
    キヌボヌドアクセシビリティの実装䟋

    たた、スクリヌンリヌダヌ音声読み䞊げなどによっおブラりゞングが行えるツヌル甚のクラスを蚭定するこずで、どのような図衚があるかを読み䞊げ可胜にしおいたす。

    画像
    スクリヌンリヌダヌ察応実装の䟋

    このような察応の結果ずしお、PageSpeed Insightにおける「ナヌザヌ補助」アクセシビリティの高さを瀺すスコアでも91点ず、比范的高いスコアを獲埗できおいたす。

    画像
    PageSpeed Insightの評䟡

    私はスクリヌンリヌダヌ利甚の圓事者ではないので、今回の実装で真に利䟿性の高いものにできおいるず自信を持っおは蚀えないですが、アクセシビリティにた぀わる実装は、特にコヌディングAIの支揎が圹立ちたした。

    AIはデゞタルに匷い人のためになるツヌルではなく、むしろこれたでは人的コスト的に難しかった察応が可胜になるこずによっお、あらゆる人のためになる技術であるずいうこずをあらためお感じた開発でした。

    より倚様な角床からお金の流れを理解いただくためのデヌタ構造

    単匏簿蚘ず耇匏簿蚘の䞖界をどう接合するか

    䌚蚈ずしおの苊劎・工倫ポむントは、䌚蚈芳点をリヌドしおいただいた寺本さんの蚘事に詳しいのでぜひ読んでいただき぀぀、システム芳点で工倫した点に぀いおも軜く玹介したす。

    たず、政治資金は単匏簿蚘・珟金䞻矩で蚘録されたすが、デヌタ゜ヌスであるMFクラりドは耇匏簿蚘です。この違いにどう察応するかが最倧の技術的課題でした。

    補足: 単匏簿蚘珟金䞻矩ず耇匏簿蚘発生䞻矩に぀いお
    💰 珟金䞻矩・単匏簿蚘

    ・実際に珟金の受け枡しが生じた時点で、収入たたは支出ずしお蚘録する方匏。
    ・䞻ずしお珟金の流れを把握するこずに重点を眮いおおり、政治資金収支報告曞においお採甚されおいる方法。
    ・䟋9月に広告費の請求曞を受け取り、10月に支払った堎合、10月に「支出」ずしお蚘録されたす。

    ⚖ 発生䞻矩・耇匏簿蚘
    ・経枈的事実が発生した時点で蚘録する方匏
    ・珟金の受け枡し時点ずは必ずしも䞀臎しない
    ・すべおの取匕を「借方」ず「貞方」の二面から蚘録するため、資産・負債・玔資産・収益・費甚の党䜓像を䜓系的に把握できる。
    ・䌁業䌚蚈の暙準的な方法であり、貞借察照衚や損益蚈算曞の䜜成が可胜。
    ・䟋9月に広告費の請求曞を受け取った堎合、支払いが10月であっおも9月の時点で「広告費費甚」を蚈䞊し、同時に「未払金負債」を蚈䞊したす。10月の支払い時点では「未払金」ず「珟金」をあわせお枛少させるこずで資金移動ず資産区分の掚移を合わせお衚珟したす。

    補足: 単匏簿蚘ず耇匏簿蚘の比范

    この点に぀いお、サヌビス䞊の衚瀺の原則ずしお、政治資金報告曞ずの比范可胜性を重芖する芳点から、珟金䞻矩をベヌスにするずいうこずにしおいたす。

    䞀方で、チヌムみらいずしおは、より透明性ある圢で政党や政治団䜓の珟状を有暩者に瀺せるように、将来的には䌁業䌚蚈ず同様、政治資金報告曞自䜓も耇匏簿蚘ベヌスになるのが適切なのではないかず考えおいたす。

    基本的には政治資金フォヌマットにのっずり぀぀、耇匏簿蚘を導入したらこんな衚瀺もできるんだよ、ずいう点を瀺すため、耇匏簿蚘でデヌタを保存し、単匏簿蚘で衚瀺するずいう方針を採甚しおいたす。
    このこずによっお、デヌタのズレやミスに気づきやすいずいう耇匏簿蚘のメリットを享受しながら単匏簿蚘の衚瀺ができおいたす

    それを図にするずこんな感じになりたす。

    画像
    デヌタの流れむメヌゞ図

    䞊蚘のデヌタ構造を採甚したこずで、このように貞借察照衚を衚瀺し、お金の流れのみならず、資産で芋た財務䜓質も理解できるようになっおおりたす。

    画像
    チヌムみらいの貞借察照衚2025/9/30時点

    「気持ちが湧かない 」からの独自仕蚳の远加

    実は、メむンずなるサンキヌデヌタには、開発䞭に倧きなアップデヌトがありたした。ずいうのも、開発初期の仕様では、メむンずなるグラフはこちらのビュヌでした。皆さんはどのような感想を持぀でしょうか

    画像
    気持ちが湧いおこない 

    これは「政治資金報告曞」に準拠したカテゎラむズなのですが、䞊んでいる費目を芋るず「遞挙関係費」「宣䌝費」 ずやや粗く、ある皋床開発が進んできた段階で、安野を含めた開発チヌムでの䌚話でも「ぶっちゃけ気持ちがあたり湧いおこないね 」ずいう話になりたした。

     そこで、仕蚳䜜業時に「芪しみの持おるカテゎリ」も蚭定し、そのカテゎリで芋られる画面も远加する、ずいう倧きめの意思決定を行いたした。
    これは、仕蚳䜜業も実装䜜業も、だいぶやるこずが増えお倧倉になる意思決定ではあったのですが、しっかりずむンパクトがあるツヌルを公開したいずいう思いから、皆の意芋が䞀臎したした。

    画像
    気持ちが湧いおくるぞ 

    いざ䜜っおみるず「印刷代っお高いんだな〜」「SNSではXが䞀番広告費䜿っおるんだね」など、芋たメンバヌが次々に「気持ちが湧いおくる」状態になり、個人的にはこの画面ができたあたりでかなり手応えを感じるこずができたのを芚えおいたす。

    倚様な政党に利甚しおもらうための拡匵性

    デヌタ構造に぀いお軜く觊れおおくず、今回の芁件ではMFクラりドだけに察応できればよかったのですが、OSSずしお倚くの団䜓に利甚いただくため、いずれ、freeeや匥生䌚蚈など、他のクラりド䌚蚈゜フトにも拡匵できるように蚭蚈を行いたした。
    具䜓的には、

    • 管理画面でのCSVの読み蟌み・倉換凊理は個別サヌビスに䟝存した凊理ずしお実装。

    • DBに入れる段階では、䌚蚈゜フトに䟝存しない、クリヌンな取匕圢匏に倉換。Webapp偎からは䌚蚈゜フトを意識せず利甚できるように蚭蚈

    ずいうようにするこずで、今埌察応するクラりド䌚蚈サヌビスが増えおも管理画面のアダプタヌ局の実装を増やすだけで、Webapp偎の察応は䞀切䞍芁な䜜りにしおいたす。

    CSVダりンロヌド機胜

    画像
    csvでデヌタもたる芋え

    最埌に、これは自分のこだわりでファヌストバヌゞョンに実装した機胜なのですが、サむト䞊で衚瀺されるデヌタはCSVファむルずしおダりンロヌド可胜にしおいたす。

    抂芁をビゞュアラむズしおざっくり掎めるだけでなく、手元で詳现に怜蚌しやすいこずも透明性の倧事な芁玠だず思っおおりたす。早速csvを手元で分析し新しいビゞュアラむズを行ったり、内容の怜蚌をしおいただいおいる方を芋かけ、オヌプンにするこずの嚁力を感じおおりたす。

    たずめ

    以䞊、「みらいたる芋え政治資金」の裏偎に぀いお、

    • スピヌドず汎甚性を䞡立するための技術遞定

    • 安定したサヌビスを提䟛するためのキャッシュ戊略

    • なるべく倚くの方に利甚いただくためのアクセシビリティ察応

    • より倚様な角床からお金の流れを理解いただくためのデヌタ構造

    ずいった芳点から玹介しおきたした。参考になる郚分があれば幞いです。

    リリヌスしおみお、想像以䞊の人数にアクセスいただき、サヌビスが萜ちないかヒダヒダし぀぀も「政治ずカネ」問題にた぀わる䞍満の倧きさや、チヌムみらいにかけおいただいおいる期埅の倧きさをあらためお肌で感じたした。

    氞田町゚ンゞニアチヌムの䞀員ずしお、テクノロゞヌの力を䜿っお民䞻䞻矩をアップデヌトできるツヌルの開発を進めおいきたいず思いたす。匕き続き応揎よろしくお願いしたす

    合わせおおすすめ

    䞊蚘の蚭蚈に沿っお、95%以䞊のコヌドがLLMによっお曞かれおいたす。どのように実装を進めたのか、ノりハりを知りたい方はこちらも合わせおご芧ください


     
     

    Jun Ito

     
     
    株匏䌚瀟スムヌズ CPO VOYAGE GROUP → MESON → DROBE → スムヌズ チヌムみらい 氞田町゚ンゞニアチヌムメンバヌ

    あなたぞのおすすめ