リクエスト詳細
🐛 バグ報告
対応完了
対象アプリ: StudyNova(スタディノヴァ)
achievements.php で $progress['current_correct_streak'] が未定義キー参照になる不具合
## 1. 不具合の内容
`pages/achievements.php` の以下の行で、`$progress` 配列に存在しないキー `current_correct_streak` を参照しています:
```php
<div class="value"><?= (int)$progress['current_correct_streak'] ?> 問</div>
```
`sn_user_progress` テーブルの定義(schema.sql)および `sn_refresh_user_progress()` が返す配列には `best_correct_streak` は存在しますが、`current_correct_streak` というカラム/キーは定義されていません。PHP 8.x では `Undefined array key` の Warning が発生し、値は常に `0` と表示されます。PHP 7.4 でも Notice が出力され、エラーログが汚染されます。
## 2. 根拠・発生しそうな条件
- `schema.sql` の `sn_user_progress` テーブル定義には `current_correct_streak` カラムが存在せず、`best_correct_streak` のみが定義されている。
- `achievements.php` では同じブロック内で `$progress['best_correct_streak']` を「最長」として正しく参照しているが、「現在の連続正解数」として `current_correct_streak` を参照している箇所が誤りと推測される。
- ゲーミフィケーションの仕様上「現在の連続正解数」はセッション/一時的な値であり、DBに永続化されていない可能性が高い。あるいはカラム名が `current_correct_streak` ではなく別名(例: `correct_streak` や DBに持たず計算値)である可能性がある。
- 全ログインユーザーが実績ページを開くたびに毎回発生する。
## 3. 期待動作
「連続正解」カードに現在の連続正解数が正しく表示される。エラーログに Warning/Notice が出ない。
## 4. 修正方針
**方針A(DBにカラムを追加する場合):**
`sn_user_progress` テーブルに `current_correct_streak SMALLINT UNSIGNED NOT NULL DEFAULT 0` カラムを追加し、解答処理(`sn_record_attempt()` 相当)で正解時にインクリメント・不正解時にリセットする。schema.sql の MIGRATION コメントにも ALTER TABLE を追記して既存環境でも自動適用されるようにする。
**方針B(カラム名の修正のみで対処する場合):**
DBに現在の連続正解数を持つ設計でない場合、`achievements.php` の該当行を以下のように修正する:
```php
// 修正前
<div class="value"><?= (int)$progress['current_correct_streak'] ?> 問</div>
// 修正後(キーが存在しない場合は 0 にフォールバック)
<div class="value"><?= (int)($progress['current_correct_streak'] ?? 0) ?> 問</div>
```
あわせて、`sn_refresh_user_progress()` の戻り値に `current_correct_streak` を含める(セッションや直近の解答履歴から動的に計算して付与する)対応を推奨。
最終的には方針Aで永続化するのが望ましいが、まず方針Bの `?? 0` フォールバックを当て、Warning を止めることを優先する。
`pages/achievements.php` の以下の行で、`$progress` 配列に存在しないキー `current_correct_streak` を参照しています:
```php
<div class="value"><?= (int)$progress['current_correct_streak'] ?> 問</div>
```
`sn_user_progress` テーブルの定義(schema.sql)および `sn_refresh_user_progress()` が返す配列には `best_correct_streak` は存在しますが、`current_correct_streak` というカラム/キーは定義されていません。PHP 8.x では `Undefined array key` の Warning が発生し、値は常に `0` と表示されます。PHP 7.4 でも Notice が出力され、エラーログが汚染されます。
## 2. 根拠・発生しそうな条件
- `schema.sql` の `sn_user_progress` テーブル定義には `current_correct_streak` カラムが存在せず、`best_correct_streak` のみが定義されている。
- `achievements.php` では同じブロック内で `$progress['best_correct_streak']` を「最長」として正しく参照しているが、「現在の連続正解数」として `current_correct_streak` を参照している箇所が誤りと推測される。
- ゲーミフィケーションの仕様上「現在の連続正解数」はセッション/一時的な値であり、DBに永続化されていない可能性が高い。あるいはカラム名が `current_correct_streak` ではなく別名(例: `correct_streak` や DBに持たず計算値)である可能性がある。
- 全ログインユーザーが実績ページを開くたびに毎回発生する。
## 3. 期待動作
「連続正解」カードに現在の連続正解数が正しく表示される。エラーログに Warning/Notice が出ない。
## 4. 修正方針
**方針A(DBにカラムを追加する場合):**
`sn_user_progress` テーブルに `current_correct_streak SMALLINT UNSIGNED NOT NULL DEFAULT 0` カラムを追加し、解答処理(`sn_record_attempt()` 相当)で正解時にインクリメント・不正解時にリセットする。schema.sql の MIGRATION コメントにも ALTER TABLE を追記して既存環境でも自動適用されるようにする。
**方針B(カラム名の修正のみで対処する場合):**
DBに現在の連続正解数を持つ設計でない場合、`achievements.php` の該当行を以下のように修正する:
```php
// 修正前
<div class="value"><?= (int)$progress['current_correct_streak'] ?> 問</div>
// 修正後(キーが存在しない場合は 0 にフォールバック)
<div class="value"><?= (int)($progress['current_correct_streak'] ?? 0) ?> 問</div>
```
あわせて、`sn_refresh_user_progress()` の戻り値に `current_correct_streak` を含める(セッションや直近の解答履歴から動的に計算して付与する)対応を推奨。
最終的には方針Aで永続化するのが望ましいが、まず方針Bの `?? 0` フォールバックを当て、Warning を止めることを優先する。
💬 返信 (3)
🛠 開発を開始しました (バグ修正 (studynova))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「StudyNova(スタディノヴァ)」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=studynova
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/studynova/
ご利用ありがとうございます!
ご要望いただいた「StudyNova(スタディノヴァ)」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=studynova
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/studynova/
ご利用ありがとうございます!
Echo
Iris