Contents
VercelでのNext.jsデプロイ手順
Next.jsアプリケーションをVercelにデプロイする際には、プロジェクト構成からCI/CD設定までの一連の流れがあります。以下に具体的な手順を解説します。
プロジェクト構成の基本設定
create-next-appで生成されたプロジェクトをベースに、vercel.jsonファイルでビルド出力ディレクトリや環境変数を指定します。また、Vercel CLIを使用することで、ローカルでのデプロイテストが可能になります。
npm install -g vercelでCLIをインストール-
プロジェクトルートに
vercel.jsonを作成し、以下のように設定する:
json
{
"version": 2,
"builds": [
{ "src": "next.config.js", "use": "@vercel/next" }
],
"routes": [
{ "src": "/api/(.*)", "dest": "/api/$1" }
]
} -
vercelコマンドでデプロイを実行
CI/CDパイプラインの構築
VercelはGitHubやGitLabとの連携を自動化しており、プッシュ時に自動的にビルドとデプロイが行われます。手動デプロイも可能ですが、運用負荷を抑えるためには自動化が推奨されます。
| デプロイタイプ | 特徴 | 適用シーン |
|---|---|---|
| 自動デプロイ | プッシュ時に即時反映 | スプリント開発、継続的な運用 |
| 手動デプロイ | CLIまたはUIから実行可能 | セキュリティチェックが必要な環境 |
環境変数管理のベストプラクティス
Vercelではプロジェクト設定で環境変数を管理でき、シークレットデータは自動的に暗号化されます。以下のように.env.localファイルに記述することでローカル開発でも利用可能です。
|
1 2 3 |
NEXT_PUBLIC_API_KEY=your_api_key DATABASE_URL=postgres://user:password@host/dbname |
注意:
NEXT_PUBLIC_で始まる変数はクライアントサイドにも公開されるため、機密情報には絶対に使用しないこと。誤ってAPIキーなどの敏感情報を漏洩させるとセキュリティリスクが高まります。
他プラットフォームへのNext.jsデプロイ時の注意点
Vercel以外の環境(例: AWS AmplifyやNetlify)にNext.jsをデプロイする場合、サーバーレス関数やCDN設定が異なるため、事前準備が必要です。
サーバーレス関数の互換性
他プラットフォームではNext.jsのAPI RoutesやServer Componentsを動かすために、以下のような手順が必要です:
- AWS Lambdaなどに適したランタイム環境を構築
- Node.jsバージョンの互換性を確認(例: Vercelは最新バージョンをサポート)
| プラットフォーム | サポート対象 | 設定手順 |
|---|---|---|
| Netlify | Serverless Functionsのみ | netlify.tomlで関数のエントリポイント指定 |
| AWS Amplify | Lambda Function + API Gateway | デプロイテンプレートをカスタマイズ |
注意: AWS LambdaやNetlifyでは、Node.jsバージョンがVercelに比べて古く、Next.jsの最新機能に対応していない場合があります。公式ドキュメントで対応バージョンを確認してください。
CDNやロードバランサーの設定
Vercelは独自のグローバルCDNを提供しているため、パフォーマンス最適化が容易です。他のプラットフォームでは以下のような手順が必要です:
- CloudflareやAWS CloudFrontを導入し、キャッシュ戦略を設定
- ロードバランサーを介して複数サーバーの負荷分散を行う
重要: 他プラットフォームではVercelほどのEdge Functionsによるネットワーク最適化が難しいため、パフォーマンス面で劣ることがあります。
VercelとNext.jsの連携による特化機能
VercelはNext.jsとの連携を前提に設計されており、Edge FunctionsやAPI Routesなどの特化機能で性能を飛躍的に向上させます。
Edge Functionsの最適化
Vercel独自のネットワークインフラにより、Edge FunctionsはグローバルなCDNノードから実行され、レイテンシが大幅に削減されます。これは以下のようなシーンで有効です:
- リアルタイムチャットや通知機能(低遅延が必要)
- グローバルユーザー向けの高速APIレスポンス
API Routesの自動スケーリング
VercelではNext.jsのAPI Routeが必要に応じて自動的にリソースを増減させるため、ピーク時の負荷にも耐えられます。一方で他プラットフォームでは手動での設定が必要なケースが多いです。
| プラットフォーム | スケーリング方式 | 対応コスト |
|---|---|---|
| Vercel | 自動スケーリング(無制限) | なし |
| AWS Lambda | 手動設定(プロビジョニング) | 高め |
料金体系と運用コスト比較
Vercelの料金体系はプロジェクト規模に応じて柔軟に対応しており、他プラットフォームとの比較で以下のような特徴があります。
課金プランの選定基準
Vercelのフリープランでは、月間100万リクエストと5GBまでのデータ転送が無料です。ただしSSGビルド回数やコンテナ数に制限があります。
| プラン種別 | 月間リクエスト上限 | コンテナ数制限 |
|---|---|---|
| Free | 1,000,000 | 3 |
| Pro | 無制限 | 25 |
注意: カスタムドメインや高負荷なAPI利用など、フリープランの上限を超える場合、課金プランへの移行が必須です。
SSG・SSR・SRGにおけるパフォーマンス差異
Next.jsのレンダリングモード(SSG/SSR/SRG)とVercelのキャッシュ戦略が組み合わさると、パフォーマンスに大きな影響を与えるため、利用シーン別の選択が必要です。
静的生成時のビルド時間
SSGではすべてのページを事前にビルドするため、初期ビルド時間が長くなる可能性があります。Vercelはこの過程を最適化しており、以下のように効率化されています:
- Incremental Static Regeneration(ISR): リアルタイム更新が可能で、ビルド時間を短縮
| モード | ビルド時間 | 対応コスト |
|---|---|---|
| SSG | 長い(静的ページ数に依存) | 低め(ISR利用時) |
| SSR | 短い(動的な処理のみ) | 高め(リクエスト回数に応じて) |
リアルタイムレンダリングの遅延
SSRではサーバーでページを生成するため、最初のレンダリングがやや遅れる傾向があります。VercelはEdge Functionsによるキャッシングによりこの遅延を補正しています。
実測データ: SSG(ISR利用)の場合、平均レスポンス時間は50ms、SSRでは120msと差が生じる(Vercel公式ドキュメントより)。