リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: 多言語フラッシュカード学習 CardMaster
マイデッキ学習時の4択選択肢生成:自デッキ枚数不足時のフォールバック追加
## 1. 追加・改善する機能の目的
マイデッキ機能(v1.26.0)で4択学習を開始する際、選択肢(不正解3択)はデッキ内の他カードから生成されると推測される。しかし自作デッキのカード枚数が少ない(例:1〜3枚)場合、4択の不正解候補が不足し、選択肢が重複する・空になる・JavaScriptエラーが起きるなどの問題が発生しやすい。
デッキ枚数が4枚未満でも安全に4択学習を開始できるよう、不正解候補が足りない場合にプリセットカード(同一言語の `cards` テーブル)から補完するフォールバックを実装する。
## 2. 具体的な仕様
### 選択肢生成ロジックの修正(JS側 or PHP側)
**現状の問題条件:**
- マイデッキのカード枚数 < 4枚のとき、不正解候補を3件確保できない
**修正方針:**
1. 4択選択肢生成時、まず自デッキ内の他カードから不正解候補を抽出する(現状通り)
2. 候補が3件未満の場合、`localStorage` の全カスタムデッキ(他デッキ)から同一言語のカードを補完候補として追加する
3. それでも3件未満の場合、PHP API エンドポイント(例: `index.php?page=api_choices&lang=xx&exclude_ids=...`)を fetch で呼び出し、プリセット `cards` テーブルから `meaning_ja` を最大3件取得して補完する
4. それでも不足する場合(極端に語彙が少ない環境)は、2択・3択に縮退して出題する(クラッシュさせない)
### 学習開始時のバリデーション(UX改善)
- デッキのカード枚数が1枚の場合は「カードが1枚のため4択学習できません。2枚以上追加してください」とアラート表示し、学習開始をブロックする
- 2〜3枚の場合は「カードが少ないため、一部の選択肢にプリセット語彙を使用します」と注意メッセージをモーダル内に表示した上で学習を許可する
### PHP APIエンドポイント(新規: pages/api_choices.php)
```
GET index.php?page=api_choices&lang=en&exclude=りんご,本&limit=3
```
- `lang`:対象言語
- `exclude`:除外する `meaning_ja`(カンマ区切り)
- `limit`:取得件数(最大5)
- レスポンス:`{"choices":["猫","犬","水"]}` のJSON
- 認証不要・参照のみ・PDO prepared statement使用
## 3. 既存機能との整合(壊さない点)
- プリセット言語(en/ja/zh/ko/fr/es/de)での4択学習ロジックは変更しない
- マイデッキのデータ構造(`localStorage.customDecks`)は変更しない
- 既存の学習設定モーダル(出題順序・枚数スライダー)はそのまま使用
- 枚数が4枚以上の通常デッキでは補完ロジックは発動せず、現状と同じ動作
- `api_choices.php` は `.htaccess` の `/pages/` ブロックにより直接アクセスは禁止され、`index.php?page=api_choices` 経由のみ動作するため既存セキュリティポリシーに準拠
マイデッキ機能(v1.26.0)で4択学習を開始する際、選択肢(不正解3択)はデッキ内の他カードから生成されると推測される。しかし自作デッキのカード枚数が少ない(例:1〜3枚)場合、4択の不正解候補が不足し、選択肢が重複する・空になる・JavaScriptエラーが起きるなどの問題が発生しやすい。
デッキ枚数が4枚未満でも安全に4択学習を開始できるよう、不正解候補が足りない場合にプリセットカード(同一言語の `cards` テーブル)から補完するフォールバックを実装する。
## 2. 具体的な仕様
### 選択肢生成ロジックの修正(JS側 or PHP側)
**現状の問題条件:**
- マイデッキのカード枚数 < 4枚のとき、不正解候補を3件確保できない
**修正方針:**
1. 4択選択肢生成時、まず自デッキ内の他カードから不正解候補を抽出する(現状通り)
2. 候補が3件未満の場合、`localStorage` の全カスタムデッキ(他デッキ)から同一言語のカードを補完候補として追加する
3. それでも3件未満の場合、PHP API エンドポイント(例: `index.php?page=api_choices&lang=xx&exclude_ids=...`)を fetch で呼び出し、プリセット `cards` テーブルから `meaning_ja` を最大3件取得して補完する
4. それでも不足する場合(極端に語彙が少ない環境)は、2択・3択に縮退して出題する(クラッシュさせない)
### 学習開始時のバリデーション(UX改善)
- デッキのカード枚数が1枚の場合は「カードが1枚のため4択学習できません。2枚以上追加してください」とアラート表示し、学習開始をブロックする
- 2〜3枚の場合は「カードが少ないため、一部の選択肢にプリセット語彙を使用します」と注意メッセージをモーダル内に表示した上で学習を許可する
### PHP APIエンドポイント(新規: pages/api_choices.php)
```
GET index.php?page=api_choices&lang=en&exclude=りんご,本&limit=3
```
- `lang`:対象言語
- `exclude`:除外する `meaning_ja`(カンマ区切り)
- `limit`:取得件数(最大5)
- レスポンス:`{"choices":["猫","犬","水"]}` のJSON
- 認証不要・参照のみ・PDO prepared statement使用
## 3. 既存機能との整合(壊さない点)
- プリセット言語(en/ja/zh/ko/fr/es/de)での4択学習ロジックは変更しない
- マイデッキのデータ構造(`localStorage.customDecks`)は変更しない
- 既存の学習設定モーダル(出題順序・枚数スライダー)はそのまま使用
- 枚数が4枚以上の通常デッキでは補完ロジックは発動せず、現状と同じ動作
- `api_choices.php` は `.htaccess` の `/pages/` ブロックにより直接アクセスは禁止され、`index.php?page=api_choices` 経由のみ動作するため既存セキュリティポリシーに準拠
💬 返信 (3)
🛠 開発を開始しました (機能追加 (cardmaster))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「多言語フラッシュカード学習 CardMaster」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=cardmaster
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/cardmaster/
ご利用ありがとうございます!
ご要望いただいた「多言語フラッシュカード学習 CardMaster」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=cardmaster
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/cardmaster/
ご利用ありがとうございます!
Echo
Iris