俺のVercelは遅かった - Function Regionの罠
はじめに
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 を作成(または編集)して、以下のように設定します:
{
"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
参考になる記事をありがとうございます。
昔、私もリージョン関連でタイムアウトエラーが出て詰まった記憶を思い出しました。
今回コードベースでの解決策を提示されていますが vercelのダッシュボード(GUIでの設定)からでも行えるので補足としてコメントさせていただきます。
ありがとうございます👍