267 lines
8.0 KiB
Markdown
267 lines
8.0 KiB
Markdown
# ai.card 実装完了サマリー
|
||
|
||
## 作業日: 2025年6月1日
|
||
|
||
### 📋 今日実装した内容
|
||
|
||
## 1. データベース実装(PostgreSQL + Supabase)
|
||
|
||
### 完成機能
|
||
- **PostgreSQLスキーマ設計**: 7つのテーブル(users, card_master, user_cards, unique_card_registry等)
|
||
- **Docker Compose環境**: 開発・本番両対応
|
||
- **Supabase連携**: 環境変数で切り替え可能
|
||
- **リポジトリパターン**: BaseRepository + 専用Repository
|
||
- **マイグレーション**: Alembic設定 + 初期データ投入
|
||
- **データ同期**: ガチャ時の自動データベース保存
|
||
|
||
### 重要ファイル
|
||
```
|
||
api/app/db/models.py # SQLAlchemyモデル
|
||
api/app/repositories/ # リポジトリパターン実装
|
||
api/init_db.py # データベース初期化
|
||
docker-compose.yml # 開発環境
|
||
docker-compose.production.yml # 本番環境
|
||
```
|
||
|
||
## 2. atproto連携機能
|
||
|
||
### 完成機能
|
||
- **認証システム**: DID/ハンドルログイン + JWTトークン
|
||
- **PDSデータ保存**: カードをユーザーのPDSに自動同期
|
||
- **Lexicon定義**: `ai.card.collection` スキーマ
|
||
- **同期API**: 双方向同期・インポート・エクスポート
|
||
- **データ検証**: サーバー側整合性チェック
|
||
|
||
### 重要ファイル
|
||
```
|
||
api/app/services/atproto.py # atproto統合サービス
|
||
api/app/services/card_sync.py # カード同期サービス
|
||
api/app/routes/auth.py # 認証API
|
||
api/app/routes/sync.py # 同期API
|
||
api/app/auth/dependencies.py # 認証依存関係
|
||
```
|
||
|
||
## 3. iOS App完全実装
|
||
|
||
### 完成機能
|
||
- **SwiftUI + MVVM**: Combineを使ったリアクティブアーキテクチャ
|
||
- **認証画面**: atprotoログイン(アプリパスワード対応)
|
||
- **ガチャシステム**: 通常・プレミアムガチャ + リッチアニメーション
|
||
- **カードコレクション**: グリッド表示・検索・フィルタ・詳細画面
|
||
- **プロフィール**: ユーザー情報・統計・設定
|
||
- **視覚エフェクト**: レアリティ別アニメーション・3Dフリップ
|
||
|
||
### 重要ファイル
|
||
```
|
||
ios/AiCard/AiCard/
|
||
├── Models/Card.swift # カードデータモデル
|
||
├── Services/APIClient.swift # API通信(Combine使用)
|
||
├── Services/AuthManager.swift # 認証管理
|
||
├── Services/CardManager.swift # カード管理
|
||
├── Views/LoginView.swift # ログイン画面
|
||
├── Views/GachaView.swift # ガチャ画面
|
||
├── Views/CollectionView.swift # コレクション画面
|
||
├── Views/CardView.swift # カード表示コンポーネント
|
||
└── Views/GachaAnimationView.swift # ガチャアニメーション
|
||
```
|
||
|
||
## 4. プロジェクト統合
|
||
|
||
### アーキテクチャ概要
|
||
```
|
||
[iOS App] ←→ [Web App] ←→ [FastAPI] ←→ [PostgreSQL]
|
||
↕
|
||
[atproto PDS]
|
||
```
|
||
|
||
### データフロー
|
||
1. **ガチャ**: iOS/Web → API → DB保存 → atproto PDS同期
|
||
2. **認証**: atproto DID → JWT → セッション管理
|
||
3. **同期**: DB ↔ atproto PDS双方向同期
|
||
|
||
## 📊 実装済み機能一覧
|
||
|
||
### ✅ Backend (FastAPI)
|
||
- [x] PostgreSQL + Supabase対応
|
||
- [x] atproto認証・同期
|
||
- [x] ガチャシステム(確率・unique管理)
|
||
- [x] カードCRUD API
|
||
- [x] Docker環境(開発・本番)
|
||
- [x] リポジトリパターン
|
||
- [x] データベースマイグレーション
|
||
|
||
### ✅ Frontend (React)
|
||
- [x] atproto認証UI
|
||
- [x] ガチャアニメーション(Framer Motion)
|
||
- [x] カード表示・コレクション
|
||
- [x] レスポンシブデザイン
|
||
- [x] TypeScript対応
|
||
|
||
### ✅ Mobile (iOS)
|
||
- [x] SwiftUI + MVVM + Combine
|
||
- [x] atproto認証
|
||
- [x] ガチャ(通常・プレミアム)
|
||
- [x] カードコレクション(検索・フィルタ)
|
||
- [x] リッチアニメーション
|
||
- [x] iOS 16.0+ 対応
|
||
|
||
### ✅ DevOps
|
||
- [x] Docker Compose
|
||
- [x] Cloudflare Tunnel対応
|
||
- [x] 環境別設定
|
||
- [x] ヘルスチェック
|
||
|
||
## 🔧 技術スタック
|
||
|
||
### Backend
|
||
- **Language**: Python 3.11
|
||
- **Framework**: FastAPI 0.104.1
|
||
- **Database**: PostgreSQL + SQLAlchemy
|
||
- **ORM**: SQLAlchemy 2.0 (async)
|
||
- **Migration**: Alembic
|
||
- **Cloud**: Supabase対応
|
||
- **atproto**: atproto SDK 0.0.46
|
||
|
||
### Frontend (Web)
|
||
- **Language**: TypeScript
|
||
- **Framework**: React 18 + Vite
|
||
- **Animation**: Framer Motion
|
||
- **HTTP**: Axios
|
||
- **Styling**: CSS Modules
|
||
|
||
### Mobile (iOS)
|
||
- **Language**: Swift 5.7+
|
||
- **Framework**: SwiftUI
|
||
- **Architecture**: MVVM + Combine
|
||
- **HTTP**: URLSession
|
||
- **Minimum**: iOS 16.0
|
||
|
||
### Infrastructure
|
||
- **Container**: Docker + Docker Compose
|
||
- **Proxy**: Nginx
|
||
- **Tunnel**: Cloudflare Tunnel
|
||
- **Database**: PostgreSQL 16
|
||
|
||
## 🎯 unique カードシステムの実装
|
||
|
||
### 概念
|
||
- **確率**: 0.0001%(10万分の1)
|
||
- **唯一性**: 各カードID(0-15)につき世界で1人のみ所有可能
|
||
- **検証**: サーバー側 + atproto PDS両方でチェック
|
||
- **将来**: ai.verse unique skillとの連携予定
|
||
|
||
### 実装詳細
|
||
- `unique_card_registry`テーブルでグローバル管理
|
||
- ガチャ時にatomic操作で重複防止
|
||
- atproto PDSにも同期保存
|
||
- Web/iOSで特別なエフェクト表示
|
||
|
||
## 🚀 デプロイメント準備
|
||
|
||
### 開発環境起動
|
||
```bash
|
||
# 全体起動
|
||
docker-compose up -d
|
||
|
||
# データベース初期化
|
||
docker-compose exec api python init_db.py
|
||
|
||
# Web開発サーバー
|
||
cd web && npm run dev
|
||
|
||
# iOS(Xcodeで開く)
|
||
open ios/AiCard/AiCard.xcodeproj
|
||
```
|
||
|
||
### 本番環境起動
|
||
```bash
|
||
# 本番設定で起動
|
||
docker-compose -f docker-compose.production.yml up -d
|
||
```
|
||
|
||
## 📝 重要な設定ファイル
|
||
|
||
### 環境変数(.env)
|
||
```bash
|
||
# Database
|
||
DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/aicard
|
||
DATABASE_URL_SUPABASE=postgresql+asyncpg://...
|
||
USE_SUPABASE=false
|
||
|
||
# atproto
|
||
ATPROTO_HANDLE=your.bsky.social
|
||
ATPROTO_PASSWORD=your-app-password
|
||
|
||
# Security
|
||
SECRET_KEY=your-secret-key
|
||
|
||
# Cloudflare Tunnel
|
||
CLOUDFLARE_TUNNEL_TOKEN=your-tunnel-token
|
||
```
|
||
|
||
### API設定
|
||
- **開発**: `http://localhost:8000`
|
||
- **本番**: `https://api.card.syui.ai`
|
||
- **認証**: Bearer JWT token
|
||
- **CORS**: Web/iOS対応
|
||
|
||
## 🔮 今後の実装候補
|
||
|
||
### Phase 1: 運用準備
|
||
- [ ] 統合テスト(全システム連携)
|
||
- [ ] パフォーマンス最適化
|
||
- [ ] モニタリング・ログ
|
||
- [ ] セキュリティ監査
|
||
|
||
### Phase 2: 機能拡張
|
||
- [ ] カード交換システム
|
||
- [ ] プッシュ通知(iOS)
|
||
- [ ] リアルタイム同期(WebSocket)
|
||
- [ ] バックアップ・復元
|
||
|
||
### Phase 3: エコシステム統合
|
||
- [ ] ai.gpt連携
|
||
- [ ] ai.verse unique skill連携
|
||
- [ ] yui system実装
|
||
- [ ] 分散SNS連携
|
||
|
||
## 🎮 ゲーム仕様
|
||
|
||
### カードシステム
|
||
- **種類**: 16種類(ai, 夢幻, 光彩, 中性子, 太陽, 夜空, 雪, 雷, 超究, 剣, 破壊, 地球, 天の川, 創造, 超新星, 世界)
|
||
- **CP**: 1-999(レアリティでボーナス)
|
||
- **レアリティ**: 5段階(normal, rare, super_rare, kira, unique)
|
||
|
||
### ガチャ確率
|
||
- **Normal**: 99.789%
|
||
- **Rare**: 0.1%
|
||
- **Super Rare**: 0.01%
|
||
- **Kira**: 0.1%
|
||
- **Unique**: 0.0001%(隠し機能)
|
||
|
||
### 演出
|
||
- **Web**: CSS + Framer Motion
|
||
- **iOS**: SwiftUI Animation + Particle Effects
|
||
- **レアリティ別**: 色・エフェクト・音(予定)
|
||
|
||
---
|
||
|
||
## 💡 AI向けメモ
|
||
|
||
### プロジェクト理解のキーポイント
|
||
1. **存在子理論**: 最小単位の意識がゲーム世界の根幹
|
||
2. **yui system**: 現実の個人とゲーム内要素の1:1紐付け
|
||
3. **データ主権**: atproto PDSでユーザーがデータを所有
|
||
4. **uniqueカード**: NFT的だがブロックチェーン不使用
|
||
|
||
### 重要な実装パターン
|
||
- **リポジトリパターン**: データアクセス層の抽象化
|
||
- **atproto同期**: ガチャ時の自動PDS保存
|
||
- **レアリティシステム**: 確率とエフェクトの連動
|
||
- **認証フロー**: DID → JWT → セッション管理
|
||
|
||
### 次回作業時の注意点
|
||
- 環境変数の設定確認
|
||
- データベースの初期化
|
||
- atprotoアカウントの準備
|
||
- Docker環境の起動確認 |