メインコンテンツへスキップ
← 記事一覧に戻る
·運営·12 min read

150秒を1.9秒超えて全滅した話 — 無料インフラ3段階移行と月¥0運用の全記録

recipe-aiVercelCloudflare Workers無料枠個人開発

151.9秒。Supabase Edge Function の Free プランには 150秒のタイムアウト制限がある。34分の YouTube 料理動画を Gemini 2.5 Flash で処理したとき、レスポンスが返ってきたのは 151.9秒後だった。たった1.9秒の超過。結果は 546 エラー。レシピは抽出されず、Gemini API 側では TPM(Tokens Per Minute)制限の 429 エラーが連鎖し、数分間すべてのリクエストが死んだ。

これは recipe-ai(YouTube 料理動画から AI でレシピを抽出するアプリ)を月¥0で運用するために、無料インフラのタイムアウト制限と3回闘った記録だ。

この記事でわかること:

  • Vercel Hobby の 60秒制限で最初に詰まるパターンと対処
  • Supabase Edge Function の 150秒制限を1.9秒超過して全滅した実体験
  • Cloudflare Workers Free が「実質無制限」になる仕組み
  • 3段階の移行を経て到達した月¥0構成の全体像
  • 「無料枠のギリギリ」がなぜ実運用で必ず破綻するか

Stage 1: Vercel Hobby の60秒の壁

recipe-ai の初期構成は単純だった。Next.js の API Route から Gemini 2.5 Flash を呼び出し、YouTube URL を渡してレシピ JSON を返す。開発環境では問題なく動く。Vercel にデプロイした瞬間、壁にぶつかった。

Vercel Hobby プランの API Route は 最大60秒でタイムアウトする。maxDuration を設定しても、Hobby では60秒が上限だ。Pro プラン($20/月)にアップグレードすれば300秒まで伸びるが、月¥0運用が前提のプロジェクトで $20 は却下した。

実際のところ、5分以内の短い動画なら60秒以内に収まることが多い。問題は長い動画だ。10分を超える動画では Gemini の処理時間が読めなくなり、タイムアウトが頻発し始めた。

Error: This Serverless Function has timed out.
Hobby plans are limited to 60 seconds.

短い動画だけに対応するという選択肢もあった。しかし料理動画は15分から30分の尺が多い。ユーザーが最も使いたい動画がまさにタイムアウトする動画だった。

Vercel はそのまま静的配信とフロントエンドに残し、API 処理を別のサービスに逃がす判断をした。

Stage 2: Supabase Edge Function で150秒に延長

次の選択肢は Supabase Edge Function だった。recipe-ai はすでに Supabase をデータベースと認証に使っている。Edge Function を追加するだけで、新しいサービスの契約は不要だ。

Supabase Edge Function の Free プランは 150秒のタイムアウト制限がある。Vercel Hobby の60秒から2.5倍に伸びた。移行は1日で完了し、10分から20分の動画は問題なく処理できるようになった。

「これで解決した」と思った。

151.9秒の地獄

34分の料理動画でテストしたとき、それは起きた。Gemini 2.5 Flash の処理が 151.9秒かかり、Edge Function の 150秒制限を 1.9秒超過した。

返ってきたのは 546 エラー(Resource Limit Exceeded)。Gemini 側ではリクエストが正常に処理されていたが、Edge Function が先にコネクションを切断したため、結果は捨てられた。

さらに悪いことに、Gemini API は「処理は完了したがクライアントが受け取らなかった」リクエストのトークンも TPM に計上する。タイムアウト直後に再リクエストを送ると、TPM 上限に引っかかって 429 エラーが返る。この 429 連鎖が数分間続き、短い動画を含むすべてのリクエストが失敗した。

1.9秒の超過が、サービス全体を数分間停止させた。

なぜ「ほぼ大丈夫」は大丈夫ではないか

34分の動画は特殊なケースではない。YouTube の料理動画は20分から40分の尺が普通にある。150秒制限の「ほぼ」ギリギリで動いている状態は、次のリクエストがいつ超えてもおかしくない状態だった。

Gemini の処理時間は動画の長さだけでなく、サーバー側の負荷や動画の複雑さによっても変動する。同じ動画でも130秒のときもあれば160秒のときもある。150秒の制限に対して140秒前後で動いているなら、統計的に必ず超える。

Stage 3: Cloudflare Workers で根本解決

3つ目の選択肢は Cloudflare Workers だった。CF Workers Free プランには、通常の意味でのタイムアウト制限がない。正確には CPU 時間に10msの制限があるが、I/O 待ち(外部 API の呼び出し待ち)は CPU 時間にカウントされない。Gemini API の処理待ちが150秒かかろうが300秒かかろうが、CPU 時間としてはほぼゼロだ。

移行は半日で完了した。Gemini 呼び出しのロジックを recipe-ai-extract.kanon02sky.workers.dev に移植し、Vercel のフロントエンドからはこの Workers エンドポイントを呼ぶ構成に変更した。

curl実測: 9.3秒で成功

34分の動画が9.3秒で返ってきた。Edge Function で151.9秒かかっていた処理ではなく、別のテスト動画での計測だが、いずれにせよタイムアウトの心配が消えたという事実が重要だ。

最終構成: 3層分離

サービス役割月額
フロントエンドVercel Hobby静的配信、UI¥0
APICloudflare Workers FreeGemini呼び出し、レシピ抽出¥0
データ + 認証Supabase FreeDB、RLS、Auth¥0

Vercel が得意なこと(静的配信)に専念させ、重い API 処理は CF Workers に任せ、データは Supabase に置く。それぞれのサービスの無料枠の「得意な部分」だけを使う構成だ。

3段階の比較

Vercel HobbySupabase Edge FunctionCloudflare Workers
タイムアウト60秒150秒I/O待ちはカウントしない
月額¥0¥0¥0
5分動画動く動く動く
20分動画タイムアウトギリギリ動く
34分動画タイムアウト151.9秒で死亡動く
429連鎖リスク再リクエストで発生タイムアウト後に発生なし
移行コスト-半日半日

無料枠の「ギリギリ」は必ず超える

この3段階の移行で学んだ最大の教訓はこれだ。

制限の80%以上を常用するなら、その枠は使うべきではない。

Supabase Edge Function の 150秒制限に対して、平均処理時間が130秒前後だった時点で移行を決断すべきだった。「ほとんどの動画は大丈夫」という判断が、151.9秒の1回で全リクエスト停止という最悪の結果を招いた。

無料枠を使うこと自体は正しい。ただし「無料枠の限界ギリギリで運用する」のは、有料プランより高くつく。デバッグ時間、ユーザーへの影響、429連鎖による全面停止。これらのコストは月$20の Vercel Pro より遥かに大きい。

幸い、Cloudflare Workers という「I/O待ちを気にしなくていい」無料選択肢が存在した。移行先がなければ、Pro プランに課金していたはずだ。

コスト最優先という判断基準

recipe-ai の開発全体を通じて、判断基準は一貫していた。金額コスト最小化が最優先。開発工数は気にしない。

  • Vercel Pro $20/月 → 却下。maxDuration=60 で凌ぐ
  • Edge Function で150秒超 → CF Workers に無料移行
  • フォーム収集 → Tally + Slack 無料連携
  • 決済 → Stripe Payment Link(実装コストゼロ)

この方針は一見すると非効率に見える。CF Workers への移行に半日かかっている。$20 払えば5分で済んだ話だ。

しかし「金額コスト最小化」という判断基準があるおかげで、意思決定が速くなった。「$20 払うべきか」という議論が発生しない。代替の無料手段を探す、なければ払う。このシンプルなルールで recipe-ai は着工から2日で公開まで完了した。

個人開発の初期フェーズでは、月額固定費を増やす判断は1つ1つが心理的負担になる。「月¥0で動いている」という事実が、次の実験に踏み出す軽さを与えてくれる。

まとめ

無料枠のタイムアウト制限は、Vercel(60s) → Edge Function(150s) → CF Workers(I/O無制限) の3段階で解決した。制限の80%以上を常用しているなら、その枠は破綻する前に捨てるべきだ。月¥0運用は「ケチ」ではなく、意思決定を速くするための戦略として機能する。


recipe-ai は公開中です。YouTube 料理動画の URL を貼ると、Gemini 2.5 Flash が材料・手順・コツを構造化して返します。試したい方は recipe-ai-opal.vercel.app へ。

Claude Crew Lab Free — 毎月の実験記録をメールで

Claude Code × 個人開発のリアルな事故・発見・SaaS アイデアを毎月第1月曜にお届け。登録で「収益化チェックリスト 15 項目」を無料プレゼント。

Lab Free 登録(月1回・無料)

この記事が役に立ったらシェア