|
| 1 | +````skill |
| 2 | +--- |
| 3 | +name: product-spec |
| 4 | +description: Application Specification (User Flow, Rank System, Badge System, Skill Tree) |
| 5 | +--- |
| 6 | +
|
| 7 | +# アプリケーション仕様書 |
| 8 | +
|
| 9 | +## 1. 概要 |
| 10 | +
|
| 11 | +ユーザーの外部サービス活動実績とポートフォリオを元に、現在のエンジニアとしての立ち位置(ランク)を判定し、RPG風の成長要素(スキルツリー・バッジ)と、そこから導き出される「パーソナライズされた演習生成」を提供する。 |
| 12 | +
|
| 13 | +## 2. 画面遷移と主要機能 (UX Flow) |
| 14 | +
|
| 15 | +### 2.1. ログイン / オンボーディング |
| 16 | +
|
| 17 | +1. **Login**: GitHub OAuth または ID入力でログイン。 |
| 18 | +2. **Profile Setup**: |
| 19 | + - 連携情報の入力 (Qiita ID, Connpass ID)。 |
| 20 | + - ポートフォリオ/経歴の入力 (URL または テキスト)。 |
| 21 | + - AIによる初回分析実行。 |
| 22 | +
|
| 23 | +### 2.2. メイン画面 (Dashboard) |
| 24 | +
|
| 25 | +- **Status**: 現在のランク(画像表示)、次のランクまでの目安。 |
| 26 | +- **Skill Tree**: 現在の習得状況と、次に目指すべきノードの可視化。 |
| 27 | +- **Badges**: 獲得したバッジの一覧表示。 |
| 28 | +
|
| 29 | +### 2.3. 演習選択 (Quest Hub) |
| 30 | +
|
| 31 | +- **Document Generation (優先度: 高)**: |
| 32 | + - ユーザーが学びたい技術のドキュメントやテキストを入力。 |
| 33 | + - AIが内容を解析し、ランクに見合ったハンズオン演習を自動生成する。 |
| 34 | +- **Normal Quest (優先度: 低)**: |
| 35 | + - 事前に用意された標準的な演習シナリオ(MVPでは実装しないか、最小限)。 |
| 36 | +
|
| 37 | +### 2.4. 演習実行 (Quest Play) |
| 38 | +
|
| 39 | +- 生成されたハンズオンの手順表示。 |
| 40 | +- クリア後の振り返り、経験値獲得。 |
| 41 | +
|
| 42 | +## 3. 外部連携・入力ソース |
| 43 | +
|
| 44 | +### 3.1. GitHub (必須) |
| 45 | +
|
| 46 | +- **取得方法**: OAuth 2.0 連携 |
| 47 | +- **利用データ**: |
| 48 | + - リポジトリの言語構成、コミット頻度、Star数 |
| 49 | + - READMEの内容(プロジェクトの質) |
| 50 | + - 寄与活動 (Contribution Graph) |
| 51 | +
|
| 52 | +### 3.2. その他サービス・ポートフォリオ |
| 53 | +
|
| 54 | +- **Qiita / Connpass**: ユーザーIDまたはURL入力。 |
| 55 | +- **ポートフォリオ/経歴**: テキスト入力 または URL入力。 |
| 56 | +- **利用方針**: GitHub情報と合わせてAIへの入力プロンプトに含める。 |
| 57 | +
|
| 58 | +## 4. ランク判定ロジック (AI主導) |
| 59 | +
|
| 60 | +### 4.1. 判定基準 |
| 61 | +
|
| 62 | +- **相対評価**: 取得した情報を総合的に分析し、「エンジニア全体の上位何%に位置するか」をAIが推定する。 |
| 63 | +- **ランク分け**: 推定されたパーセンタイルを元に、以下の10段階(植物の成長)にマッピングする。 |
| 64 | + 1. 種子 (初心者/未経験) |
| 65 | + 2. 苗木 |
| 66 | + 3. 若木 |
| 67 | + 4. 巨木 |
| 68 | + 5. 母樹 |
| 69 | + 6. 林 |
| 70 | + 7. 森 |
| 71 | + 8. 霊樹 |
| 72 | + 9. 古樹 |
| 73 | + 10. 世界樹 (Top Tier) |
| 74 | +
|
| 75 | +### 4.2. ランクアップ |
| 76 | +
|
| 77 | +- **MVP段階**: 初回分析時のランク決定のみ実装。 |
| 78 | +- **Future**: ポイント制や特定条件達成によるランクアップ機能。 |
| 79 | +
|
| 80 | +## 5. バッジシステム (Gamification) |
| 81 | +
|
| 82 | +ユーザーの特定の活動実績に基づき、プロフィールに飾れるバッジを付与する。 |
| 83 | +
|
| 84 | +| バッジカテゴリ | 取得条件の目安 (AIまたはルールベース判定) | |
| 85 | +| :--- | :--- | |
| 86 | +| **Commit** | GitHubの総コミット数、またはContributionの濃さ | |
| 87 | +| **Days** | 継続学習日数、またはアプリ利用継続日数 | |
| 88 | +| **Builder** | 作成したアプリの数 (リポジトリ数やポートフォリオ記述から判定) | |
| 89 | +| **Writer** | 技術記事の執筆数 (Qiita/Zenn等の投稿数) | |
| 90 | +| **Seeker** | 本アプリ内での演習(クエスト)完了数・進捗率 | |
| 91 | +
|
| 92 | +## 6. スキルツリー生成ロジック |
| 93 | +
|
| 94 | +### 6.1. ロードマップ生成 |
| 95 | +
|
| 96 | +- ユーザーの現状(ランク)から、次のランクへ進むための「通過点(マイルストーン)」をAIが生成する。 |
| 97 | +- 生成カテゴリ: |
| 98 | + - Web/モバイルアプリ |
| 99 | + - AI |
| 100 | + - セキュリティ |
| 101 | + - ネットワーク/インフラ |
| 102 | + - デザイン |
| 103 | + - ゲーム |
| 104 | +
|
| 105 | +### 6.2. スキル習得判定 |
| 106 | +
|
| 107 | +- 生成された通過点に対し、現状の実績で「既に満たしているか」をAIが判定し、初期状態でクリア済み(チェック付き)にする。 |
| 108 | +- **MVP制限**: その後の活動による自動追従は実装せず、手動更新または再分析とする。 |
| 109 | +
|
| 110 | +## 7. 開発方針 |
| 111 | +
|
| 112 | +### Phase 1 (MVP) |
| 113 | +
|
| 114 | +- **GitHub OAuth実装**: ユーザー認証とリポジトリ情報取得 |
| 115 | +- **ドキュメントからの演習生成**: 通常演習は後回し、ドキュメント入力→AI生成を優先 |
| 116 | +- **一連のフロー構築**: プロフィール入力→AI分析→ランク・ツリー表示 |
| 117 | +- **動くことを優先**: 判定精度よりも「最初から最後まで動く体験」を重視 |
| 118 | +
|
| 119 | +### Future Enhancements |
| 120 | +
|
| 121 | +- 通常演習(Normal Quest)の拡充 |
| 122 | +- リアルタイムランクアップ機能 |
| 123 | +- 自動スキルツリー更新 |
| 124 | +- コミュニティ機能(ランキング、他ユーザーとの比較) |
| 125 | +
|
| 126 | +## 8. データモデル |
| 127 | +
|
| 128 | +### 8.1. User (既存) |
| 129 | +
|
| 130 | +```python |
| 131 | +- id: int |
| 132 | +- username: str |
| 133 | +- level: int (ランクに対応) |
| 134 | +- exp: int (経験値) |
| 135 | +- rank: int (0-9: 種子〜世界樹) |
| 136 | +- skills: JSON (習得済みスキルのリスト) |
| 137 | +- created_at: datetime |
| 138 | +- updated_at: datetime |
| 139 | +``` |
| 140 | +
|
| 141 | +### 8.2. 追加予定モデル |
| 142 | +
|
| 143 | +#### Profile (外部連携情報) |
| 144 | +
|
| 145 | +```python |
| 146 | +- user_id: FK |
| 147 | +- github_username: str |
| 148 | +- qiita_id: str (optional) |
| 149 | +- connpass_id: str (optional) |
| 150 | +- portfolio_text: text (optional) |
| 151 | +- portfolio_url: str (optional) |
| 152 | +- last_analyzed_at: datetime |
| 153 | +``` |
| 154 | +
|
| 155 | +#### Badge |
| 156 | +
|
| 157 | +```python |
| 158 | +- id: int |
| 159 | +- user_id: FK |
| 160 | +- category: enum (Commit/Days/Builder/Writer/Seeker) |
| 161 | +- tier: int (1-3: Bronze/Silver/Gold) |
| 162 | +- earned_at: datetime |
| 163 | +``` |
| 164 | +
|
| 165 | +#### Quest |
| 166 | +
|
| 167 | +```python |
| 168 | +- id: int |
| 169 | +- title: str |
| 170 | +- description: text |
| 171 | +- difficulty: int (対象ランク) |
| 172 | +- category: str (Web/AI/Security/etc) |
| 173 | +- is_generated: bool (AI生成 or プリセット) |
| 174 | +- created_at: datetime |
| 175 | +``` |
| 176 | +
|
| 177 | +#### QuestProgress |
| 178 | +
|
| 179 | +```python |
| 180 | +- id: int |
| 181 | +- user_id: FK |
| 182 | +- quest_id: FK |
| 183 | +- status: enum (NotStarted/InProgress/Completed) |
| 184 | +- started_at: datetime |
| 185 | +- completed_at: datetime |
| 186 | +``` |
| 187 | +
|
| 188 | +## 9. 技術スタック |
| 189 | +
|
| 190 | +### Backend |
| 191 | +- FastAPI |
| 192 | +- SQLAlchemy (ORM) |
| 193 | +- Alembic (Migration) |
| 194 | +- LangChain (LLM連携) |
| 195 | +- OpenAI API / Anthropic API |
| 196 | +
|
| 197 | +### Frontend |
| 198 | +- Next.js (App Router) |
| 199 | +- TypeScript |
| 200 | +- TailwindCSS |
| 201 | +- shadcn/ui |
| 202 | +
|
| 203 | +### Infrastructure |
| 204 | +- Docker / Docker Compose |
| 205 | +- PostgreSQL (Production) |
| 206 | +- SQLite (Development) |
| 207 | +
|
| 208 | +## 10. セキュリティ要件 |
| 209 | +
|
| 210 | +- GitHub OAuth 2.0による安全な認証 |
| 211 | +- APIキーは環境変数で管理(`.env`) |
| 212 | +- CORS設定の適切な管理 |
| 213 | +- SQLインジェクション対策(SQLAlchemy ORM使用) |
| 214 | +- XSS対策(Next.jsの自動エスケープ) |
| 215 | +- CSRF対策(FastAPIのCORSミドルウェア) |
| 216 | +
|
| 217 | +## 11. パフォーマンス要件 |
| 218 | +
|
| 219 | +- AI分析: 初回30秒以内 |
| 220 | +- 演習生成: 15秒以内 |
| 221 | +- 通常APIレスポンス: 200ms以内 |
| 222 | +- フロントエンド初期表示: 2秒以内 |
| 223 | +
|
| 224 | +## 12. テスト方針 |
| 225 | +
|
| 226 | +- **Backend**: pytest + pytest-cov (カバレッジ80%以上) |
| 227 | +- **Frontend**: Jest + React Testing Library |
| 228 | +- **E2E**: Playwright (主要フロー) |
| 229 | +- **LLM**: モック化 + 実際のAPI呼び出しテスト |
| 230 | +
|
| 231 | +## 13. デプロイ戦略 |
| 232 | +
|
| 233 | +- **CI/CD**: GitHub Actions |
| 234 | +- **環境**: Development / Staging / Production |
| 235 | +- **モニタリング**: ログ集約、エラートラッキング |
| 236 | +- **バックアップ**: DBの定期バックアップ |
| 237 | +
|
| 238 | +--- |
| 239 | +
|
| 240 | +## 参考資料 |
| 241 | +
|
| 242 | +- Architecture SKILL: `.github/skills/architecture/SKILL.md` |
| 243 | +- Security SKILL: `.github/skills/security/SKILL.md` |
| 244 | +- Git Workflow SKILL: `.github/skills/git-workflow/SKILL.md` |
| 245 | +
|
| 246 | +```` |
0 commit comments