Skip to content

ランクとスキルツリーの不具合修正 #128

@Inlet-back

Description

@Inlet-back

ランク・スキルツリー同期問題 調査レポート

概要

  • 現象1: 自分のGitHubアカウントのみランク4、他はランク0になる
  • 現象2: ローカルではスキルツリーのクリア済みが反映されるが、リモートでは反映されない
  • 一見別々だが、モックAPIやテストDB初期値の影響で「本来動かない機能が動いて見えている」可能性が高い

調査結果

1. モックAPIの影響

  • frontend/src/features/grades/api/mock.ts
    • getGradeStatsは固定値(rank: 5, category: "web")を返す。実API未接続時は常に同じ値。
    • バッジも固定配列を返す。
  • frontend/src/features/grades/components/GradesContainer.tsx
    • getGradeStatsgetUserBadgesをPromise.allで取得。モックAPIが優先されている場合、全ユーザー同じ値になる。
  • frontend/src/features/dashboard/components/DashboardContainer.tsx
    • fetchUserDashboardgetCurrentUserの切り替えが進行中。モックAPIが残っている場合、実データと同期しない。

2. テストDB初期値の影響

  • backend/tests/test_core/test_rank.py
    • ランク計算は経験値ベース。テストDBのユーザー初期値がrank=0で作成される。
  • backend/app/api/endpoints/users.py
    • get_my_grade_statsはcurrent_user.rankを返す。DB初期値が0なら全員0になる。
  • backend/app/services/skill_tree_service.py
    • スキルツリー生成・クリア状態はDBのSkillTree/QuestProgressに依存。テストDBに初期値が入っている場合、ローカルでのみ反映される。

3. スキルツリー同期処理の実装状況

  • backend/app/services/mock_ai_service.py
    • モックデータ(completed: True)が含まれており、ローカルでのみクリア済みが反映される。
  • backend/app/services/skill_tree_service.py
    • 実際の同期処理はDBとLLMを組み合わせているが、テストやモック環境では本番と異なる挙動。

4. 根本原因まとめ

  • モックAPIやテストDB初期値が残っている場合、実装が未完成でも「動いて見える」状態になる
  • ローカル環境ではモックやテストDBの値が反映されるが、リモート(本番)では初期値や実データが異なるため同期されない
  • ランクやスキルツリーのクリア状態は「モックAPI→実API」切り替え時に注意が必要

Issue化ポイント

  • モックAPIやテストDB初期値の影響で本来動かない機能が動いて見えている
  • ランク計算・スキルツリー同期処理の実装とテストDB初期値の整合性を確認する必要あり
  • ローカルとリモートで挙動が異なる場合、モックAPI/テストDB/実APIの切り替えを明示する
  • 本番環境で「ランク0」「クリア済み未反映」などの現象が出る場合、初期値や同期処理の見直しが必要

推奨アクション

  1. モックAPI/テストDB初期値の整理
  2. 実APIへの切り替え時に初期値・同期処理を再検証
  3. ローカルとリモートの挙動差異をテストで検証
  4. Issueとして「モックAPI/テストDB初期値による見かけ上の動作」問題を明記

参考コード断片

  • frontend/src/features/grades/api/mock.ts
  • frontend/src/features/grades/components/GradesContainer.tsx
  • backend/app/services/mock_ai_service.py
  • backend/app/services/skill_tree_service.py
  • backend/app/api/endpoints/users.py
  • backend/tests/test_core/test_rank.py

調査担当: Copilot

(このレポートをIssueに添付してください)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions