最近流行りのprismaを使ってみた。環境構築編
TypeScript で使える OR マッパー。
別の OR マッパーだと TypeORM がある。
今のプロジェクトでTypeORMは使っているがどう違いがあるのか気になったのでやってみる。
prisma のインストール
npm i prisma
初期化する
npx prisma init
このコマンドで prisma を使うための準備ができる。
ルートのファルダに prisma 用のフォルダと.env ファイルが作成される
prisma/migrations/schema.prisma
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url = env("DATABASE_URL") }
.env
# Environment variables declared in this file are automatically made available to Prisma. # See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB (Preview). # See the documentation for all the connection string options: https://pris.ly/d/connection-strings DATABASE_URL="mysql://username:password@localhost:3306/mydb"
.env の環境設定ファイルから接続情報を読み込むようになっているので修正する。
テーブル情報を追加する
こんな感じで追加してみた。
prisma/migrations/schema.prisma
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url = env("DATABASE_URL") } model Post { id Int @id @default(autoincrement()) content String postedBy String trackingCookie String createdAt DateTime @default(now()) }
- @id
- 主キーの設定
- @default()
- デフォルトでどうするかの設定ができる auto_increment やら初期値やら設定ができる
テーブル定義を使ってテーブルを作成する
以下のコマンドを実行する
npx prisma migrate dev --name init
mysql> show tables; +-----------------------------+ | Tables_in_bulletin-board-db | +-----------------------------+ | Post | | _prisma_migrations | +-----------------------------+ 2 rows in set (0.00 sec)
出来ている!
簡単にできるから便利ね。
もっと色々使っていこう。
テーブル作成時に出るエラー
Environment variables loaded from .env Prisma schema loaded from prisma/schema.prisma Datasource "db": MySQL database "bulletin-board-db" at "172.22.0.2:3306" Error: P3014 Prisma Migrate could not create the shadow database. Please make sure the database user has permission to create databases. Read more about the shadow database (and workarounds) at https://pris.ly/d/migrate-shadow Original error: Error code: P1010 User `okarin` was denied access on the database `bulletin-board-db`
こんな感じのエラーが出た。
権限エラーのようだがよくわからなかったので shadow database のドキュメントを見に行った。
MySQL だと以下の権限が必要らしい
Database user must have CREATE, ALTER, DROP, REFERENCES ON *.* privileges
というわけで実行してみた。
GRANT CREATE, ALTER, DROP, REFERENCES ON `bulletin-board-db`.* TO okarin@%;
変わらない。。。いったいなぜなんだ。。。 しゃあなしでユーザーを root に変えたら動いた。
DATABASE_URL="mysql://root:password@localhost:3306/mydb"
動くだけならいいけど気になる。 自分でも調べますが、分かる方がいたら教えてください。。。