- Ruby 3.3.6
- PostgreSQL 14+
- Python 3.9+
git clone https://github.com/YOUR_USERNAME/youtube-summary-backend.git
cd youtube-summary-backendbundle install
pip install youtube-transcript-apibin/rails db:create
bin/rails db:migratebin/rails credentials:edit以下の形式で追加:
google:
gemini_api_key: your_gemini_api_keyAPI キーは Google AI Studio で取得できます。
bin/dev[React Native App]
↓ POST /videos (YouTube URL)
[Rails API]
↓ Solid Queue (非同期ジョブ)
[YoutubeSummaryJob]
↓ 1. YouTube Transcript API で文字起こし取得
↓ 2. Gemini API で要約生成
↓ 3. PostgreSQL に保存
[React Native App]
↓ GET /videos (ポーリング)
[要約結果を表示]
app/
├── controllers/
│ └── videos_controller.rb # API エンドポイント
├── jobs/
│ └── youtube_summary_job.rb # 非同期ジョブ
├── models/
│ └── summary.rb # 要約データモデル
└── services/
└── youtube_transcript_service.rb # 文字起こし・要約サービス
lib/
└── get_transcript.py # Python 文字起こしスクリプト
YouTube動画の要約ジョブを開始
curl -X POST http://localhost:3000/videos \
-H "Content-Type: application/json" \
-d '{"youtube_url": "https://www.youtube.com/watch?v=VIDEO_ID"}'レスポンス:
{
"message": "Job started for YouTube URL: https://www.youtube.com/watch?v=VIDEO_ID"
}要約結果を取得(ポーリング用)
curl "http://localhost:3000/videos?youtube_url=https://www.youtube.com/watch?v=VIDEO_ID"レスポンス(処理完了時):
{
"summary": "要約テキスト...",
"transcript": "文字起こしテキスト..."
}レスポンス(処理中):
{
"message": "Processing, please wait..."
}| コマンド | 説明 |
|---|---|
bin/dev |
開発サーバー起動 |
bin/rails test |
テスト実行 |
bin/rubocop |
Lint |
bin/brakeman |
セキュリティチェック |
| 変数名 | 説明 | 必須 |
|---|---|---|
RAILS_MASTER_KEY |
credentials 復号化キー | 本番のみ |
RAILS8_SANDBOX_DATABASE_PASSWORD |
本番DBパスワード | 本番のみ |
kamal setup # 初回のみ
kamal deploypip install youtube-transcript-apiを確認- 動画に字幕が存在するか確認
bin/rails credentials:showで API キーを確認
bin/rails solid_queue:startでワーカーを起動