150秒を1.9秒超えて全滅した話 — 無料インフラ3段階移行と月¥0運用の全記録
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 |
| API | Cloudflare Workers Free | Gemini呼び出し、レシピ抽出 | ¥0 |
| データ + 認証 | Supabase Free | DB、RLS、Auth | ¥0 |
Vercel が得意なこと(静的配信)に専念させ、重い API 処理は CF Workers に任せ、データは Supabase に置く。それぞれのサービスの無料枠の「得意な部分」だけを使う構成だ。
3段階の比較
| Vercel Hobby | Supabase Edge Function | Cloudflare 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回・無料)
この記事が役に立ったらシェア