SWINGCOMPASS AI — INFRA REPORT — 2026.07.14

インフラ検討レポート動画ストレージ(S3 → R2)+ デプロイ構成 + Vercel Docker 対応リサーチ

目次

結論(先に要点)

SUMMARY

Vercel Docker 対応とは(2026-07-14 リサーチ)

WHAT'S NEW

2026年6月30日、Vercel は Dockerfile.vercel を発表。プロジェクトにこのファイルを置くだけで、任意の Dockerfile を Vercel の本番環境にそのままデプロイできるようになりました(それ以前の5月29日には、開発用サンドボックス内での Docker 実行にも対応済み)。

1

Dockerfile.vercel を置く

既存の Dockerfile をほぼそのまま流用可能。条件は「HTTP サーバとして $PORT(デフォルト80)で待ち受けること」だけ。

2

Vercel がビルド → レジストリ保存

Vercel Container Registry(VCR)にイメージが保存される。FFmpeg などシステムライブラリ依存のアプリも OK。

3

Vercel Functions として自動スケール実行

Fluid compute 基盤の上で動き、リクエストに応じて自動増減。本番で5分間アクセスが無いと自動でゼロにスケールダウン=アイドル時は課金ゼロ。

料金と制限(ここが判断の分かれ目)
項目内容
課金方式Active CPU 課金:CPU が実際に計算している時間だけ課金。DB 応答待ちなどの I/O 待ち時間は課金されない。アイドル時はゼロ
実行時間の上限デフォルト300秒。Pro プランで最大800秒(約13分)が正式提供。1,800秒(30分)はベータ(Node.js / Python 限定)
CPU / メモリ上限デフォルト 1vCPU / 2GB → 最大 2vCPU / 4GB(Pro)
動作モデルステートレス(リクエストを受けて返す型)。常駐プロセス・永続 WebSocket・キュー常時監視(Celery 型)は非対応
未対応機能Secure Compute(専用ネットワーク分離)、固定送信元 IP
補足Vercel Queues(キュー基盤)が2026年2月にパブリックベータ入り。将来的に Celery の代替になり得るが、まだベータ

Vercel Docker は SwingCompass に使えるか(役割別判定)

VERDICT BY ROLE
役割判定理由
フロント Next.js ×2◎ Vercel 本命(変わらず)そもそも Docker 不要。通常の Next.js デプロイが最速・最適。東京リージョン(hnd1)指定可
API(FastAPI)○ 新たな有力候補公式に FastAPI を対応例として明記。既存 Dockerfile がほぼそのまま動き、フロントと同じ Vercel に集約できる。Cloud Run と比較検討の価値あり
解析ワーカー(Celery + MediaPipe/YOLO/ffmpeg)△ 今は不適Celery の「キューを常時監視する常駐型」が非対応。載せるなら HTTP 起動型への再設計+Vercel Queues(ベータ)が必要
スケジューラ(Celery beat)△ 代替あり常駐プロセスは非対応だが、Vercel Cron Jobs(定時実行機能)で置き換え可能

スペック面では、現在の解析ワーカー(Fargate 1vCPU / 2GB)に対し Vercel は最大 2vCPU / 4GB と上回っています。ネックは①1本の解析が800秒(13分)に収まるか、②Celery からの再設計コスト、の2点。つまり「性能不足で無理」ではなく「アーキテクチャの型が合わない」が現状の結論です。

注意 — 「Vercel が Docker 対応」の読み違えポイント

Docker 対応といっても、動くのは「Vercel Functions(サーバーレス関数)としての Docker」です。ECS のような常時起動のコンテナサーバが持てるようになったわけではありません。「リクエストが来たら起動して、返したら休む」型に合う処理(API サーバ)には最適ですが、「キューを監視し続ける」型(Celery ワーカー)はそのままでは載りません。

Cloudflare Workers / Containers は解析に使えるか(2026-07-14 追記)

結論

「Workers」単体では解析は動かせません。同じ Cloudflare の「Containers」という別製品なら技術的には動かせます。ただし Containers は現時点で日本(東京)にリージョン指定できないため、解析ワーカーの本命は Cloud Run(東京)のままという評価です。

WORKERS がダメな理由(そもそも土俵が違う)

Workers は「超軽量な JavaScript 実行環境」で、いわばコンビニのレジのような存在。1リクエストをさばくのは速いが、重い計算は担えません。

Workers の適所は「署名付き URL の発行」「キューへのジョブ投入」といった解析の前後の軽い糊付け役です。

CONTAINERS なら技術的には可能(2025年登場の Docker 実行サービス)

Vercel の Docker 対応と似た「サーバーレスで Docker を動かす」サービスですが、制約が緩いのが特徴。Python も ffmpeg もそのまま動き、Vercel で問題だった800秒制限もありません。

項目Cloudflare Containers参考:現行ワーカー(Fargate)
スペック上限4 vCPU / 12GB メモリ / 20GB ディスク1 vCPU / 2GB
実行時間の上限なし(自分で終了を制御)なし
ゼロスケール◎ スリープ中は課金ゼロ✕ 常時2台課金
料金使った分だけ(vCPU秒+メモリ秒。ざっくり 2vCPU で5分の解析1本 ≒ 2〜3円常時稼働の固定費
それでも本命にしない理由が3つ

位置づけとしては、「R2 + Pages + Containers で Cloudflare に全部集約する」という将来の夢筋はあるものの、東京リージョン対応が来るまでは解析ワーカーの推奨(Cloud Run 東京 or ECS オートスケール化)を変える材料にはならない、という判断です。

第1部:動画ストレージ S3 → R2 — 現状の構成

現状(コードから判明した事実)
項目現状
ストレージAWS S3(東京リージョン ap-northeast-1、バケット swingcompass-*)、boto3 経由
アップロードフロント →(バックエンド経由)→ S3。100MB・60秒上限
配信署名付きURL(1時間有効)で S3 から直接配信。CloudFront(CDN)なし
解析パイプラインCelery が動画を /tmp にダウンロードして処理(back/front 両方、フレーム抽出のたびに読み込み)
生成物processed/ に JSON・CSV・サムネ・デバッグ動画を無期限保存
自動削除未実装(溜まり続ける)
コード移植性ストレージ抽象化済み。R2 移行は環境変数の差し替えがほぼ中心で容易

設計上 S3 固有機能(CloudFront連携・S3イベント通知・ACL)にほぼ依存していないため、移植性は高い。

料金比較とコスト・シミュレーション

単価比較(2026年6月時点・東京リージョン)
項目AWS S3(東京)Cloudflare R2
保管料$0.023 / GB・月$0.015 / GB・月(約35%安い)
エグレス(DL転送量)$0.114 / GB(月100GBまで無料、以降10TBまでこの単価)$0(完全無料)← 最大の差
書込系リクエスト$4.70 / 100万回$4.50 / 100万回
読込系リクエスト$0.37 / 100万回$0.36 / 100万回
無料枠なし(転送の月100GBのみ)保管10GB・書込100万・読込1000万/月
SWINGCOMPASS 想定シミュレーション(1回の閲覧 ≒ 40MB DL と仮定)
規模保管量 / 月間閲覧数転送量S3 月額R2 月額
100GB / 5,000回200GB約 $26約 $2.5
500GB / 25,000回1TB約 $128約 $10
2TB / 100,000回4TB約 $512約 $40

※1ドル≒150円換算。閲覧サイズ・再生回数は仮置き。ポイントは絶対額より「伸び方」——S3 は事業が伸びるほどエグレスが青天井で増えるが、R2 はほぼ横ばい。成長するほど差が開く構造。

S3 と R2 のメリット・デメリット

AWS S3

メリット

  • 業界標準の実績・成熟度。ツール・第三者連携が豊富
  • 東京リージョン指定で「日本国内保管」が保証される(個人情報の観点で有利)
  • 同一リージョンの AWS 内通信は無料(解析パイプラインの読込が無料)
  • きめ細かい権限管理・監査ログ・ストレージクラス

デメリット

  • エグレス課金が高い($0.114/GB)。再生回数に比例して膨らむ=本アプリ最大の弱点
  • 保管料も R2 より3割高い
  • CDN を挟まないと毎回フル転送課金。挟むと CloudFront の費用・運用が増える
  • 料金体系が複雑でコスト予測が難しい
CLOUDFLARE R2

メリット

  • エグレス完全無料。再生が増えてもダウンロード課金ゼロ
  • 保管料が約35%安い
  • Cloudflare CDN が標準で前段に入る(カスタムドメイン配信でキャッシュが効き、日本のユーザーにも高速)
  • S3互換API:boto3 のまま、ほぼ設定変更だけで動く
  • 無料枠が実用的(保管10GB+大量リクエスト)

デメリット

  • データ所在の保証が弱い。地域ヒント(apac等)はあるが「東京=国内保管」の明確な保証はない
  • エコシステム・実績は S3 に劣る
  • 高度なストレージ機能(細かいクラス・監査等)は S3 の方が手厚い
  • Cloudflare へのベンダー集中(既に使っていれば逆にメリット)

SwingCompass 固有の重要論点(判断の肝)

1. 個人情報・データ所在(最重要)

スウィング動画は「特定の個人が識別できる映像」で、個人情報保護法(APPI)上の個人データに該当します。S3東京は国内保管が明確。R2 は海外(Cloudflare の分散網)に保管され得るため、プライバシーポリシーで「外国にある第三者への提供/越境保管」を適切に開示できれば運用可能ですが、ここを詰める必要があります。国内保管を厳格に約束したいなら S3東京(または R2 の所在確認)が必要。

2. バックエンドの稼働場所で計算が変わる

バックエンドは AWS 東京の ECS Fargate で稼働中(第2部で確認済み)。つまり解析パイプラインの S3 読み込みは現状無料です。R2 に移すとクラウド跨ぎになりますが、R2 のエグレスは無料なので追加課金は発生しません(わずかなレイテンシ増のみ)。なお将来バックエンドを AWS 外(Cloud Run / Vercel 等)に出す場合、S3 のままだと解析の読込にもエグレス課金が発生するため、R2 移行の価値はさらに上がります

3. 自動削除(ライフサイクル)が未実装

processed/ のデバッグ動画や JSON が無期限で溜まり続けています。S3 / R2 どちらでも設定できるので、移行と同時に「N日後に自動削除」ルールを入れるのがおすすめ(R2 にもライフサイクル機能あり)。これは移行の有無と無関係に必要な整理です。

R2 移行の手間

MIGRATION EFFORT
作業難易度内容
コード変更環境変数差し替え中心(S3_ENDPOINT_URL を R2 へ、AWS_REGION=auto)。LocationConstraint と head_object のエラー処理を微調整
既存データ移行低〜中Cloudflare の Super Slurper(一括コピー)または Sippy(アクセス分から段階移行)で S3 から無停止移行可能
配信ドメインR2 にカスタムドメインを割り当て、CDN 経由配信に
ライフサイクルこの機会に自動削除ルールを新規実装(移行と無関係に必要)

第1部の結論:移行を前向きに進める価値が高い。動画アプリでエグレス無料は本質的に強く、保管料も安く、コード変更も小さく、CDN が標準で付く。唯一きちんと整理すべきは「個人情報の保管場所をどう扱うか」の一点のみ。

第2部:デプロイ構成 — 現状(AWS ECS Fargate)

現状の構成(Terraform 管理・東京リージョン)
役割中身稼働
フロント(ユーザー / 管理)Next.js × 2Fargate 常時2タスク
APIFastAPIFargate 常時2タスク
解析ワーカーCelery(MediaPipe + YOLO + ffmpeg)Fargate 常時2タスク(1vCPU/2GB)
スケジューラCelery beatFargate 常時1タスク
周辺ALB / RDS Postgres17 / ElastiCache Redis / WAF / NAT Gateway常時稼働

ドメインは beta.swingcompass-ai.com。ML 処理は GPU 不使用の CPU ベース(=移行先の選択肢が広い、という好材料)。

一番もったいないポイント

1. ワーカーが常時2台

解析は「アップされた時だけ」走るバースト型なのに、誰もアップしていない深夜も2台分の Fargate 料金を払い続けている。「処理がある時だけ起動、無い時はゼロ」にできるかが最大のコスト差

2. Next.js を Fargate で運用

Next.js は Vercel / Cloudflare 向き。Fargate 常時起動は割高かつ過剰。Vercel(hnd1 東京)がチーム標準であり、ここはズレている。

3. VPC 一式の固定費

ALB + NAT Gateway + WAF。特に NAT Gateway は使っていなくても月$30〜45 + 通信処理料が効く「見えないコスト」。

役割ごとのおすすめ構成(Vercel Docker 反映版)

RECOMMENDED — 2026-07-14 更新
役割本命理由・補足
フロント×2Vercel(hnd1 東京)or Cloudflare Pagesチーム標準。Fargate 2タスク削減+世界配信+運用ゼロ。R2 に寄せるなら Cloudflare Pages で「Cloudflare 集約」も筋が良い
API(FastAPI)Cloud Run(東京)/ Vercel Docker(新登場の対抗馬)/ Fly.io(nrt)3つとも「使った分だけ課金+ゼロスケール」。Vercel Docker を選ぶとフロントと運用先を1つに集約できるのが新しい魅力。固定 IP や専用ネットワークが要件になるなら Cloud Run
解析ワーカーCloud Run(東京)or ECS のままオートスケール0〜N台Celery 型常駐は Vercel 非対応のためここは従来推奨のまま。Cloud Run はキュー連動でゼロスケール可。将来 Vercel Queues の GA や Cloudflare Containers の東京対応が来たら再検討の余地
スケジューラ移行先の Cron 機能(Cloud Run Scheduler / Vercel Cron)Celery beat の常時1タスクを削減できる
Redis現状維持(ElastiCache)or Upstash(東京・従量)ゼロスケール構成に寄せるなら従量制の Upstash が噛み合う
DBNeon(東京)に集約チーム標準。RDS を Neon へ寄せて VPC / NAT ごと畳めると構成が大幅に簡素化(※RDS が現役かは要確認)
パターンA — VERCEL 集約(新案)

フロント+API を Vercel Docker に、ワーカーだけ Cloud Run。運用先が実質2つ(Vercel + Cloud Run)に減り、デプロイ体験も統一される。Docker 対応で現実味が出た構成。

パターンB — CLOUDFLARE + GCP

Cloudflare Pages/R2(配信・保管)+ Cloud Run(API+ワーカー)+ Neon(DB)。固定費が小さく波に強い。R2 移行と最も相性が良い王道構成。

パターンC — AWS 維持で最小の手

①フロントを Vercel へ ②ワーカーをオートスケール化 ③NAT Gateway 見直し。移行リスク最小で無駄だけ削る。DB・ドメイン・シークレットは動かさない。

移すか/残すかの判断軸(正直ベース)

HONEST TAKE

確認したいこと(意思決定に必要な3点)

① 動画の「日本国内保管」を厳格に約束する必要があるか?
プライバシーポリシー・ユーザーへの約束の現状を確認したい。→ R2 で OK か、所在の確認・ポリシー改訂が要るかが決まる(R2 移行の唯一のブロッカー)。
② デプロイ見直しの主目的はどれか?
(A) コスト削減が最優先 → ワーカーのゼロスケール化から着手 / (B) 運用をシンプルに・AWS から離れたい → Cloud Run(最楽)か Vercel 集約(パターンA)へ / (C) 今は大きく動かさず無駄だけ削る → フロント Vercel 化+NAT 見直しの最小手。
③ 1本の解析処理は何秒かかっているか?(実測)
Vercel の実行上限は800秒(Pro・正式提供)。実測がこれを大きく下回るなら、将来「解析も Vercel Queues + Docker」に寄せる道が開ける。まずは現行ログから代表値を取りたい。

方向が決まり次第、選んだパターンの月額ざっくり試算と具体的な移行手順を、第1部(R2)と同じ粒度で詰めます。

出典・参考リンク

SOURCES(料金・仕様は 2026年6〜7月時点)