2026.09.23 泊まれる場所4,223 立ち寄りスポット59,693 営業中を確認したキャンプ場1,005 note を読む

「おまかせで進める」機能が、実は何もしていなかった

ボタンを押すと最後まで進む。ログにもちゃんと記録が残る。
だが12日間、ずっと「温存する」しか選んでいなかった。

選挙にGO!をつくる第2回 / 全24回目次

候補者として一つの選挙区を戦う個人モードに、「おまかせで投票日まで進める」というボタンを足した。
毎日打てる手(街頭演説、戸別訪問、後援会づくりなど)の中から、いちばん得票が伸びそうな手を内部でいったん試算してから選ぶ、という機能のつもりだった。

実装は動いた。ボタンを押すと投票日まで進み、行動ログもちゃんと積み上がる。テストも通った。
ところが実際に動かしてみると、12日間・24回ぶんの行動ログが、すべて「体調を整える」——つまり何もしない手だった。資金もまったく減っていない。

複製したつもりが、複製できていなかった

試算のやり方はこうだった。その日打てる手それぞれについて、候補者のプロフィールを複製し、複製のほうに手を適用して、開票シミュレーションにかけて得票シェアを見る。いちばん良かった手を、本番のほうに適用する。

プロフィールの複製自体は問題なくできていた。
だが開票シミュレーションが実際に見ているのは、選挙区の候補者一覧に埋め込まれた候補者オブジェクトのパラメーターのほうだった。そしてそのオブジェクトの中身(知名度や地盤といった数値)は、複製したはずのプロフィールとは別に、最初に出馬したときのプロフィールをそのまま参照していた。

複製したのは「入れ物」で、中の数値はずっと同じ箱を指したままだった。
どの手を試算しても、シミュレーションが見ている数値は変わらない。結果、どの手を選んでも試算スコアは同点になり、配列のいちばん先頭にある「温存する」だけが、律儀に選ばれ続けていた。

気づいたきっかけは、機能とは無関係のバグだった

この不具合そのものには、しばらく気づかなかった。ログを見れば「行動している」ようには見えるし、テストも「何か行動ログが残っている」ことしか確認していなかったからだ。

見つかったのは、まったく別の作業——クラウドセーブの動作確認のために、手作りの壊れたテストデータを読み込ませたときだった。資金の値が壊れて計算不能になった状態で「おまかせ進行」を動かしたら、無限ループになりかけた。原因を追ううちに、そもそも試算が機能していないこと自体に気づいた。

複製するときは、複製した先のオブジェクトを指すよう、参照している側もちゃんと差し替える。当たり前のことだが、埋め込まれた側にまで気が回っていなかった。
直したあとは、ちゃんと街頭演説にも戸別訪問にも予算が使われるようになった。

ゲームを1本作るときの進め方を、noteにまとめています(書いているのは私です)。
noteで読む

まる子パパ

まる子パパ

会社員。受託開発のエンジニアを15年以上続けていて、その前は寿司職人・長距離運転手・農業。 技術ブログは、キャンプの合間に踏んだバグと、AI・Web開発の運用の失敗を書いています。 このサイト自体が、開発に携わっているCMS「コンテナ」の稼働中の実例です。 このサイトについて / 小さな自動化の相談

—

ほかにも書いています

受託・note・スタンプ

※受託の相談とnoteは、運営者が個人で受けている・書いているものです。

技術ブログ一覧へ戻る