📑

Remix に Prisma と PostgreSQL を導入する

2024/03/24に公開

目的

Remix を使用したフルスタックアプリケーションを開発します。

この記事では、 Prisma の初期設定と、 Docker コンテナを使用した PostgreSQL サーバを設定します。

環境

環境 バージョン
Node.js 20.11.1
Yarn 4.1.1
Remix 2.8.1
Vite 5.1.0
PostgreSQL 15.x
Prisma CLI 5.11.0

DB サーバを設定

概要

開発するアプリケーションは Relational Database ( RDB ) の使用を既に決めており、 PostgreSQL を選定しました。

ここでは開発環境用に PostgreSQL サーバを準備します。
バージョンは v16 までリリースしていますが、Prisma のサポート観点から v15 を導入します。
また、導入や起動が容易になるため、Docker を使用します。

作業

Docker Compose 設定ファイルを生成します。

touch ./docker-compose.yml

docker-compose.yml ファイルに以下の通り記述します。

version: '3.9'
services:
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=sample_development
    ports:
      - '54320:5432'
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  db_data:
    driver: local

コンテナを起動します。

docker compose up -d

以下のコマンドで起動確認できたら完了です。

docker compose ps
NAME                        IMAGE                COMMAND                   SERVICE   CREATED          STATUS          PORTS
remix_fullstack_blog-db-1   postgres:15-alpine   "docker-entrypoint.s…"   db        45 minutes ago   Up 45 minutes   0.0.0.0:54320->5432/tcp

もしも、コンテナを停止する場合は、以下のコマンドを使用してください。

# コンテナを停止
docker compose stop

# コンテナを削除
docker compose down

Prisma 初期設定

概要

これから開発にあたり RDB の操作を簡略化するため、 ORM を導入します。
TypeScript プロジェクトにおける ORM は、以下の選択肢が考えられます。

私は TypeScript のプロジェクトやライブラリの知見が少ないため、Web に情報が多い Prisma を選択しました。

作業

Prisma CLI を PC にインストールします。

npx prisma

Prisma の初期設定コマンドを実行します。

npx prisma init

以下2つのファイルが生成されたことを確認します。

prisma/schema.prisma
.env

.env は以下の記述に置換します。
また、.env はバージョン管理されないよう .gitignore に設定してください。

DATABASE_URL="postgresql://postgres:password@localhost:54320/sample_development"

余談として、 DATABASE_URL の設定を補足します。

各項目 設定値の説明
postgresql:// 固定です。
postgres:password データベースユーザ名とパスワードを : で結合します。
localhost ホスト名です。ローカル環境なので localhost を設定します。
54320 データベースサーバが実行しているポートです。docker-compose.yml の設定値です。
sample_development 今回作成するデータベース名です。

まとめ

実装コードは以下 PR の通りです。
https://github.com/masayuki-0319/remix_fullstack_blog/pull/2

参考 URL

Discussion