brew services で管理するpsycopg2 が必要settings.py の DATABASES をSQLiteからPostgreSQLに書き換えるpython manage.py migrate が通るかどうかで判断できるHomebrewで入れたPostgreSQLは brew services でバックグラウンドサービスとして管理する。
# 起動
brew services start postgresql@17
# 状態確認
brew services list
# 接続確認(デフォルトユーザーはMacのログインユーザー名)
psql postgres
# postgres=# が表示されればOK。終了は \q
💡 ポイント:
psql postgresで接続できれば、PostgreSQLが正常に動作している。
-- ユーザー作成
CREATE USER myuser WITH PASSWORD 'mypassword';
-- データベース作成
CREATE DATABASE mydb OWNER myuser;
-- 確認
\l -- データベース一覧
\du -- ユーザー一覧
-- 終了
\q
💡 ポイント:
postgresスーパーユーザーをそのまま使わず、専用ユーザーを作るのが最小権限の原則。Supabaseのanon keyとservice_role_keyの使い分けと同じ考え方。
# プロジェクトフォルダ作成
mkdir myproject && cd myproject
# 仮想環境作成・有効化
python3 -m venv venv
source venv/bin/activate # (venv) が表示されればOK
# パッケージインストール
pip install django psycopg2-binary
# Djangoプロジェクト作成
django-admin startproject config .
| パッケージ | 用途 | 備考 |
|---|---|---|
psycopg2-binary | ローカル開発用 | ビルド不要で楽 |
psycopg2 | 本番環境用 | ビルド必要・パフォーマンス高 |
💡 ポイント:
psycopg2はDjangoとPostgreSQLの通訳役。これがないと接続できない。
settings.py の設定config/settings.py の DATABASES を書き換える:
# Before(デフォルト)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# After(PostgreSQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
💡 ポイント:
PASSWORDなどの機密情報は.envに切り出し、.gitignoreに追加する。GitHubにpushするとパスワードが世界中に公開されてしまう。
# .gitignore に追加
.env
# マイグレーション実行
python manage.py migrate
# 開発サーバー起動
python manage.py runserver
マイグレーションの2段階フロー
models.py(テーブル定義)
↓ python manage.py makemigrations
マイグレーションファイル(差分の記録)
↓ python manage.py migrate
PostgreSQLのテーブル(実際に作成)
psqlで確認(おまけ)
psql -U myuser -d mydb
\dt # django_migrations や auth_user が見えればOK
💡 ポイント:
makemigrations(差分記録)とmigrate(DB反映)の2段階になっているのがDjangoの特徴。
| ミス | 改善策 |
|---|---|
postgres スーパーユーザーをそのまま使う | 専用ユーザー・DBを作成する |
PASSWORD を settings.py に直書き | .env に切り出して .gitignore に追加 |
本番環境で psycopg2-binary を使う | 本番は psycopg2(ビルドあり)を使う |
makemigrations を忘れて migrate だけ実行 | モデル変更後は必ず makemigrations から |
最小権限の原則(専用ユーザー作成)はSupabaseの
anon key/service_role_keyの使い分けと同じ考え方。セキュリティの原則は環境が変わっても共通している。
makemigrationsとmigrateの2段階フローはGitのステージング(git add→git commit)に似た感覚で覚えると整理しやすい。