【マイレース開発記録(14)】デバッグで救われた瞬間                                    

マイレースの開発では、設計や実装よりも長い時間を費やした工程があります。
それが デバッグ です。

特に Flask API とフロントエンドを接続したあと、「動いているように見えるのに結果が正しくない」という状態が何度も発生しました。

この回では、開発中に印象に残っているデバッグによって問題の原因にたどり着いた場面を記録しておきます。

API /api/calc が動き、JSONも返ってくる。
フロントのレースも動く。

しかし、結果を見ると違和感がありました。

  • 同じ誕生日でも結果が極端に変わる
  • スピード差が不自然
  • レース順位が想定と合わない

エラーは出ません。
処理も止まりません。

つまり 「正常に動いているように見える不具合」 でした。

こういう状態が一番厄介です。

最初にやったことは、とても単純です。

計算途中の値をすべて printで出力する ことでした。

print("birthday:", birthday)
print("target:", target)
print("phases:", phases)
print("speeds:", speeds)
print("finish_times:", finish_times)

これだけで、状況がかなり見えるようになります。

ブラウザではなく、サーバーコンソールのログを読む という作業です。

AIにコードを提案してもらうことはできますが、この「値を追いかける作業」は結局自分が理解しないと進めません。

ログを見ていると、ある問題に気付きました。

speeds の計算が、思っていたより 似た値ばかり だったのです。

原因はこの関数でした。

def speed(natal_lon, transit_lon):
return 1.0 + (1 - angle_diff(natal_lon, transit_lon) / 180) * 0.4

ロジック自体は間違っていません。

しかし
angle_diff の値が想定より偏っていた のです。

ここで初めて「天体位置の差分」を疑うことになりました。

次に出力したのは、天体の経度です。

print("natal:", natal)
print("transit:", transit)

すると、ある問題に気付きました。

出生時刻と計算時刻の扱いです。

birth_dt = datetime(..., tzinfo=JST)
target_dt = datetime(..., 12, 0, tzinfo=JST)

ここで

  • 出生は「実際の時刻」
  • 対象日は「正午固定」

という設計にしていました。

これは意図した仕様ではありますが、
当初はこの影響を十分理解していませんでした。

結果が不自然だった理由は、コードのミスではなく 設計の理解不足 でした。

デバッグを進めることで、

  • phase計算の周期
  • 天体差分
  • finish_bonus の影響

それぞれがどう結果に影響するかを、少しずつ把握できるようになりました。

私は発達特性の影響で、

  • 細部に意識が向きすぎる
  • 全体構造を見失う

ということがあります。

そのため、「どこが問題か分からないバグ」に長時間捕まることがありました。

しかし今回の開発では、

  • ログを出す
  • 状態を一つずつ確認する
  • AIと対話しながら整理する

という手順を取ることで、

思考を分解しながら問題に向き合うことができました。

これは、AIと一緒に開発しているからこそ作れた作業スタイルだと思います。

このプロジェクトで感じたのは、デバッグは単にバグを見つける作業ではないということです。

むしろ

「自分が書いたロジックを理解し直す作業」

に近いと感じました。

今回のケースでも、printによるログ出力を続けたことで

  • 計算フロー
  • 数値の変化
  • ロジックの前提

を改めて整理することができました。

このときのデバッグ経験は、マイレース開発の中でも大きな転機でした。

それまでは

  • エラーが出る
  • 修正する

という受け身の作業が多かったのですが、この頃から

「数値を追って原因を特定する」

という進め方ができるようになってきました。

AIはヒントを出してくれますが、最終的にロジックを理解するのは自分です。

この経験は、その後のフロントエンド実装やUI調整にも大きく役立つことになりました。。

次回からは、
フロントエンド実装のフェーズに入ります。

Canvas描画、アニメーション制御、レスポンシブ対応など、
バックエンドとは違った難しさが続きました。

次の記事では

【マイレース開発記録(15)】canvas描画との戦い

として、ブラウザ上でレースを動かす部分の実装について書いていきます。

\ 最新情報をチェック /

コメントを残す

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