Prismaとは
「Prisma」は、TypeScriptやJavaScriptを使ったアプリケーション開発でデータベースとやり取りするためのモダンなORMツールです。
prismaのインストールと初期設定
①インストール
npm install prisma --save-dev
npx prisma init
プロジェクト配下に
prisma/
├── schema.prisma
が作成されます
②接続情報の記載
.envファイルにDATABASE_URLを追加。データベースの接続情報を記述します。
Prismaスキーマの定義
以下のような形でデータモデルを定義します。
例)
// ユーザ
model User {
// ユーザID
id String @id @default(uuid()) @db.Uuid
// ユーザ名
userName String? @map("user_name") @db.VarChar(120)
// メールアドレス
email String @unique @db.VarChar(255)
// 所属部署ID
departmentId String @map("department_id") @db.Uuid
// 削除済み
isDeleted Boolean @default(false) @map("is_deleted") @db.Boolean
// ---- relation fields ----
department Department @relation(fields: [departmentId], references: [id])
@@index([departmentId])
@@map("user")
}
// 部署
model Department {
id String @id @default(uuid()) @db.Uuid
name String @db.VarChar(120)
// ---- relation fields ----
users User[]
@@map("department")
}
フォーマットをかけたい場合は以下です。
npx prisma format
データベースに適用する
npx prisma migrate dev --name <migration_name>
上記のコマンドを実行するとマイグレーションファイル作成からデータベースへの適用まで実行できます。
マイグレーションを実行すると_prisma_migrationsというテーブルに実行履歴が残ります。
このテーブルの履歴とマイグレーションファイルが一致していなかったり
失敗した履歴が残っていたりするとエラーになります。
データのリセットが必要な変更を加えた場合や履歴と不整合が起きた場合、
失敗した履歴が残っている場合等にデータをリセットするか聞かれます。
データを消してはいけない場合は必ずnを入力してください。
その後schemaの見直しを行なってください。
Do you want to continue? All data will be lost. › (y/N)
安全にデータベースに変更を反映するために、実際の運用方法としてのおすすめは以下の流れです。
① マイグレーションファイルを作成する(ローカルや開発環境で実施)
・以下のコマンドを実行するとマイグレーションファイルのみ生成され、データベースには適用されません。
ローカル環境で以下のコマンドを実行後にマイグレーションファイルのSQLを確認。
自分の入れた修正が間違っていないか確認できます。
間違えた場合はフォルダごと消してしまえばマイグレーションの実行履歴が残らないのでやり直しが簡単です。
npx prisma migrate dev --create-only
② データベースに適用する
・①で作成したマイグレーションファイルをデータベースに適用します。
・devと違い、マイグレーションファイルを作成せず、データベースのリセットも発生しません。
本番環境にマイグレーションファイルを適用したいときはこのコマンドのみ実行します。
npx prisma migrate deploy
その他、履歴に不整合が起きていたり、エラーが起きた時の対処にも使用できるコマンドです。
マイグレーションファイルを適用済みにする
npx prisma migrate resolve --applied "適用済みにしたいマイグレーションファイルのフォルダ名"
上記のコマンドはデータベースにすでに変更が入っていてマイグレーションの実行履歴が残っていない場合に適用済みであることを履歴に残します。
マイグレーションをロールバックする
npx prisma migrate resolve --rolled-back "ロールバックしたいマイグレーションファイルのフォルダ名"
上記のコマンドはエラーになったマイグレーションをロールバックしたい場合に使用できます。実行履歴のロールバックでデータベースのスキーマ自体は変更しません。
マイグレーションのエラーを解消できない場合、非推奨ですが
_prisma_migrationsテーブルのレコードを削除してマイグレーションファイルと整合性をとることも可能です。
クライアントの生成
Prismaクライアントを生成してデータベース操作を可能にします。
npx prisma generate
おわりに
エラーになった時の対処で手こずることもありますが、
履歴管理ができて変更もschema.prismaに入れるだけなのでチームでの開発に便利でした。