Contents
Next.jsとVercelによるWebアプリケーションの効率的デプロイ方法
Next.jsとVercelを組み合わせることで、現代的なWeb開発における高速性・セキュリティ・柔軟なスケーリングを実現できます。VercelはNext.jsの公式チームが運用しており、Static Generation(SG)やServer Componentsの最適化に特化しています。本記事では2023年現在の技術情報をもとに、自動スケーリング・Edge Runtime活用・セキュリティ対策といった実務で重要なトピックを解説します。
vercel.jsonとnext.config.jsの最適な設定方法
Next.jsアプリケーションをVercelに効率的にデプロイするには、vercel.jsonとnext.config.jsの設定が不可欠です。これらのファイルは、ビルド処理やAPIルートの挙動を制御し、パフォーマンスを最大限に引き出します。
Static Generation(SG)の有効化
Next.js 14以降ではStatic Generationがデフォルトで有効ですが、Vercelとの連携時に追加設定が必要な場合があります。next.config.jsには以下のように記述し、静的生成を最適化します。
|
1 2 3 4 5 |
module.exports = { output: 'export', distDir: 'out', }; |
また、vercel.jsonではSGの対象となるルートを明示的に指定できます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "builds": [ { "src": "**/*.{js,ts,jsx,tsx}", "use": "@vercel/next", "config": { "distDir": "out" } } ] } |
APIルートのキャッシュ戦略
APIルート(pages/api/*.ts)は、Edge FunctionsとしてVercelで実行されるため、キャッシュ設定が重要です。以下のようにvercel.jsonに記述することで、レスポンスを効率的にキャッシュできます。
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "routes": [ { "src": "/api/(.*)", "headers": { "Cache-Control": "public, max-age=300" } } ] } |
| 項目 | 値 | 補足 |
|---|---|---|
| キャッシュ有効期間 | 300秒(5分) | データ変更頻度が高いAPIではmax-ageを調整 |
blockquote
この設定により、リクエスト回数の削減とサーバー負荷の軽減が可能です。
自動スケーリングの仕組みと運用ベストプラクティス
Vercelはトラフィック量に応じて自動でインスタンス数を調整する機能を提供しています。これにより、コスト削減とリソース最適化が実現されます。
リソース制限の設定
Vercelプロジェクト画面の「Limits」タブから、リソース上限を明確に設定することで過剰なコストを抑えることができます。
| 項目 | 値 | 補足 |
|---|---|---|
| CPU ライミット | 4コア | 基本的なアプリケーション向け |
| メモリ ライミット | 8GB | サーバーコンポーネントを含む場合 |
blockquote
自動スケーリングはリアルタイムでのトラフィック変動に対応するため、突発的なアクセス増加にも柔軟に対応可能です。
予約スケーリングの活用方法
ピーク時とオフピーク時のトラフィック差がある場合、Scheduled Scaling(予約スケーリング)を活用すると効果的です。Vercel CLIで以下のように設定できます。
|
1 2 |
vercel scale set --min 1 --max 4 --schedule "0 9-20 * * *" |
このコマンドにより、午前9時から午後8時の間に最大4つのインスタンスを起動し、コストとパフォーマンスのバランスを取れます。
プレビュー環境の有効活用とセキュリティ対策
VercelはGitHubとの連携によってプッシュされるたびに自動でプレビューURLを作成します。この機能を活用することで、開発変更内容の即時テストが可能になります。
プレビュー環境でのワークフロー
- GitHubでPull Requestを作成
- Vercelが自動的にプレビューURLを生成
- チームメンバーが該当URLで確認
このアプローチにより、本番への影響を最小限に抑えつつ品質管理を実施できます。
アクセス制御設定
プレビュー環境は外部からアクセス可能であるため、シークレット情報の漏洩リスクが存在します。以下のような対策が可能です。
- 環境変数の分離(本番環境用とプレビュー環境用)
- IPアドレス制限によるアクセス制御
|
1 2 3 4 5 6 |
{ "env": { "NEXT_PUBLIC_API_URL": "https://api.example.com" } } |
NEXT_PUBLIC_で始まる環境変数はプレビューURLにも表示されるため、本番環境では使用しないように注意が必要です。
Edge Runtime導入による実行効率の向上
VercelのEdge Runtime(エッジランタイム)はNext.js 13以降に導入された新機能で、APIルートやServer ComponentsをグローバルなCDNで実行可能です。
API Routerの移行手順
Edge Runtimeを有効にするには、next.config.jsに以下のように設定します。
|
1 2 3 4 5 6 |
module.exports = { experimental: { edgeRuntime: true, }, }; |
コードの最適化ポイント
Edge Runtimeでは非同期処理やストレージアクセスが制限されているため、以下の最適化が必要です。
- 非同期処理を最小限に保つ
- キャッシュ戦略を明示的に設定(
Cache-Controlヘッダーなど) - データ圧縮による帯域コストの削減
カスタムドメイン設定とSSL導入ガイド
本番環境ではカスタムドメインの使用が必須です。Vercelでカスタムドメインを設定するには、以下のように手順を実施します。
DNS設定手順
- Vercelプロジェクト画面で「Domains」タブを開く
- 「Add Domain」からドメイン名を入力
-
ドメインプロバイダー(例: Cloudflare, AWS Route 53)にDNSレコードを設定
-
Aレコード:
vercel.comのIPアドレス - CNAMEレコード:
vercel.comから取得したエイリアス
SSL証明書の自動取得
Vercelはカスタムドメインに対してLet's EncryptによるSSL証明書を自動で発行します。管理者側で管理する必要はありません。
blockquote
証明書の有効期間は90日ですが、自動更新が行われるため、手動での介入が必要ありません。
CI/CDによる継続的デプロイの実装例
Next.jsアプリケーションを本番環境に安全にリリースするには、GitHub ActionsとVercelの連携が効果的です。
GitHub Actionsとの連携手順
.github/workflows/deploy.ymlを作成し、以下のように記述します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
name: Deploy to Vercel on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Deploy to Vercel uses: vercel-actions/deploy@latest with: token: ${{ secrets.VERCEL_TOKEN }} |
デプロイ後の自動テスト実施
Vercelはビルド後にUnit TestやE2E Testの自動実行も可能です。vercel.jsonに以下のように設定することで、リリース前の品質検証が自動化されます。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "builds": [ { "src": "**/*", "use": "@vercel/next", "config": { "test": true } } ] } |
まとめ
Next.jsとVercelを組み合わせることで、Webアプリケーションの高速性・セキュリティ・柔軟なスケーリングが実現できます。以下に要点を整理します。
vercel.jsonとnext.config.jsはパフォーマンスに直結するため慎重に設定- 自動スケーリングによりコスト最適化が可能
- プレビュー環境でのアクセス制御やシークレット管理を徹底
- Edge Runtime導入でグローバルなレイテンシ改善を実現
- カスタムドメインとSSL証明書の自動取得で本番環境を整備
- GitHub Actionsとの連携によりCI/CDを効率化
|
1 2 3 4 5 6 7 8 9 10 |
ここは表の前の説明文です。 | 項目 | 値 | 補足 | |------|----|------| | **速度** | 30 tok/s | RTX 5090 基準 | | **VRAM** | 17 GB | Q6_K 量子化時 | | **コスト** | 無料 | ローカル運用 | ここは表の後の説明文です。 |