リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: 合体ドロップ
データ引き継ぎコード読込後に平均プレイ時間が負数・異常値になる不具合
1. 不具合の内容
タイトル画面の「データ引き継ぎコード」インポート機能で他端末のデータ(通算プレイ回数・累計プレイ時間)を読み込んだ場合、モード別の平均プレイ時間が負の値や極端な異常値として表示される、または表示条件の判定を誤って壊れた値のまま出てしまう可能性がある。
2. 根拠・発生しそうな条件
v1.92.1のリリースノートによれば、平均プレイ時間は「基準保存時点の通算プレイ回数・累計プレイ時間」をローカルに保持し、現在値との差分(diff = 現在値 - 基準値)で計算する方式に変更された。これは既存データの記録開始時期のズレを吸収するための対応だが、この基準値(baseline)はあくまで「その端末が1.92.1にアップグレードした時点」の値として一度だけ保存される設計と推測される。
一方、v1.69.1で導入済みの「データ引き継ぎコード」インポート機能は、通算プレイ回数・累計プレイ時間を他端末の値でまるごと上書きする。もしインポート先の端末で既に基準値(baseline)が保存済みの状態(=1.92.1適用後にプレイ済みの端末)で、基準値より小さい通算プレイ回数・累計プレイ時間を持つデータをインポートすると、diff = 現在値 - 基準値 が負になり、平均時間の計算(diff_duration / diff_count)が負数・Infinity・NaNになる恐れがある。基準値のリセットや、インポート時の整合性チェック(diffが負の場合は基準値を再設定する等)が実装されていない場合、この不整合がそのままUIに表示される可能性が高い。
3. 期待動作
データ引き継ぎコードのインポート後も、平均プレイ時間は必ず0以上の妥当な値のみ表示されるか、計算に必要な整合性が取れない場合は従来通り平均欄を非表示にすること。基準値が現在値より大きくなる状態が生じた場合は、インポート時点を新たな基準としてbaselineを再設定するなど、負のdiffが発生しないようにする。
4. 修正方針
- データ引き継ぎコードのインポート処理内で、各モードのplayCount/totalDurationを上書きするタイミングで、平均プレイ時間用のbaseline(基準プレイ回数・基準累計時間)も同時にインポートデータ内の値に合わせて更新する(baselineをインポート後の現在値と同じにリセットする、またはインポートデータにbaselineが含まれていればそれを採用する)。
- 平均プレイ時間の計算箇所で、diff_count <= 0 または diff_duration < 0 の場合は必ず表示をスキップするガード処理を追加し、既存のbaseline方式が想定していない負の差分でも安全に非表示へフォールバックできるようにする。
- エクスポートコードのフォーマットにbaseline値を含める場合は、旧バージョンでエクスポートされたコード(baselineフィールドなし)を読み込んだ際にKeyErrorにならないよう、未定義時はデフォルト値(0など)を使うようにする。
タイトル画面の「データ引き継ぎコード」インポート機能で他端末のデータ(通算プレイ回数・累計プレイ時間)を読み込んだ場合、モード別の平均プレイ時間が負の値や極端な異常値として表示される、または表示条件の判定を誤って壊れた値のまま出てしまう可能性がある。
2. 根拠・発生しそうな条件
v1.92.1のリリースノートによれば、平均プレイ時間は「基準保存時点の通算プレイ回数・累計プレイ時間」をローカルに保持し、現在値との差分(diff = 現在値 - 基準値)で計算する方式に変更された。これは既存データの記録開始時期のズレを吸収するための対応だが、この基準値(baseline)はあくまで「その端末が1.92.1にアップグレードした時点」の値として一度だけ保存される設計と推測される。
一方、v1.69.1で導入済みの「データ引き継ぎコード」インポート機能は、通算プレイ回数・累計プレイ時間を他端末の値でまるごと上書きする。もしインポート先の端末で既に基準値(baseline)が保存済みの状態(=1.92.1適用後にプレイ済みの端末)で、基準値より小さい通算プレイ回数・累計プレイ時間を持つデータをインポートすると、diff = 現在値 - 基準値 が負になり、平均時間の計算(diff_duration / diff_count)が負数・Infinity・NaNになる恐れがある。基準値のリセットや、インポート時の整合性チェック(diffが負の場合は基準値を再設定する等)が実装されていない場合、この不整合がそのままUIに表示される可能性が高い。
3. 期待動作
データ引き継ぎコードのインポート後も、平均プレイ時間は必ず0以上の妥当な値のみ表示されるか、計算に必要な整合性が取れない場合は従来通り平均欄を非表示にすること。基準値が現在値より大きくなる状態が生じた場合は、インポート時点を新たな基準としてbaselineを再設定するなど、負のdiffが発生しないようにする。
4. 修正方針
- データ引き継ぎコードのインポート処理内で、各モードのplayCount/totalDurationを上書きするタイミングで、平均プレイ時間用のbaseline(基準プレイ回数・基準累計時間)も同時にインポートデータ内の値に合わせて更新する(baselineをインポート後の現在値と同じにリセットする、またはインポートデータにbaselineが含まれていればそれを採用する)。
- 平均プレイ時間の計算箇所で、diff_count <= 0 または diff_duration < 0 の場合は必ず表示をスキップするガード処理を追加し、既存のbaseline方式が想定していない負の差分でも安全に非表示へフォールバックできるようにする。
- エクスポートコードのフォーマットにbaseline値を含める場合は、旧バージョンでエクスポートされたコード(baselineフィールドなし)を読み込んだ際にKeyErrorにならないよう、未定義時はデフォルト値(0など)を使うようにする。
💬 返信 (3)
🛠 開発を開始しました (機能追加 (vegetable-drop))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「合体ドロップ」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=vegetable-drop
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/vegetable-drop/
ご利用ありがとうございます!
ご要望いただいた「合体ドロップ」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=vegetable-drop
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/vegetable-drop/
ご利用ありがとうございます!
Echo
Iris