VercelにデプロイしたNext.jsのAPI Routeが、ローカル環境では正常に動作するのに本番環境では504 FUNCTION_INVOCATION_TIMEOUTエラーになる。Hobbyプランを使用している場合、最も可能性が高い原因はどれか。
解説
504 FUNCTION_INVOCATION_TIMEOUTは、Vercelのサーバーレス関数が許可された実行時間内にレスポンスを返せなかったときに発生します。Vercelはプランごとに関数の最大実行時間を制限しており、Hobbyプランでは10秒、Proプランでは60秒(Fluid Compute有効時は最大800秒)が上限です。ローカル環境にはこの制限がないため、開発時には問題なく動いていた処理が本番で突然タイムアウトする、というのが典型的なパターンです。ファイルサイズ超過はビルド時にエラーになるため504にはなりません。Vercelのサーバーダウンはステータスページで確認でき、個別の関数タイムアウトとは別問題です。リージョン未指定はレイテンシに影響しますが、通常はタイムアウトの直接原因にはなりません。タイムアウトの原因を特定する方法VercelダッシュボードのLogsタブでリクエストごとの実行時間を確認できます。Execution Timeが制限値に近い関数は要注意です。ローカルで再現したい場合は、Vercel CLIでvercel dev --debugを実行すると、関数ごとの処理時間が表示されます。よくあるタイムアウトの実務パターンと対処法外部APIやDBの応答が遅い: 外部サービスへのリクエストにタイムアウトを設定していないと、相手の応答待ちで関数全体が制限を超える。fetchにAbortControllerでタイムアウトを設けるのが基本コールドスタートの影響: サーバーレス関数はしばらく呼ばれないとコンテナが破棄され、次回起動時に初期化コスト(100ms〜2秒程度)が加わる。依存パッケージが大きいほど顕著になる重い処理をAPI Routeで同期的に実行している: 画像処理やAI推論のような長時間処理は、バックグラウンドジョブやWebhookパターンに分離するのがベストプラクティスFluid Computeという選択肢Proプラン以上で利用できるFluid Computeを有効にすると、1つの関数インスタンスが複数のリクエストを処理できるようになり、コールドスタートが減り、最大実行時間も大幅に伸びます。頻繁にタイムアウトが発生する場合は、コードの最適化と併せて検討する価値があります。