議席が過半数に足りなくても、必ず組閣できていた
総選挙が終われば、そのまま内閣が発足していた。
首班指名という手続きが、まるごと抜け落ちていた。
「衆院選のあとに首班指名を実装したい」という依頼をもらって、自分のコードを読み返して青くなった。
総選挙が終わると「組閣する」ボタンが出る。連立の相手を選ぶと、そのまま内閣が発足する。
議席がいくつであっても。過半数に届いていなくても。**必ず**。
憲法第六十七条は「内閣総理大臣は、国会議員の中から国会の議決で、これを指名する」と定めている。総選挙で議席が決まっても、それだけでは政権は生まれない。国会が開かれ、両院がそれぞれ記名投票で1人を指名して、初めて総理が決まる。
その手続きが、まるごと無かった。
抜けていたのは条文ではなく、緊張だった
条文の再現が抜けていた、というだけの話ではない。
抜けていたのは「議席が足りないかもしれない」という緊張そのものだった。
過半数に届かない党が政権を取れるかどうかは、実際には野党がまとまるかどうかにかかっている。
野党がばらばらなら少数与党でも首班を取れるし、まとまれば第1党でも政権を渡すことになる。1994年も2024年以降も、日本の政治はまさにそこで動いてきた。
実装は素直だった。議席を持つ各党が候補を1人立て、有効投票の過半数を取った人がいればそこで決まる。いなければ上位2名で決選投票——こちらは過半数ではなく比較多数で決まる(衆議院規則第十八条)ので、白票は事実上、相手を利する。
民自党187議席で試したら、こうなった。1回目は誰も過半数に届かず決選投票へ。刷新・国民・参画を取り込んで239票、立憲国民が226票。13票差だった。
同じ187議席でも、野党の並び方ひとつで負けうる。それが見えるようになった。
選挙区では協力しているのに、指名では敵に回っていた
最初に動かしたとき、開票の表を見て手が止まった。公盟党が立憲国民党に投じている。
公盟党は民自党の連立与党で、選挙区では候補を降ろしてまで民自を支えている(データにも `standsAsideFor: minji` と書いてある)。その党が、首班指名では敵に回る。
原因は投票行動の決め方だった。「自党の候補がいなければ政策の近いほうへ」としていたので、政策座標だけを見ていたのだ。公盟の立ち位置は民自よりも立憲に近い。数字としてはそのとおりで、モデルとしては一貫している。だが絵として筋が通らない。
順番を入れ替えた。連立の枠組み → 選挙協力 → 自党 → 野党共闘 → 政策の距離。
既に結ばれている関係を、政策距離より先に見る。選挙区で候補を降ろす関係にある党どうしは、指名でも同じ側に立つ。
野党側にも同じ理屈を入れた。候補者調整に応じる党どうしは、決選投票で必ずまとまる。政策の距離より優先させたのは、共闘とはそもそも「政策が違っても数で束ねる」ことだからだ。
これを入れた瞬間、少数与党の勝ち筋が一気に細くなった。それでいいと思う。
ついでに、1票も入らなかった候補を開票結果から落とした。公盟が民自に投じると、公盟の候補は0票になる。0票の名前を並べても意味が無い。
ここまで作ってようやく、政策座標が仕事をした
各党の「立ち位置」(経済・社会・対外の3軸)は、これまで連立の組みやすさを並べ替えるのにしか使っていなかった。
決選投票でどちらに乗るかを決める場面で、初めてこの数字が結果を左右するようになった。
距離を測る関数は連立の側にあったので、共通の場所(`model/party.ts`)に移した。
政党どうしの遠近を測る物差しは1つにしておきたい。 連立は組めるのに首班指名では相乗りしない、といった食い違いが起きると、同じ画面の中で理屈が通らなくなる。
※運営者が個人で書いているnoteです。