RORK LABEN
PRICE — Rork Max の価格帯は月200ドルから1,800ドルまで幅があります。作業量の多い開発者やチーム向けの帯が上に伸びている形ですFREE — 無料枠は週5プロンプト程度です。試すには足りますが、継続的に作るなら有料前提の設計になっていますSHIP — App Store への公開はビルド・証明書・申請まで自動化されており、Mac も Xcode も持たずに iOS アプリを出せますSIM — ブラウザ配信のシミュレータで、実際の Apple 環境で動く画面を手元のブラウザから確認できますNATIVE — HealthKit、ARKit と LiDAR、NFC、Dynamic Island、Metal による3D まで届きます。React Native では触れない領域ですFUNDING — 2026年4月9日発表のシードで Left Lane Capital 主導の1,500万ドルを調達し、アプリビルダーの Paperline を買収していますPRICE — Rork Max の価格帯は月200ドルから1,800ドルまで幅があります。作業量の多い開発者やチーム向けの帯が上に伸びている形ですFREE — 無料枠は週5プロンプト程度です。試すには足りますが、継続的に作るなら有料前提の設計になっていますSHIP — App Store への公開はビルド・証明書・申請まで自動化されており、Mac も Xcode も持たずに iOS アプリを出せますSIM — ブラウザ配信のシミュレータで、実際の Apple 環境で動く画面を手元のブラウザから確認できますNATIVE — HealthKit、ARKit と LiDAR、NFC、Dynamic Island、Metal による3D まで届きます。React Native では触れない領域ですFUNDING — 2026年4月9日発表のシードで Left Lane Capital 主導の1,500万ドルを調達し、アプリビルダーの Paperline を買収しています
記事一覧/開発ツール
開発ツール/2026-04-25上級

Rork アプリで 1GB の動画・写真を確実にアップロードする — TUS と Multipart、バックグラウンド転送の実装ガイド

Rork アプリで 1GB を超える動画や高解像度写真を本番運用で確実にアップロードするための実装ガイド。TUS プロトコル、S3/R2 の Multipart Upload、iOS バックグラウンド転送、再開可能な進捗 UI を動くコードで解説します。

Rork532ファイルアップロードTUSS3 MultipartCloudflare R2バックグラウンド転送2

プレミアム記事

「撮った動画をアップロードしているのに、エレベーターに入った瞬間に進捗バーが最初に戻る」— これを 2 回体験したユーザーは、もうあなたのアプリを開きません。

私は、過去に運営していた写真共有系アプリで同じ問題に直面しました。テストでは素直にアップロードできていた 200MB の動画が、本番では「iPhone を鞄に入れて電車に乗ったユーザー」の環境で 30〜40% の失敗率を叩き出していたのです。原因は単純で、fetch + FormData の素直な一括アップロードは、モバイル環境の前提と真正面からぶつかります。ここではその問題を根本から解決する実装パターンを、動くコード付きでお渡しします。

なぜ「ただの fetch + FormData」では本番で失敗するのか

モバイルアプリのファイルアップロードを「PC のブラウザと同じ感覚」で設計すると、ほぼ確実に以下の壁にぶつかります。

① ネットワークの瞬断が日常的に起こる。電車の駅間、地下街、建物の中、エレベーター、Wi‑Fi からモバイル回線への切り替え — これらの場面では TCP コネクションが切断されます。一括アップロードは切断のたびに最初からやり直しです。1GB のファイルなら、95% までアップロードしてから切れたら 950MB が無駄になります。

② iOS はバックグラウンド処理を容赦なく殺す。ユーザーがアプリをスワイプで閉じなくても、ホームに戻って 30 秒経つと、標準的な URLSession ではリクエストが打ち切られます。BGTaskSchedulerNSURLSession.background を使わない限り、「バックグラウンドでアップロード継続中」は幻想です。

③ メモリ制約が厳しい。1GB のファイルを readAsDataURL で読み込むとクラッシュします。React Native / Expo でメモリを測ると、フォアグラウンドで使えるのは機種にもよりますが 800MB〜1.5GB 程度。ファイル全体をメモリに載せる実装は即アウトです。

④ サーバー側にも制限がある。多くの PaaS(Vercel、Cloudflare Workers、Supabase Edge Functions)は、1 リクエストあたりのボディサイズやタイムアウトに上限があります。Cloudflare Workers は 100MB、Vercel Serverless は 4.5MB(標準)、API Gateway 経由の Lambda は 10MB。一括 POST では届きません。

この 4 つを同時に解決する設計が、レジュームアブル(再開可能)+ チャンク分割 + バックグラウンド対応 のアップロード基盤です。

3 つの選択肢を比較する — どれを採用するか

レジュームアブル・チャンク転送を実現する手段は主に 3 つあります。それぞれ得意領域が違うので、アプリの性質に合わせて選択します。

  • TUS プロトコル(tus.io): HTTP ベースのオープン標準。クライアント実装が各言語で揃っており、サーバーも OSS(tusd)や Supabase Storage / Uppy Companion で動かせる。任意のチャンクサイズ、再開、並列は拡張仕様で。一般用途の万能解
  • S3 / R2 Multipart Upload: AWS S3 の公式仕様。Cloudflare R2 や MinIO など S3 互換ストレージで動く。5MB〜5GB のパートを並列アップロード可能で、5TB まで扱える。クラウドストレージに直接入れる前提のアプリ向け
  • Supabase Storage Resumable Upload: Supabase Storage は裏で TUS を採用しており、JS クライアントから数行で使える。Supabase バックエンドを使っているなら最短

私の採用基準はシンプルです。Cloudflare R2 をストレージに使っているなら Multipart Upload 一択Supabase を使っているなら Supabase Storage Resumable自前の API サーバーに入れる必要があれば TUS — 迷ったらこの順番で決まります。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
1GB の動画アップロードが途中で失敗していた読者が、ネットワーク切断やアプリ終了をまたいで再開できる転送基盤を手に入れられる
TUS プロトコル、S3 Multipart Upload、Cloudflare R2 の使い分け判断と、それぞれの本番実装コードを習得できる
バックグラウンドアップロードと進捗 UI を組み合わせ、ユーザーがアプリを閉じてもそのまま完了する UX を実装できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-08-14
Expo SDK 57 に上げる前に、prebuild で消えるネイティブ変更を洗い出す
Expo SDK 57 では expo prebuild が既定で ios と android を消してから再生成します。手編集を上げる前に洗い出す方法、config plugin への移し替え、57.0.9 で解消したメモリ回帰までを実務の順序でまとめました。
開発ツール2026-08-14
ライセンス表示に載せる依存は、lockfile の dev/prod では決まりません
AI ビルダーが書き出したプロジェクトの依存を実際に分類し、ライセンス表示に載せる範囲をどう決めたかの記録です。copyleft の検出結果と配布物の境界の食い違いを、本番プロジェクトの実データで確かめました。
開発ツール2026-08-10
署名付きURLに変えたらキャッシュが効かなくなった — expo-image のキーを URL から切り離す
署名付きURLは毎回クエリが変わるため、URL をそのままキーにしている限りキャッシュは当たりません。expo-image の writeToCacheAsync / readFromCacheAsync でキーを自分で握り、再ダウンロードを半減させるまでの設計と実測です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →