# 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環境の起動確認