otodoki2 は、スワイプ UI で新しい楽曲に出会えるリアルタイム音楽評価・収集アプリケーションです。FastAPI バックエンド、Next.js (App Router) フロントエンド、React Native モバイルアプリで構成されています。
📖 クイックスタート: スクリーンショットで主要機能の概要を確認できます。
- ユーザー認証: メールアドレスとパスワードによる登録・ログイン機能 (JWT ベース)。
- スワイプ式推薦:
/swipeでキューから楽曲を取得し、直感的に評価 (Like / Skip)。 - 楽曲ライブラリ:
/libraryで評価済み楽曲を一覧表示 (ログインユーザー限定)。 - 履歴の永続化: 楽曲の評価と再生履歴を PostgreSQL に保存。
- バックグラウンド補充: iTunes API を利用して、バックグラウンドで再生キューを自動補充。
- API ドキュメント:
http://localhost:8000/docsで OpenAPI スキーマを対話的に確認可能。
otodoki2/
├── backend/ # FastAPI バックエンド (API, Worker)
├── frontend/ # Next.js フロントエンド
├── mobile/ # React Native モバイルアプリ (Expo)
├── docs/ # 設計・仕様ドキュメント
├── scripts/ # 開発・検証用スクリプト
├── docker-compose.yml # コンテナオーケストレーション定義
└── Makefile # 開発用コマンドショートカット
初回のみ、.env.example をコピーして .env ファイルを作成してください。
cp .env.example .envその後、Dev Containers で開くか、以下のコマンドを実行すると、必要なサービスがすべて起動します。
# おすすめ: Makefile を使用した起動
make up
# もしくは直接 docker compose を使用
docker compose up -d --build各サービスへは以下からアクセスできます。
- フロントエンド: http://localhost:3000
- バックエンド API: http://localhost:8000
- モバイル開発ツール (Expo): http://localhost:19000
コンテナ起動時に、Alembic によるデータベースマイグレーションが自動で実行されます。
サービスを停止するには make down または docker compose down を使用します。
| 変数名 | 説明 | デフォルト |
|---|---|---|
DATABASE_URL |
PostgreSQL 接続文字列。Docker Compose 環境では .env の値が使用されます。 |
.env 参照 |
POSTGRES_DB |
PostgreSQL データベース名。 | otodoki2 |
POSTGRES_USER |
PostgreSQL ユーザー名。 | otodoki |
POSTGRES_PASSWORD |
PostgreSQL パスワード。 | otodoki-password |
JWT_SECRET_KEY |
アクセストークン署名用のシークレットキー。 | (必須) |
JWT_REFRESH_SECRET_KEY |
リフレッシュトークン署名用シークレット。 | (必須) |
GEMINI_API_KEY |
Gemini を利用したキーワード生成に使用します。 | changeme |
その他の変数の詳細は backend/app/core/config.py を参照してください。
NEXT_PUBLIC_API_URL: バックエンド API のベース URL。未設定の場合はhttp://localhost:8000が使用されます。
バックエンドのテストは、データベースコンテナを起動した状態で実行します。
# データベースコンテナを起動
docker compose up -d db
# テストを実行 (ホストの 5433 ポートに注意)
DATABASE_URL=postgresql+asyncpg://otodoki:otodoki-password@localhost:5433/otodoki2 \
GEMINI_API_KEY=dummy \
PYTHONPATH=./backend pytest backend/tests/モデルの変更後にマイグレーションファイルを生成・適用します。
# 新しいリビジョンファイルを生成
alembic revision --autogenerate -m "リビジョンメッセージ"
# データベースに適用 (コンテナ起動時に自動実行)
alembic upgrade headdocker compose logs -f <service_name> で各サービスのログをリアルタイムで確認できます (例: api, web, mobile)。
mobile/ ディレクトリで React Native + Expo を使用したモバイルアプリを開発します。
# 依存関係をインストール
cd mobile
npm install
# Expo 開発サーバーを起動
npm start- Expo Go アプリ: QR コードをスキャンして実機でテスト。
- iOS シミュレーター:
npm run ios(macOS のみ) - Android エミュレーター:
npm run android - Web プレビュー:
npm run web
プロジェクトに関する詳細なドキュメントは docs/ ディレクトリにあります。
- 📖 クイックスタート - スクリーンショットによる機能紹介
- 🏗️ システムアーキテクチャ - 全体構成図
- 🔧 ワーカー仕様 - バックグラウンドワーカーの詳細
- 🚀 デプロイガイド - 本番環境へのデプロイ手順
- 📱 モバイル実装 - モバイルアプリの実装詳細
本プロジェクトは学習目的で公開されています。ライセンスは未定です。