新党を立ち上げる機能を作ったら、政党データそのものを動的に組み立てることになった
新党を立ち上げる、と決めた瞬間に困った。
政党のデータは data/parties.json に固定8党しか置いていなかった。
候補者モードのキャリアを重ねていくと、政党を移籍したり無所属に転向したりできるようになっていた。次に欲しくなったのは「自分で新党を立ち上げる」という選択肢だった。
だがこのゲームの政党データは data/parties.json に8つ、実在政党データセットに別の8つが、ビルド時に読み込まれる固定の配列として置かれているだけだった。プレイヤーが新しく作った党を、その配列にどう割り込ませるかが最初の壁だった。
候補者の自動生成は、政党データさえあれば動く
選挙区ごとの候補者名簿や比例名簿を組み立てる処理を読み直すと、どちらも「今読み込まれている政党の一覧」を総当たりしているだけだと分かった。政党ごとの擁立方針(どれだけの区に候補を立てるか)や支持率モデルさえ渡してやれば、あとは既存のエンジンがそのまま全国規模の候補者・比例名簿を自動生成してくれる。
つまり「新党を立ち上げる」機能に必要なのは、専用のシミュレーションコードではなく、もっともらしい政党データを1つ組み立てて、その一覧に混ぜ込む仕組みだけだった。政党データは、プレイヤー自身のパラメーター(知名度・地盤・党内影響力など)から機械的に導いた。無名の1人政党として、既存8党の最小値よりさらに小さい規模から始まる。
「混ぜ込む」範囲をどこまで広げるか
次に迷ったのは、この新党をどこまで「本物」として扱うかだった。data/parties.json そのものを書き換えれば、選挙戦モードにも一発勝負にも新党が登場するようになる。だがそこまで手を広げると、プレイヤーが触っていない別モードにまで影響が漏れ、思わぬ副作用を生みかねない。
結局、政党の一覧を返す関数に「実行時にだけ継ぎ足す一時リスト」を持たせ、候補者モードに入るタイミングでだけそこへ差し込む形にした。元データ自体は書き換えない。選挙戦モードや一発勝負には一切影響しない、候補者モードの中だけで完結する新党にした。
政党要件という、定義されていたのに使われていなかった値
実装が一段落してから見返すと、政党の型には qualifiedAsPoliticalParty(政党要件を満たすか)というフィールドが最初から定義されていた。だがどこからも参照されておらず、既存8党は全部trueが振られているだけの、宣言だけの値だった。
公職選挙法86条の2は、国会議員5人以上か、直近の国政選挙で得票率2%以上のどちらかを満たさないと、政党として比例代表に名簿を出せないと定めている。結党したばかりの新党はどちらも満たさない。ここでこの値を初めて実際のロジックに繋いだ——満たすまでは比例代表単独・重複立候補を選べないようにした。
そのままでは「結党した瞬間から一生比例に出られない」だけの制約になってしまうので、党所属議員を1人ずつ増やす「同志を集める」という手と、行動とは別枠でまれに賛同者が自発的に現れる仕組みを添えた。5人集まれば政党要件を満たし、比例代表への道が開ける。定義されただけで眠っていた値に、ようやく出番ができた。
※運営者が個人で書いているnoteです。