日本語は下に記載しています。
Backend API for Karalis — a personal karaoke manager app (Flutter, iOS/Android).
Runs on Google Cloud Run and verifies Firebase Auth ID tokens for authentication.
| Framework | FastAPI (Python 3.11) |
| Hosting | Google Cloud Run |
| DB | Supabase / PostgreSQL |
| Auth | Firebase Admin SDK (ID token verification) |
| ORM | SQLAlchemy 2.0 + Alembic (migrations) |
| External API | Apple Music API (custom JWT / ES256 signing, 180-day cache) |
- N+1 prevention — SQLAlchemy
selectinload()batch-loads related songs and history in a single query - Apple Music JWT — Signs requests with ES256 using Apple's private key; tokens cached for 180 days to minimize regeneration
- DB indexes — Composite index on
user_id + created_atfor efficient list queries - Cascade delete — Deleting an account removes all associated UserSong and SingingHistory records
python -m venv venv && source venv/bin/activate
pip install -r requirements.txtCreate a .env file:
DATABASE_URL=
FIREBASE_CREDENTIALS=
APPLE_MUSIC_KEY_ID=
APPLE_MUSIC_TEAM_ID=
APPLE_MUSIC_PRIVATE_KEY=
uvicorn app.main:app --reloadalembic upgrade headgcloud run deploy karaoke-api \
--source . \
--region asia-northeast1Karalis のバックエンドAPI。Flutter製カラオケ管理アプリ(iOS/Android)のサーバーサイド。Google Cloud Run上で動作し、Firebase AuthのIDトークンで認証を行う。
- N+1クエリ防止 — SQLAlchemyの
selectinload()で関連データ(曲・履歴)を1クエリで一括取得 - Apple Music JWT — ES256でAppleの秘密鍵を署名、トークンを180日間キャッシュして再生成を最小化
- DBインデックス —
user_id + created_atの複合インデックスで一覧取得を最適化 - カスケード削除 — アカウント削除時にUserSong・SingingHistoryを連動削除
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt.env ファイルを作成:
DATABASE_URL=
FIREBASE_CREDENTIALS=
APPLE_MUSIC_KEY_ID=
APPLE_MUSIC_TEAM_ID=
APPLE_MUSIC_PRIVATE_KEY=
uvicorn app.main:app --reloadalembic upgrade headgcloud run deploy karaoke-api \
--source . \
--region asia-northeast1