Chapter2: NestJSを使ってみた Prismaをインストール/設定を行う
Prev Chapter
これはなに
NestJSプロジェクトにPrismaを導入します。
このChapterでは、Prismaの機能を利用してテーブルを定義し、ブラウザUIを利用してレコードが追加するまでを行ないます。
この記事ではMySQLを利用していますが、DBの準備については記載していません。
以下のコミットでMySQLコンテナを用意してるので参考にしてもらえるといいのかも!
Prismaとは
Prisma概要
PrismaはNode.js-TypeSciptプロジェクトのために用意されたORMです。とても厳格で制約が強く型安全で、かつ直感的なインターフェースでデータベースにアクセスすることが出来ます。その他にも開発効率の向上が期待できる便利な機能があります。
Prismaの具体的な機能
Prismaの機能は以下の3つで構成されています。
機能 | 説明 |
---|---|
Prisma Client | コード記述が少なく、型安全によるミスを防ぐORM(次回Chapterで利用します) |
Prisma Migrate | カスタマイズ自在で手間のかからないマイグレーション |
Prisma Studio | データ検索や操作が手軽にブラウザで行えるUI |
Prismaを紹介した日本語訳記事もあるのでご参考に
それでは早速導入してみます。
Prismaインストール/設定
Prismaインストール
$ npm install prisma --save-dev
Prisma初期化と設定変更
正常にインストールが完了したらnpx
を使ってPrismaの初期化を行ないます。
以下のコマンドを実行すると./.env
, ./prisma/schema.prisma
ファイルが作成されます。
$ npx prisma init
✔ Your Prisma schema was created at prisma/schema.prisma
You can now open it in your favorite editor.
warn You already have a .gitignore. Don't forget to exclude .env to not commit any secret.
Next steps:
1. Set the DATABASE_URL in the .env file to point to your existing database. If your database has no tables yet, read https://pris.ly/d/getting-started
2. Set the provider of the datasource block in schema.prisma to match your database: postgresql, mysql, sqlite, sqlserver or mongodb (Preview).
3. Run prisma db pull to turn your database schema into a Prisma schema.
4. Run prisma generate to generate the Prisma Client. You can then start querying your database.**
.env
ファイルが生成されます。
.gitignore
にない場合は追加してください。
schema.prisma
このファイルは利用するDatasourceの設定やテーブル定義で利用します。
本稿ではMySQLを利用するのでdatasourceのproviderをmysqlに変更します。
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
.env
DBとの接続先の設定指定ファイルです。
こちらもMySQLを使うので、下記のように用意したdatabase URLに変更します。
DATABASE_URL="mysql://USER:PASSWORD@HOST:PORT/DATABASE"
Prismaモデルの定義
設定が完了したところでテーブルを定義していきましょう。
テーブルは./prisma/schema.prisma
で定義します。
今回テーブル名、カラム名はスネークケースを利用しています。
Prisma公式ドキュメントではアッパーキャメルケースを利用しているので、そちらの方がいい方は適宜書き替えてください。アッパーキャメルケースの場合、以下のコードの@@map("user")
は不要になります。
model User {
id Int @id @default(autoincrement())
email String @unique
name String @db.VarChar(10)
created_at DateTime @default(dbgenerated("NOW()")) @db.Timestamp(0)
updated_at DateTime @default(dbgenerated("NOW() ON UPDATE CURRENT_TIMESTAMP")) @db.Timestamp(0)
@@map("user") # これがない場合、テーブル名がモデルと同じ文字列になる
}
Prisma Migration
Prismaモデルが用意できたら、マイグレーションを行ないます。
以下のコマンドを実行すれば、簡単にDBのマイグレーションが実行できます。
用意したDBが起動中であることを確認して、以下を行ってください。
$ npx prisma migrate dev --name init
このコマンドは、以下のことが行われています。
-
./prisma/
配下にmigrationsディレクトリが作成され、SQLが生成 - 接続しているDBにテーブルを生成
prisma
├── migrations
│ ├── 20220308080922_init
│ │ └── migration.sql
│ └── migration_lock.toml
└── schema.prisma
DBにアクセスしてテーブルが生成されているか確認しましょう。
無事成功していたら、Prismaモデルで定義した以下のようなuserテーブルが生成されています。
mysql> desc user;
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
| id | int | NO | PRI | NULL | auto_increment |
| email | varchar(191) | NO | UNI | NULL | |
| name | varchar(10) | NO | | NULL | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| updated_at | timestamp | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+------------+--------------+------+-----+-------------------+-----------------------------------------------+
5 rows in set (0.02 sec)
Prisma Studio
無事にマイグレーションが行われたので、今度はPrisma Studioを利用してDBを確認しましょう。
以下のコマンドを叩くことで、簡単にPrisma Studioを立ち上げることが出来ます。
このコマンドを実行する前にDBが起動中であることを確認してください。
npx prisma studio
このコマンドを実行すると自動的にブラウザで http://localhost:5555
が開きPrismaモデル選択画面が開きます。
User
を選択すればテーブルのレコードが確認できます。
試しにAdd record
ボタンを押して、レコードを追加してみましょう。
Save change
ボタンを押せば、レコードが保存されます。
MySQLのコンテナで確認したところ、無事レコードが確認できました。
これでPrismaの設定は完了となります。
おわり
今回修正した内容
次は実際にNestJSのプロジェクトでPrisma Clientを利用しコードを書いていきます。
作成中
Discussion