【 マイレース開発記録(12)】detect_zoneの二重定義事件                                     

マイレース開発の中盤、ゾーン判定(追い風 / 慎重 / 楽しさ重視 / 整える)がだいぶ形になってきた頃、
「見た目は動くのに、結果が腑に落ちない」状態に遭遇しました。

  • ロジック上は追い風っぽいのに、結果が整えるゾーンになる
  • 何度試しても、あるカテゴリだけ違和感がある
  • エラーは出ない。落ちない。静かに“変”な結果が出る

いちばん厄介なタイプです。

そしてこの不具合の正体が、タイトル通り――

detect_zone が二重定義されていた事件

でした。

マイレースでは、各カテゴリ(仕事/金運/恋愛/健康/勝負)について、

  • 速い(fast)かどうか
  • 跳ねる(jump)かどうか

この2つの組み合わせでゾーンを決めています。

  • fast × jump → 追い風ゾーン
  • fast × not jump → 慎重ゾーン
  • not fast × jump → 楽しさ重視ゾーン
  • not fast × not jump → 整えるゾーン

このゾーンは、UIの表示にも、メッセージにも影響します。
つまり、ここが狂うと「占いとしての意味」が崩れます。

原因はシンプルでした。

app.py の中で、同じ名前の関数が 2回定義されていたのです。

def detect_zone(is_fast: bool, is_jump: bool) -> str:
...

Pythonは「後に書かれた定義」が勝ちます。
つまり、上の detect_zone は存在しないのと同じになります。

怖いのはここで、二重定義していても、

  • エラーは出ません
  • 警告も出ません
  • ただ静かにロジックが変わります

“気づけない”のが問題でした。

この手のバグでつらいのは、こういう状態に入ることです。

  • detect_zone を直した
  • 結果が変わらない
  • もう一度直した
  • まだ変わらない
  • 「キャッシュ?」「反映?」と疑い始める
  • でも実は別の detect_zone が動いている

私はまさにこの状態でした。

発達特性もあって、「一度こうだと思ったら」そこに意識が固定されやすく、
“同じ名前がもう一つある”という発想が、すぐには出ませんでした。

ここでAIに相談したとき、助かったのはコードそのものではなく、

「同名関数が別の場所で定義されていませんか?」
「ファイル内検索で detect_zoneを探してください」

という提案でした。

私は、実装の整合性や条件式のほうを疑っていたので、
“構造の問題”に目が向いていなかったんです。

AIは「ありがちな落とし穴」を候補として出してくれて、私の視野を一段広げてくれました。

やったことは、派手ではありません。

  • detect_zone を 1つだけ残す
  • 他は削除
  • 以後は「判定ロジックはここ」と決める

そして、今後同じ事故を防ぐために、

  • 同じ役割の関数名を増やさない
  • “コアロジック”は1箇所に集める
  • 必要ならコメントで「ここが正」と書く

というルールを、自分の中で決めました。

今回の事件でいちばん大きかった学びは、

「エラーが出ないバグほど、整理が効く」

ということでした。

  • 関数をどこに置くか
  • 名前をどう扱うか
  • “正の定義”をどこに置くか

これは技術力というより、開発の作法に近いものですが、実務ではこういう“静かな地雷”を踏まないことが本当に大事だと思っています。

この開発ブログでは、うまくいったことだけでなく、“自分が詰まりやすいパターン”も残したいと思っています。

私の場合、

  • 目の前の条件式に集中しすぎて、構造を見落とす
  • 反映されない=キャッシュだと思い込みやすい
  • 同じ箇所を延々いじって消耗する

こういう癖があります。

AIは、答えをくれるというより、
「別の可能性」を提示して、視点を切り替える補助輪になってくれます。

結果として、消耗の連鎖を止められる場面が増えました。

次回は、ゾーン判定と並んで苦戦した――

【マイレース開発記録(12)】finish_bonus調整地獄
(ジャンプ補正が“楽しさ”になるまで)

を書いていきます。

「数式が合っているのに、体感が合わない」あの沼の話です・・・

\ 最新情報をチェック /

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です