🗳️

素人が参院議員の議案賛否検索サイトを作ってみた

に公開

参議院議員がこの6年間の議案に対し、どのような投票をしたのかが分かるサイトを作りました。

WEBに関しては点で素人ですが、以下で紹介するDBやツールに頼って1週間で取り敢えず形にしてみました。

https://midorisawa07.com/giin-search

投票日直前の公開になってしまいました。
もう少し早く取り掛かって早く公開できれば良かったですね。
ごめんなさい。

背景

ボートマッチの問題点として「未来のことはいくらでも言える」という構造的な限界があります。実現する気のない公約が含まれている可能性もあり、実際に守られるかどうかも不透明です。

一方、過去の行動は隠せません。とりわけ現職議員においては、「これまでの議案にどのように投票したか」を見ることで、主張と行動の整合性を判断できます。

(「議案」とは、法律、予算、条約承認、人事、決議などの国会で話し合う案件のことです。)

参議院のWebサイトでは、過去の議案の投票結果を見ることができます。議員がその議案に賛成したのか反対したのか確認できます。(議案→議員)
ただ、残念なことに議員ごとの投票態度を一覧する(議員→議案)ことはできません

なので、作りました。

データを準備する

データは主として「スマートニュースメディア研究所の国会議案データベース:参議院」に頼りました。結局大元のソースは参議院サイトですが、年によって仕様が違ったりするものをきれいなデータとして公開してくれているので。足りないデータは参議院サイトから収集しました。

スマートニュースメディア研究所さん、当時公開してくれた荻原和樹さん、ありがとうございます。

https://smartnews-smri.github.io/house-of-councillors/

https://x.com/kaz_ogiwara/status/1542702555397902337

GPT4.1で議案要旨を日常語に翻訳する

各議案の名前は、

「重要電子計算機に対する不正な行為による被害の防止に関する法律の施行に伴う関係法律の整備等に関する法律案」

のように長ったらしく堅苦しい言い回しのものが多いし、名前だけでは内容も分かりません。

議案の内容を短くまとめた「議案要旨」も公開されていますが、こちらも法文上の難しい言い回しが多く、法律に詳しくない人にはとっつきにくいです。

「重要電子計算機に対する不正な行為による被害の防止に関する法律の施行に伴う関係法律の整備等に関する法律案」の議案要旨

なので、AIを使って日常語に翻訳しました。

OpenAIの提供するLLMモデルを複数試した結果、GPT4.1が最も原文やプロンプトに忠実に翻訳してくれそうだったので、これを採用しました(プロンプトへの忠実さを目的に開発されたモデルらしい)。

OpenAIさん、ありがとうございます。


使用したプロンプトの一部


日常語に翻訳した議案要旨。読みやすいし分かりやすい。

https://openai.com/index/gpt-4-1/

コードを書く

フレームワークなどの難しいことは分からないので、(フレームワークを使ったほうが絶対に楽なんだろうなと思いつつ)HTML, CSS, 素のJavaScriptのみを使って書きました。
6~7割くらいはClineが書いたと思います。色々機能を付け足したら思ったより時間がかかってしまいました。

Clineさん、ありがとうございます。

https://cline.bot/


Gridの使い方とか、アコーディオンの実装とか、たくさんの場面でICS MEDIAの記事を参考にしました。
アイコン等の素材は一部デジタル庁デザインシステムから拝借しました。

ICSさん、デジタル庁さん、ありがとうございます。

https://ics.media/
https://design.digital.go.jp/

DuckDB WASMを使う

データベースには詳しくないし、セキュリティのこともよく分からないので、今回はDuckDB WASMを使ってみました。

データを.parquet形式に圧縮し、訪問者にGETさせることで、ローカル環境でDB操作ができます。
そのため、一度ページに到着した後の処理は全てローカルで行うことが可能になり、画面遷移も爆速になります。
こちらではDBを持たないので、SQLインジェクション等による攻撃を心配する必要もありません。

詳しく知りたい人は詳しい人達の記事を探してください。

DuckDBさん、ありがとうございます。

https://duckdb.org/docs/stable/clients/wasm/overview.html

Cloudflare Pagesにアップロード

サーバーには詳しくないし、難しい設定もしたくはないので、作ったHTMLなどをアップロードするだけですぐに公開できるCloudfalre Pagesを使いました。アカウントを作って3分で公開できました。

Cloudflareさん、ありがとうございます。

https://www.cloudflare.com/ja-jp/developer-platform/products/pages/

コロナ禍の投票データがない

とここまで書きましたが、途中まで作って気付いた想定外のこと。

参議院では、「押しボタン式投票」が原則なのですが、コロナ禍の間は感染対策のため押しボタンが使えず、「起立採決」が行われていました。
起立採決の場合、誰がどんな投票をしたのかのデータがありません(「多数」「全会一致」などの記録しかない)。

https://mainichi.jp/articles/20250124/k00/00m/010/202000c

押しボタン式投票が使われなかったのは、今回対象にした第200回~第217回国会のうち、第201回~第216回まで。予算などの重要な議案については記名投票が行われることもありましたが、ほとんどがデータなし。

https://www.tokyo-np.co.jp/article/296615

やろうと思えば誰が起立したのか映像記録から探ることも可能かもしれませんが、ものすごく手間ですし、そもそも参議院の映像記録は3年分しか公開されていません(衆議院は平成3年分から公開)。

これについては、請願も出されているようです。
https://www.sangiin.go.jp/japanese/joho1/kousei/seigan/217/yousi/yo2170183.htm

デジタル民主主義の実現に向けて、もう少しデータが整備されると良いですね。

おわりに

特にLLMの恩恵で、素人でも簡単にサイトを作れる時代になりました。良い時代です。
素人ゆえに瑕疵があるかもしれません。見つけた方は、@midorisawa07までお願いします。

X始めたばかりでフォロワーが3人しかいないので、フォローしてくれると嬉しいです!
https://x.com/midorisawa07

↓つくったサイトはこちら↓
https://midorisawa07.com/giin-search


【追記】7/20 4:20「SQLインジェクションの心配もありません。」を「SQLインジェクション等による攻撃を心配する必要もありません。」に修正しました。

Discussion