リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: 合体ドロップ
ランキング「今日」タブが0件のとき、次の順位まであと何点表示でJSエラーの恐れ
1. 不具合の内容:
v1.36.0で追加された「今日タブ限定で次の順位まで必要な点数を表示する」機能で、選択中モードの今日のランキングが0件(まだ誰もスコア未送信、または該当モードが日替わりでリセット直後)の場合に、1位のスコアを参照する処理が未定義値を参照してJavaScriptエラーになる、または「NaN点」「undefined点」のような不正な表示になる懸念がある。
2. 根拠・発生しそうな条件:
- schema.sqlのサンプルデータはvegetableモードにしか無く、animal/bird/fish/planetモードは日替わりランキングが長期間0件になりうる。
- 既存の実装済み機能(no_data文言など)は「今日のスコアはまだありません」表示を持っており、0件ケースが十分ありうることは明らか。
- v1.36.0のchangelogには「選択中モードのlocalStorage自己ベストと、既存の今日ランキング結果をブラウザ側で比較して表示」とあるが、比較対象となる今日ランキング配列が空の場合の分岐について言及がなく、直近実装(リリースノート1件のみ)であるため未検証の可能性が高い。
- 今日のランキングが0件の状態で自己ベストがある場合、「次の順位まであと何点」を計算しようとして配列の先頭要素(1位のスコア)や末尾要素(最下位のスコア)にアクセスし、未定義プロパティの参照でエラーが発生する、または計算結果がNaNになり不自然な文字列が表示される可能性が高い。
- 同じscriptブロック内で処理が例外停止すると、既存の自己ベスト表示・ハイライト・自動スクロールなど他の描画処理にも影響が及ぶ恐れがある。
3. 期待動作:
- 今日のランキングが0件のときは、次の順位までの表示欄を非表示にするか「あと1位です(まだ誰もいません)」のような安全な文言にフォールバックし、JSエラーを発生させない。
- 自己ベストがあっても比較対象のランキングが空の場合は「トップ達成メッセージ」も出さない(または「まだ誰もいないので登録すれば1位です」等の文言にする)。
- 他の既存表示(自己ベスト欄、ハイライト、自動スクロール等)がこの機能のエラーによって巻き込まれて壊れない。
4. 修正方針:
- 「次の順位まで」計算処理の先頭で、今日のランキング配列の長さが0かどうかを判定し、0件なら専用の空表示分岐(または非表示)にして早期returnする。
- 1位スコア・自己ベストより上位のスコアなど配列アクセスを行う箇所はoptional chainingやlengthチェックを入れ、undefinedアクセスを防ぐ。
- 該当処理をtry/catchで囲むか、他の描画処理と依存しないよう関数を分離し、失敗しても既存のランキング表示・自己ベスト表示・ハイライト機能が継続動作するようにする。
- 実装後、動物/鳥/魚/惑星モードなど今日のランキングが0件の状態で開いて確認するテストケースを追加する。
v1.36.0で追加された「今日タブ限定で次の順位まで必要な点数を表示する」機能で、選択中モードの今日のランキングが0件(まだ誰もスコア未送信、または該当モードが日替わりでリセット直後)の場合に、1位のスコアを参照する処理が未定義値を参照してJavaScriptエラーになる、または「NaN点」「undefined点」のような不正な表示になる懸念がある。
2. 根拠・発生しそうな条件:
- schema.sqlのサンプルデータはvegetableモードにしか無く、animal/bird/fish/planetモードは日替わりランキングが長期間0件になりうる。
- 既存の実装済み機能(no_data文言など)は「今日のスコアはまだありません」表示を持っており、0件ケースが十分ありうることは明らか。
- v1.36.0のchangelogには「選択中モードのlocalStorage自己ベストと、既存の今日ランキング結果をブラウザ側で比較して表示」とあるが、比較対象となる今日ランキング配列が空の場合の分岐について言及がなく、直近実装(リリースノート1件のみ)であるため未検証の可能性が高い。
- 今日のランキングが0件の状態で自己ベストがある場合、「次の順位まであと何点」を計算しようとして配列の先頭要素(1位のスコア)や末尾要素(最下位のスコア)にアクセスし、未定義プロパティの参照でエラーが発生する、または計算結果がNaNになり不自然な文字列が表示される可能性が高い。
- 同じscriptブロック内で処理が例外停止すると、既存の自己ベスト表示・ハイライト・自動スクロールなど他の描画処理にも影響が及ぶ恐れがある。
3. 期待動作:
- 今日のランキングが0件のときは、次の順位までの表示欄を非表示にするか「あと1位です(まだ誰もいません)」のような安全な文言にフォールバックし、JSエラーを発生させない。
- 自己ベストがあっても比較対象のランキングが空の場合は「トップ達成メッセージ」も出さない(または「まだ誰もいないので登録すれば1位です」等の文言にする)。
- 他の既存表示(自己ベスト欄、ハイライト、自動スクロール等)がこの機能のエラーによって巻き込まれて壊れない。
4. 修正方針:
- 「次の順位まで」計算処理の先頭で、今日のランキング配列の長さが0かどうかを判定し、0件なら専用の空表示分岐(または非表示)にして早期returnする。
- 1位スコア・自己ベストより上位のスコアなど配列アクセスを行う箇所はoptional chainingやlengthチェックを入れ、undefinedアクセスを防ぐ。
- 該当処理をtry/catchで囲むか、他の描画処理と依存しないよう関数を分離し、失敗しても既存のランキング表示・自己ベスト表示・ハイライト機能が継続動作するようにする。
- 実装後、動物/鳥/魚/惑星モードなど今日のランキングが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