株式会社renue
AI導入・DXの悩みをプロに相談してみませんか?
AIやDXに関する悩みがありましたら、お気軽にrenueの無料相談をご利用ください。 renueのAI支援実績、コンサルティングの方針や進め方をご紹介します。
OpenAI Sora 2は、テキストまたは画像から高精細な動画を自動生成できる最先端のマルチモーダルAIである。2026年現在、広告クリエイティブや商品紹介動画の自動生成に活用されている。本記事では、renueが自社プロダクトとして実装しているSora 2 API統合の本番アーキテクチャをもとに、非同期ジョブ管理・image-to-video・Azure Storage統合の実装パターンを解説する。なお、OpenAIは2026年9月24日にSora 2 APIの提供終了を発表しており、本記事は廃止前の最終実装ガイドとしての性格も持つ。
重要: Sora 2 API廃止予定(2026年9月24日)
OpenAIは公式に、以下のモデルとAPIを2026年9月24日に廃止すると発表している。
- Videos API
- sora-2
- sora-2-pro
- sora-2-2025-10-06
- sora-2-2025-12-08
- sora-2-pro-2025-10-06
2026年4月時点の実装は依然として有効だが、長期的には後継モデルへの移行計画を準備しておく必要がある。本記事で解説する実装パターンは、将来的に別の動画生成APIにも応用可能な汎用性の高い設計である。
Sora 2 APIの基本仕様
| 項目 | 仕様 |
|---|---|
| エンドポイント | POST /v1/videos (ジョブ作成) |
| ステータス確認 | GET /v1/videos/{id} |
| ダウンロード | GET /v1/videos/{id}/content |
| 動画長(seconds) | 4 / 8 / 12 など(対応値は変更される場合があるため公式情報で確認) |
| サイズ(size) | 720x1280 (縦) / 1280x720 (横) / 1024x1024 (正方形) 等 |
| 入力モード | text-to-video / image-to-video |
| ジョブ方式 | 非同期(ステータスをポーリング) |
| 音声 | 対応(natural language生成) |
本番品質Sora 2統合に必要な5レイヤー
レイヤー1: ジョブベース非同期処理
Sora 2 APIは同期APIではなく、ジョブベース非同期APIである。動画生成には数秒〜数分かかるため、以下の3ステップで処理する。
- POST /v1/videos: ジョブ作成、IDを返す
- GET /v1/videos/{id}: ステータスをポーリング(queued / in_progress / completed / failed)
- GET /v1/videos/{id}/content: 完了後にダウンロード
実装パターン(動画生成クライアントの設計)
非同期処理の実装ポイント
- create_video_job のtimeout: 60秒(軽いジョブ作成のみ)
- 動画ダウンロード処理のタイムアウト: 120秒(ダウンロードは時間がかかる)
- ステータス確認処理のtimeout: 30秒(軽い確認のみ)
- ポーリング間隔: 5〜10秒が推奨(早すぎるとレート制限、遅すぎるとUX悪化)
レイヤー2: image-to-video機能
Sora 2は「テキストから生成」だけでなく「画像から動画を生成」もサポートする。既存のバナー画像を動画化する用途で強力である。
image-to-video の制約
image-to-videoには重要な制約がある。参照画像のサイズは動画サイズと一致している必要がある。これを無視すると「Invalid input image size」エラーが発生する。
画像リサイズ前処理の実装
renueの実装では、参照画像を自動的にリサイズして動画サイズに合わせる処理を実装している。単純なリサイズではなく、Fit + pad(黒背景)方式を採用する。
Fit + Pad方式の理由
- Crop方式: 元画像の重要部分を切り落とすリスクあり
- Stretch方式: 元画像のアスペクト比が崩れる
- Fit + Pad方式(採用): アスペクト比を維持し、余白を黒背景で埋める
広告クリエイティブでは元画像の意図を崩さないことが最優先のため、Fit + Pad方式が最適である。
multipart form-dataでの送信
image-to-videoではAPIリクエストがJSONではなくmultipart form-dataになる。JSONとファイルを混在させるパターン。
重要な点: `headers`に`Content-Type`を指定しない。`requests`ライブラリがmultipart用のboundaryを自動設定してくれる。
レイヤー3: SSRF対策(セキュリティ重要)
image-to-videoで最も危険なセキュリティリスクはSSRF(Server-Side Request Forgery)である。ユーザーが任意のURLを指定できると、サーバーから内部ネットワークのリソースにアクセスされる可能性がある。
対策の原則
renueの実装では「ユーザー入力のURLは絶対に受け付けない」原則を徹底している。
- DB保存URLのみ: 画像URLは必ずサーバー側に保存済みの信頼済みURLのみを使う
- ルーター層での検証: クライアントからは識別子のみを受け取り、サーバー内部でURLを解決する
- コメントでの明記: URLの取得元をサーバー側で限定し、検証内容をコードコメントで明示する
実装の注意点
静的解析の警告は安易に抑制せず、URL取得元の限定と検証内容を設計として明示する。
レイヤー4: Azure Storage統合
Sora 2から取得した動画をそのままレスポンスで返すのではなく、永続化のためにオブジェクトストレージにアップロードする。renueの実装ではAzure Blob Storageを使用している。
アップロード処理の設計
実装の工夫点
- 拡張子の自動判定: mime_typeから拡張子を抽出(`video/mp4` → `mp4`)
- UUID命名: `uuid.uuid4().hex`でユニークなファイル名を生成
- プレフィックス整理: `creatives/videos/`のようにカテゴリ別にフォルダ分け
- 1年間の有効期限: 有効期限を設定してコスト管理
- LOCAL環境での代替: Azure Storage未設定時はbase64データURLで返す(ローカル開発用)
レイヤー5: データクラスによる型安全性
生成された動画のメタデータを管理するため、生成結果を保持するdataclassを定義する。
各フィールドの意義
- video_bytes: 生バイナリ(必要に応じて再処理)
- mime_type: 拡張子判定や適切な配信ヘッダーの設定
- url: アップロード後のアクセスURL(Azure Blob Storage)
- prompt_used: 生成に使ったプロンプト(履歴管理)
- duration: 動画の長さ(秒)
dataclassを使うことで、型ヒント・イミュータブル性・デフォルト値管理が統一できる。
非同期ジョブ管理のワーカーパターン
Sora 2のジョブが完了するまで待つ間、Webリクエストをブロックしてはいけない。renueの実装では以下のパターンを採用している。
Celeryワーカーでのポーリング
- フロントエンドが動画生成用のAPIエンドポイントを呼び出す
- FastAPIがSora 2にジョブ作成リクエスト、job_idを取得
- Celeryタスクをenqueue(job_idを渡す)
- フロントエンドには即座に「生成開始」を返す
- Celeryワーカーが5秒ごとにステータス確認
- completed になったら動画をダウンロード、Azure Blobにアップロード
- 生成結果のURLを保存
- WebSocket/Pollingでフロントエンドに完了通知
タイムアウト対策
- ジョブ作成のタイムアウト: 60秒(通常は即応答)
- ポーリング最大時間: 10分(これを超えたら失敗扱い)
- ダウンロードのタイムアウト: 120秒(動画ファイルサイズによる)
エラーハンドリング
Sora 2 APIのエラー種別
- 400 Bad Request: プロンプト違反、sizeまたはsecondsが不正
- 401 Unauthorized: APIキーが無効
- 429 Too Many Requests: レート制限(リトライが必要)
- 500 Internal Server Error: OpenAI側の問題(リトライで解決する場合が多い)
- job failed: ジョブは作成されたが生成中にエラー
リトライ戦略
ログに詳細(status_code + text)を必ず残す。本番運用では、500系エラーは自動リトライ(指数バックオフ)、400系はユーザー通知、401/429は管理者通知、という戦略が効果的である。
コンテンツポリシー
Sora 2は強力な生成AIだが、OpenAIのコンテンツポリシーに従う必要がある。以下の内容は生成できない。
- 有名人の顔や声を模倣
- 暴力的・性的・差別的なコンテンツ
- 他者の著作権を侵害する内容
- 虚偽情報の動画
本番運用ではプロンプトの事前フィルタリング(禁止ワードチェック)を実装し、ユーザーに違反の可能性を事前に通知する設計が推奨される。
renueの実装特徴
renueは「Self-DX First」の方針のもと、Sora 2統合を自社プロダクトとして実装している。社内の主要業務を自社開発のAIツールで自動化済み(2026年1月時点)であり、Sora 2統合は広告代理AIエージェントの動画生成機能として組み込まれている(全て公開情報)。
技術スタック
- 言語: Python 3.11
- HTTPクライアント: requests
- 画像処理: Pillow(Image.LANCZOS でリサイズ)
- ストレージ: Azure Blob Storage
- 非同期ジョブ: Celery
Sora 2廃止後の移行計画
2026年9月24日のSora 2廃止に備え、以下の準備が推奨される。
移行候補
- OpenAI後継モデル: OpenAIが新しい動画生成APIを提供する可能性
- Google Veo: Google DeepMindの動画生成モデル
- Runway Gen-3: プロ向け動画生成AI
- Luma Dream Machine: 商用利用可の動画生成
- Kling AI: 中国発の高品質動画生成
- Azure OpenAI Videos: Microsoft経由でのアクセス
移行を楽にする設計
API固有のロジックを動画生成クライアントに閉じ込めることで、将来的に別のAPIに切り替える際も最小限の修正で済む。Strategy Patternで動画生成プロバイダーを抽象化しておくとさらに移行が容易になる。
業界別の活用パターン
| 業界 | 主な活用 |
|---|---|
| EC/D2C | 商品紹介動画、SNS広告動画 |
| 不動産 | 物件内覧動画、周辺環境の可視化 |
| 教育 | 講義の視覚化、実験デモ動画 |
| 観光 | 観光地紹介動画、宿泊施設PR |
| 採用 | 会社紹介動画、社員インタビュー風動画 |
| マーケティング | キャンペーン動画、A/Bテスト用バリエーション |
導入時のよくある失敗パターン
- 同期APIと勘違いする: タイムアウトで失敗
- 画像サイズを事前リサイズしない: image-to-videoでエラー
- SSRF対策を怠る: セキュリティインシデント
- Azure Storageを設定しない: 動画を永続化できない
- ポーリング間隔が短すぎる: レート制限に当たる
- エラー種別を区別しない: 不要なリトライでコスト増
- コンテンツポリシーを無視: API利用停止のリスク
- 廃止予定を考慮しない: 2026年9月後に動かなくなる




