-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
ランク・スキルツリー同期問題 調査レポート
概要
- 現象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
getGradeStatsとgetUserBadgesをPromise.allで取得。モックAPIが優先されている場合、全ユーザー同じ値になる。
- frontend/src/features/dashboard/components/DashboardContainer.tsx
fetchUserDashboardやgetCurrentUserの切り替えが進行中。モック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」「クリア済み未反映」などの現象が出る場合、初期値や同期処理の見直しが必要
推奨アクション
- モックAPI/テストDB初期値の整理
- 実APIへの切り替え時に初期値・同期処理を再検証
- ローカルとリモートの挙動差異をテストで検証
- 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に添付してください)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels