🐌

俺のVercelは遅かった - Function Regionの罠

に公開2

はじめに

Next.js アプリを Vercel にデプロイしたら、なぜか異常に遅い...。そんな経験ありませんか?

普段は Cloudflare Workers や Cloud Run を使っていた私が、初めて Vercel を本番運用することになりました。
完全初見です。

「Vercel って評判いいし、Next.js との相性も最高って聞くし、余裕でしょ」
そう思っていた矢先、意外なところに落とし穴がありました。

何が遅かったのか

最初は「あれ?意外と速いじゃん」と思っていました。
トップ画面(SSG)はサクサク表示されていたんです。

しかし、動的なページ(SSR)に遷移した瞬間、世界が変わりました。

ページの表示が明らかに遅い。体感で数秒かかることも。
「何これ、重すぎでしょ...」と困惑しました。

試行錯誤の始まり

Vercel 初見の私は、「Next.js の実装の仕方が悪いのかな?」と思いました。

Cloudflare Workers や Cloud Run では問題なく動いていたコードなのに...。
きっと Vercel 特有の何かがあるに違いない。

  • コンポーネントの最適化
  • バンドルサイズの削減
  • キャッシュ戦略の見直し
  • Next.js の ISR/RSC などの最適化
  • Vercel のドキュメントを何度も読み返す

あらゆる手を尽くしましたが、全く改善しません

ローカル環境では快適に動作しているのに、本番環境だけが遅い。

「Vercel、全然ダメじゃん...。やっぱり慣れてる Cloudflare Workers に戻そうかな...」
と本気で考え始めていました。

転機:AI に相談してみた

半ば諦めかけていたとき、「ダメ元で AI に聞いてみるか」と思い、生成 AI に相談しました。

すると、**「Vercel の Function Region の設定は確認しましたか?」**という返答が。

「え、リージョン?そんな設定あったっけ...?」

慌てて Vercel のダッシュボードを確認すると...

原因が判明

Serverless Functions のリージョンがアメリカ(iad1 / us-east-1)に設定されていました。

つまり、こういうことです:

  • SSG ページ:CDN から配信されるので速い(東京のエッジサーバーから返る)
  • SSR ページ:Serverless Function を経由するので遅い(アメリカまで往復)

日本からアクセスしているのに、動的なページだけリクエストが地球の裏側まで往復していたわけです。
そりゃ遅いわけだ...。

なるほど、Next.js の実装は悪くなかったんですね。完全に見当違いの最適化をしていました。

解決方法:Region の変更

Vercel では、Function のリージョンを設定できます。

vercel.json で設定

プロジェクトのルートに vercel.json を作成(または編集)して、以下のように設定します:

vercel.json
{
  "regions": ["hnd1"]
}

hnd1 は東京リージョンを指します。

主要なリージョン一覧

  • hnd1 - 東京(日本)
  • icn1 - ソウル(韓国)
  • sin1 - シンガポール
  • iad1 - ワシントン D.C.(アメリカ東海岸)
  • sfo1 - サンフランシスコ(アメリカ西海岸)

詳細はVercel の公式ドキュメントを参照してください。

結果

リージョンを東京に変更してデプロイし直したところ、レスポンス時間が劇的に改善しました。
体感でも明らかに速くなり、ストレスなく使えるようになりました。

まとめ

この体験から学んだこと:

1. SSG は速いのに SSR だけ遅い → Region を疑え

SSG ページは問題ないのに、動的なページだけ遅い場合は、Function Region の設定ミスの可能性が高いです。

2. コードの最適化だけが答えじゃない

「遅い = コードが悪い」と決めつけず、インフラ設定も確認しましょう。
私のように見当違いの最適化に時間を費やさないために...。

3. Vercel のデフォルト設定に注意(特に初心者)

Cloudflare Workers や Cloud Run に慣れていると、Vercel のデフォルト設定で躓くことがあります。

  • デフォルトの Function Region はアメリカ(他のサービスとは違う場合も)
  • 日本向けのサービスなら必ず hnd1(東京)を設定
  • vercel.json で簡単に設定可能

初めて Vercel を使う人は、デプロイ後すぐに Region 設定を確認しましょう。

4. 困ったら AI に聞く

今回、AI に相談しなければ、Vercel を諦めて別のサービスに移行していたかもしれません。
AI は意外なところで役に立ちます。


単純な設定ミスでしたが、パフォーマンスに大きな影響を与える重要な項目でした。
皆さんも、「Vercel が遅いな...」と感じたら、まずRegion 設定を確認してみてください!

無駄な最適化に時間を費やす前に。

Discussion

ピン留めされたアイテム
benjuwanbenjuwan

参考になる記事をありがとうございます。

昔、私もリージョン関連でタイムアウトエラーが出て詰まった記憶を思い出しました。
今回コードベースでの解決策を提示されていますが vercelのダッシュボード(GUIでの設定)からでも行えるので補足としてコメントさせていただきます。

https://zenn.dev/benjuwan/articles/7635f7f53cbfb3#リージョンをデフォルトのワシントンdcから東京や大阪など日本に変更