問題の発覚
Vercelでプレビューデプロイを実行したところ、以下のエラーが発生しました:
engineer_blog_comments: Create database branch for deployment Branch limit reached. Upgrade your plan or delete unused branches. Neonの無料プランでは、データベースブランチが最大10個までという制限があり、それに達してしまったようです。
原因の調査
Vercel統合Neonの動作
VercelとNeonを統合すると、デフォルトで以下のような動作になります:
- Production環境(本番): メインのデータベースブランチを使用
- Preview環境(プレビュー): 各プレビューデプロイごとに新しいブランチを自動作成
つまり、PRを作成するたび、またはプレビューデプロイのたびに、Neon側で新しいデータベースブランチが作成されます。
なぜブランチが増えるのか
- 新しいPRを作成 → プレビューデプロイ実行
- Vercelが自動的にNeonブランチを生成(例:
preview/feature/r2e-frontend) - PRをマージしてもブランチは残る
- 新しいPRを複数作成 → ブランチが増え続ける
- 10個に達するとエラー
対処方法: 固定プレビューブランチを使用
すべてのプレビューデプロイで同じ固定ブランチを使用するように設定することで、新しいブランチが作成されなくなります。
設定手順
1. Neon Consoleで固定ブランチを作成
- Neon Consoleにアクセス
- プロジェクト「engineer_blog_comments」を選択
- 左サイドバーの「Branches」をクリック
- 「Create Branch」をクリック
- ブランチ名:
preview(任意の名前でOK) - 「Branch from」:
mainを選択 - 作成ボタンをクリック
2. 固定ブランチの接続文字列を取得
作成したブランチを選択し、Connection DetailsからPOSTGRES_URLをコピーします。
postgresql://user:pass@ep-xxx-pooler.region.neon.tech/neondb?sslmode=require 3. Vercel CLIで環境変数を設定
Preview環境とDevelopment環境に、固定ブランチのPOSTGRES_URLを設定します:
# Preview環境に設定 echo "固定ブランチのPOSTGRES_URL" | vercel env add POSTGRES_URL preview # Development環境にも設定(ローカル開発用) echo "固定ブランチのPOSTGRES_URL" | vercel env add POSTGRES_URL development これにより:
- ✅ Production環境: 本番データベース(mainブランチ)を使用
- ✅ Preview環境: 固定プレビューブランチを使用(新しいブランチは作成されない)
- ✅ Development環境: 固定プレビューブランチを使用
設定の確認
環境変数が正しく設定されたか確認:
vercel env ls | grep POSTGRES_URL 出力例:
POSTGRES_URL Encrypted Development X ago POSTGRES_URL Encrypted Preview X ago 重要: Production環境にはPOSTGRES_URLを設定しないことで、本番データベースが使用されます。
既存の未使用ブランチの削除
既に10個に達している場合は、未使用のブランチを削除する必要があります。
Neon Consoleでの削除手順
- Neon Console → プロジェクト「engineer_blog_comments」
- 「Branches」をクリック
- 未使用のプレビューブランチを確認(例:
preview/feature/*,preview/fix/*など) - 各ブランチの右側「...」メニューから「Delete」を選択
注意: mainブランチは削除しないでください。本番環境で使用されています。
推奨される運用
定期的なクリーンアップ
- マージ済みPRのプレビューブランチは定期的に削除
- アクティブなPRのブランチのみ保持
- ブランチ数が上限(9個)に近づいたら未使用ブランチを削除
スクリプト化(オプション)
削除手順をスクリプト化することも可能です:
# scripts/cleanup-neon-branches.sh #!/bin/bash # 未使用のNeonプレビューブランチを削除するためのスクリプト # 使用法: Neon Console (https://console.neon.tech) で手動削除を行うか、 # Neon CLIを使用してブランチをリスト・削除します set -e echo "==========================================" echo "Neonプレビューブランチ削除ガイド" echo "==========================================" echo "" echo "このスクリプトは、Neon Consoleでのブランチ削除手順を案内します。" echo "" echo "手順:" echo "1. https://console.neon.tech にアクセス" echo "2. プロジェクト「engineer_blog_comments」を選択" echo "3. 左サイドバーの「Branches」をクリック" echo "4. 以下のブランチを削除(mainブランチは削除しない):" echo "" echo " 削除対象(未使用のプレビューブランチ):" echo " - preview/feature/*" echo " - preview/fix/*" echo " - preview/chore/*" echo " - その他の古いプレビューブランチ" echo "" echo "5. 各ブランチの右側にある「...」メニューから「Delete」を選択" echo "" echo "⚠️ 注意:" echo " - mainブランチは削除しないでください" echo " - 現在使用中のプレビューブランチは削除しないでください" echo " - 削除後、新しいプレビューデプロイで新しいブランチが作成されます" echo "" echo "現在のNeonブランチ数が10/10の場合は、" echo "上記の手順で削除してから新しいデプロイを行ってください。" echo "" まとめ
- 問題: Vercel統合Neonでプレビューデプロイごとに自動ブランチが作成され、無料プランの上限(10個)に達した
- 解決: 固定プレビューブランチを使用する設定で、新しいブランチの作成を防止
- 設定: Vercel CLIでPreview環境に固定ブランチの
POSTGRES_URLを設定 - 運用: 未使用ブランチを定期的にクリーンアップ
これで、プレビューデプロイ時に新しいブランチが作成されなくなり、ブランチ数の上限問題を回避できます。
Top comments (0)