Next.js + PostgreSQL を使った Web アプリケーション
- Frontend/Backend: Next.js 15 (App Router)
- Database: PostgreSQL 17
- ORM: Drizzle ORM
- Styling: Tailwind CSS
- Container: Docker & Docker Compose
- Language: TypeScript
- Docker Desktop がインストールされていること
git clone <repository-url>
cd lazy-bear.env.exampleをコピーして.envファイルを作成し、your_password_hereを任意のパスワードに置き換えてください。
cp .env.example .envコンテナ内のアプリケーションがVertex AIなどのGoogle Cloudサービスにアクセスするために、ローカル環境でGoogle Cloud CLIの認証設定を行う必要があります。docker-compose.ymlの設定により、ローカルの認証情報がコンテナに共有されます。
-
Google Cloud CLIをインストールします。 公式ドキュメントを参考に、お使いのOSに合わせてインストールしてください。
-
アプリケーションのデフォルト認証情報でログインします。 以下のコマンドを実行するとブラウザが開き、認証を求められます。
gcloud auth application-default login
-
プロジェクトを設定します。
.envファイルに記載したGOOGLE_CLOUD_PROJECTと同じプロジェクトIDを設定してください。gcloud config set project <your-project-id>
Docker コンテナをビルドして起動します。初回実行時には、必要な Docker イメージがダウンロードされ、npm パッケージがインストールされます。
# フォアグラウンドで起動(ログを確認しながら作業する場合)
docker compose up --build
# バックグラウンドで起動(ターミナルを専有しない場合)
docker compose up -d --build- Next.js アプリ: http://localhost:3000
- PostgreSQL: localhost:5432
# コンテナ起動
docker compose up
# コンテナ停止
docker compose down
# ログ確認
docker compose logs app
docker compose logs database
# データベースに直接接続
docker exec -it lazy_bear_database psql -U postgres -d lazy_bear_devデータベースのテーブル構造(スキーマ)は、マイグレーションファイルを通して管理・共有されます。
他の開発者が行ったスキーマ変更をローカルのデータベースに反映させるには、Gitで最新のソースコード(新しいマイグレーションファイルを含む)を取得した後、以下のコマンドを実行します。
docker compose exec app npm run db:migrate注意: スキーマ定義を直接変更していない場合は、db:generateコマンドを実行しないでください。意図しないマイグレーションファイルが生成され、コンフリクトの原因となります。
テーブルやカラムの追加・変更など、スキーマ定義 (app/src/lib/db/schema/ 内のファイル) を変更した開発者は、以下の手順を実施する責任があります。
-
マイグレーションファイルを生成する スキーマ定義の変更後、データベースへの変更内容を記述したSQLファイルを生成します。
docker compose exec app npm run db:generate生成されたSQLファイル (
app/src/lib/db/migrations/*.sql) は、必ずGitにコミットしてチームで共有してください。 -
マイグレーションを適用する 生成したSQLファイルを自身のローカルデータベースに適用し、動作確認を行います。
docker compose exec app npm run db:migrate
Postico2 や pgAdmin4 などの GUI ツールでデータベースに接続する際のパラメータです。
| パラメータ | 設定値 |
|---|---|
| Host | localhost |
| Port | 5432 |
| User | postgres |
| Password | .envファイルで設定したパスワード |
| Database | lazy_bear_dev |
.envファイルは Git で管理されません。- 初回起動時は Docker イメージのダウンロードに時間がかかります。
- データベースのデータは
postgres_dataボリュームに永続化されます。