データベース環境変数の設定
さまざまなプラットフォームでのDATABASE_URLと関連環境変数の設定方法。.envファイル、Vercel、Heroku、AWS、Docker、CI/CDパイプラインを解説します。
Best Practices
詳細な説明
データベース接続の環境変数
データベース接続文字列を環境変数に保存することは、認証情報をコードベースから除外するための標準的なアプローチです。
.envファイル(ローカル開発)
プロジェクトルートに.envファイルを作成します:
# データベース
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/myapp"
# 個別変数(代替)
DB_HOST="localhost"
DB_PORT="5432"
DB_NAME="myapp"
DB_USER="postgres"
DB_PASSWORD="postgres"
DB_SSL="false"
フレームワークまたはdotenvのようなライブラリで読み込みます:
require('dotenv').config();
// Next.jsでは.env.localが自動的に読み込まれます
プラットフォーム別の設定
Vercel
vercel env add DATABASE_URL production
# プロンプトが表示されたら接続文字列を貼り付け
またはVercelダッシュボード:Project Settings > Environment Variables。
Vercelはデータベース統合(Vercel Postgres、Neon、PlanetScale)の環境変数を自動的に注入します。
Heroku
heroku config:set DATABASE_URL="postgresql://user:pass@host:5432/db"
Herokuはデータベースアドオン(Heroku Postgres、JawsDB MySQLなど)を追加するとDATABASE_URLを自動設定します。
AWS(ECS / Lambda)
ECSの場合、タスク定義で環境変数を設定します:
{
"containerDefinitions": [{
"environment": [
{ "name": "DATABASE_URL", "value": "postgresql://..." }
]
}]
}
Lambdaの場合、関数設定で設定するか、ランタイムルックアップでAWS Secrets Managerを使用します。
Docker / Docker Compose
services:
app:
environment:
- DATABASE_URL=postgresql://user:pass@postgres:5432/mydb
# または.envファイルを参照:
env_file:
- .env
複数環境
環境ごとに別の.envファイルを使用します:
.env # デフォルト / 共有値
.env.local # ローカルの上書き(gitignore対象)
.env.development # 開発環境固有
.env.production # 本番環境固有(gitignore対象)
.env.test # テスト環境固有
Next.jsはこれらを優先順位に従って読み込みます。.env.localの変数は.envを上書きします。
CI/CDパイプライン
GitHub Actions
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
steps:
- run: npm test
GitLab CI
variables:
DATABASE_URL: $DATABASE_URL # GitLab CI/CD設定で設定
セキュリティチェックリスト
.env、.env.local、.env.productionを.gitignoreに追加- 本番ではプラットフォーム固有のシークレットストレージを使用
- 完全な
DATABASE_URLをログに出力しない — パスワードをマスク - 環境ごとに異なる認証情報を使用
- 認証情報を定期的にローテーション
ユースケース
ローカル開発、ステージング、本番環境にまたがる適切な環境変数管理で新プロジェクトをセットアップする、またはハードコードされた認証情報から環境ベースの設定に移行する。