今回は、本番PostgreSQLデータベースを pg_dump でバックアップし、Next.jsプロジェクト内の backups/ に保存する方法でまとめます。
セキュリティについては、.gitignore を使って、GitHubへの誤コミットを防ぐ運用にします。
1. PostgreSQLのツールをインストールする
Macのターミナルで実行。
brew install libpq
インストール後、pg_dump を使えるようにする。
brew link --force libpq
確認:
pg_dump --version
バージョンが表示されればOK。
※ pg_dump はNeon側のPostgreSQLと同じか新しいメジャーバージョンを使用する。
2. プロジェクトのフォルダに移動する
ターミナルでNext.jsプロジェクトに移動。
cd ~/develop/app/find-good-pnpm
現在のフォルダを確認。
pwd
3. .gitignore にバックアップフォルダを追加する
プロジェクト直下の .gitignore に以下を追加。
# Database backups
/backups/
これで backups/ 内のファイルは、新しくGitに追加されなくなる。
- バックアップフォルダを作成する
mkdir -p backups
chmod 700 backups
chmod 700 は、フォルダへのアクセスを原則として自分のユーザーだけに制限する設定。
5. Neonから本番DBの接続URLを取得する
- Neon Console にログイン
- 対象のプロジェクトを選択
- 本番ブランチと対象データベースを選択
- 「Connect」から接続文字列を取得
- Connection poolingをOFF にして直接接続URLをコピー
接続URLは次のような形式。
postgresql://USER:PASSWORD@HOST/DBNAME?sslmode=require
6. 接続URLをターミナルに設定する
接続URLをコマンド履歴に残しにくくするため、次のコマンドを使う。
read -s "DATABASE_URL?Neonの直接接続URL: "
export DATABASE_URL
echo
表示された入力待ちの状態で、Neonの接続URLを貼り付けてEnter。
入力したURLは画面に表示されない。
※ この環境変数は、基本的に現在のターミナルセッションだけで使います。
7. 本番DBのバックアップを取得する
以下を実行。
pg_dump -Fc -v \
-d "$DATABASE_URL" \
-f "backups/find-good-$(date +%Y%m%d-%H%M%S).dump"
各オプションの意味:
オプション 意味
-Fc 復元しやすいカスタム形式
-v 実行状況を表示
-d 接続先のDB
-f バックアップの保存先
成功すると、例えば次のようなファイルが作成される。
find-good-pnpm/
└── backups/
└── find-good-20261101-130000.dump
8. バックアップを確認する
ファイルが作成されたか確認。
ls -lh backups/
ファイルの権限を自分だけに制限する。
chmod 600 backups/*.dump
バックアップの内容が読み取れるか確認。
pg_restore -l backups/find-good-20261101-130000.dump
※ ファイル名は実際に作成されたものに変更して下さい。
pg_restore -l は内容一覧の確認であり、復元成功の保証ではない。重要なDBなので、別のテスト用DBへの復元確認も推奨。
9. GitHubにアップロードされないことを確認する
git check-ignore -v backups/*.dump
例えば次のように表示されればOK。
.gitignore:...:/backups/ backups/find-good-20261101-130000.dump
さらに確認するなら:
git status --short
backups/ が新規ファイルとして表示されなければ、通常の git add . では追加されない。
10. 接続情報を削除する
バックアップ取得後、ターミナルの環境変数から接続URLを削除する。
unset DATABASE_URL
注意点
- .gitignore は誤コミット防止であり、暗号化ではない。
- バックアップにはユーザー情報や認証関連データが含まれる可能性がある。
- Macの紛失対策としてFileVaultを有効にしておく。
- バックアップをMac内だけに保存すると、故障時に失われるため、将来的には暗号化したコピーを別の場所にも保存する。
- 本番DBへの接続には、必ず正しい本番ブランチとデータベースを指定する。