#20 ランキング / データ永続化
🟧 ステータス: 未着手 対応Issue: #20 Issue内容を本ページにコピーした初期スタブ。設計確定後にこのページを正式版で置き換える。
🎯 概要
ランキング機能とプレイデータ永続化(セーブデータ)の仕様を策定する。世界/日本/フレンド/週間ランキング、認証方式、API設計、保存対象データを定義する。
✅ ゴール / 完了条件
- [ ] 認証方式の決定(匿名 / OAuth / メアド)
- [ ] ランキング種別と切替仕様(世界/日本/フレンド/週間/デイリー)
- [ ] チート対策方針
- [ ] セーブデータスキーマ
- [ ] ハイスコア
- [ ] 図鑑進捗
- [ ] チャーム所持
- [ ] 知識経験値
- [ ] デイリチャレンジクリア状況
- [ ] 設定(音量、ボイスON/OFF等)
- [ ] APIエンドポイント設計
- [ ] データの保存先(Cloudflare D1 / Supabase / KV)
- [ ] バックアップ・移行戦略
- [ ]
docs/design/persistence-and-ranking.md作成
📦 アウトプット
docs/design/persistence-and-ranking.md- API仕様(OpenAPI or マークダウン表)
- スキーマ定義(SQL or NoSQL)
📋 ランキング仕様(たたき台)
| 種別 | 集計 | 期間 |
|---|---|---|
| 世界 | 全員 | 通算 / 週間 |
| 日本 | 国別 | 通算 / 週間 |
| フレンド | 招待制 | 通算 |
| デイリー | 全員 | 当日 |
📋 セーブデータスキーマ(たたき台)
json
{
"user_id": "...",
"high_score": 1234567890,
"lifetime_pv": 9876543210,
"encyclopedia_progress": ["rag_prompt_injection", ...],
"owned_charms": [
{ "id": "charm_copyright_killer", "rarity": "gold", "count": 3 }
],
"knowledge_xp": 4500,
"daily_clears": ["2026-05-09:rag_security", ...],
"settings": { "bgm": 0.7, "voice": true, ... }
}📋 API設計(たたき台)
POST /api/score- スコア投稿GET /api/ranking?scope=world&period=weeklyGET /api/ranking/mePOST /api/save/GET /api/savePOST /api/daily/:theme/clear
📋 チート対策
- スコアの妥当性検証(プレイ時間、Wave遷移、チャーム発動履歴の整合性チェック)
- HMAC署名 / サーバ側乱数シード
📋 タスク
- [ ] 認証方式決定
- [ ] ランキング種別決定
- [ ] チート対策方針
- [ ] セーブデータスキーマ確定
- [ ] APIエンドポイント設計
- [ ] DB選定(#2と連動)
- [ ] ドキュメント化
🔗 依存・関連
- 親: #1
- 依存: #2
- 関連: #6, #8, #9, #11, #12, #18
📚 参考
- ランキング種別: 世界 / 日本 / フレンド / 週間「最強出る杭おじさん」
- インフレスコア(億超え)も無理なく記録できる設計を意識