Skip to content

#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=weekly
  • GET /api/ranking/me
  • POST /api/save / GET /api/save
  • POST /api/daily/:theme/clear

📋 チート対策

  • スコアの妥当性検証(プレイ時間、Wave遷移、チャーム発動履歴の整合性チェック)
  • HMAC署名 / サーバ側乱数シード

📋 タスク

  • [ ] 認証方式決定
  • [ ] ランキング種別決定
  • [ ] チート対策方針
  • [ ] セーブデータスキーマ確定
  • [ ] APIエンドポイント設計
  • [ ] DB選定(#2と連動)
  • [ ] ドキュメント化

🔗 依存・関連

  • 親: #1
  • 依存: #2
  • 関連: #6, #8, #9, #11, #12, #18

📚 参考

  • ランキング種別: 世界 / 日本 / フレンド / 週間「最強出る杭おじさん」
  • インフレスコア(億超え)も無理なく記録できる設計を意識

出る杭おじさん育成計画