Remotion実践Tips — プロダクションビデオプロジェクトのベストプラクティス
プロジェクト構造、パフォーマンス最適化、デバッグ、デプロイまでの実践ノウハウ集
Remotionプロジェクトが大きくなると体系的な構造と最適化が必須です。
プロジェクト構造: src/compositions/にビデオごとのディレクトリを、src/components/に再利用可能なシーンコンポーネントを、src/lib/にユーティリティ(アニメーションヘルパー、データフェッチャー)を配置します。
パフォーマンス最適化: (1) prefetch()でリモートアセットを事前ダウンロードしレンダリング中のネットワーク待機を排除 (2) 画像は必要な解像度にリサイズしてから使用 (3) React.memo()でフレームごとの不要な再レンダリングを防止 (4) --concurrencyオプションでマルチスレッドレンダリング。
デバッグ: Remotion Studioのタイムラインで特定フレームに移動して問題を再現します。console.log(frame)でフレームごとの値を追跡し、--log=verboseフラグで詳細ログを確認します。
CI/CD: GitHub Actionsでnpx remotion renderを実行し、ChromeとFFmpegの依存関係をキャッシュします。レンダリング結果をS3にアップロードしSlackで通知を送るパイプラインが一般的です。
動作フロー
src/compositions/、src/components/、src/lib/ディレクトリ構造でプロジェクトを整理
prefetch()でリモート画像/フォントをレンダリング前に事前ダウンロード
React.memo()とuseMemo()でフレームごとに変わらない部分の再レンダリングを防止
--concurrency=50%でCPUコアの半分をレンダリングに活用(残りはOS用)
GitHub Actions + Docker(Chrome/FFmpeg入り)+ S3アップロードでCI/CDパイプラインを構築
メリット
- ✓ prefetchでネットワークボトルネック解消 → レンダリング時間を大幅短縮
- ✓ React.memoで不要な計算を排除 → フレームごとのレンダリング時間を削減
- ✓ CI/CD自動化: コードpush → ビデオ自動生成 → S3デプロイまで無人運用
デメリット
- ✗ CI環境構築: DockerにChrome + FFmpegをインストールする初期設定が面倒
- ✗ 過度な最適化: シンプルなプロジェクトでmemo/prefetchを乱用するとかえって複雑度が増加