Prisma入門
はじめに
Prismaを仕事で使うことになったので、基本的な役割や書き方を整理します。
Prismaとは
PrismaはオープンソースのORM(Object Relational Mapping)サービスです。
ちなみにORMとは、RDBのデータ操作をオブジェクト指向型言語の書き方で行うプログラミング手法です。オブジェクトに定義したメソッドで、SQLを書かずにデータベースの操作ができます。
その中でもPrismaは、Node.js + TypeScript の開発に適したORMだと、公式に記載されています。
公式トップ
" Next-generation Node.js and TypeScript ORM "
Prismaクライアントの説明
" Prisma Client can be used in any Node.js (supported versions) or TypeScript backend application (including serverless applications and microservices). "
初期セットアップ
TypeScriptのプロジェクトで、Prismaをインストールします。
npm install prisma --save-dev
Prisma CLIで初期化コマンドをたたきます。sqliteの部分は利用するデータベースにあわせ変更してください。
npx prisma init --datasource-provider sqlite
これらを行うと、あなたのTypeScriptプロジェクトにprisma
ディレクトリが作成されます。その中にschema.prisma
ファイルが作成されます。また、ルートディレクトリ配下に.env
ファイルも作成されるはずです。
準備は以上です。
モデル定義
先程の初期化コマンドで作成されたschema.prisma
にモデル定義をします。
書き方はこんな感じです。
model "テーブル名" {
"キー1" "キー1の型" @"Attribute"
"キー2" "キー2の型" @"Attribute"
"キー3" "キー3の型" @"Attribute"
...
}
Attributeとはキーに対する設定で、必要なければ書く必要はありません。
しかし、各モデルには少なくとも以下のうち1つを設定しなければなりません。
- @unique ...ユニーク属性
- @@unique ...複合ユニーク属性
- @id ...ID
- @@id ...複合ID
これらの他にもAttributeの種類はあります。
以下はモデル定義の実装例です。
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
マイグレーション
schema.prisma
のモデル定義をもとにマイグレーションを行っていきます。
以下のコマンドをたたき、テーブルの作成を行います。
npx prisma migrate dev --name init
このコマンドで2つのことを実行します。
-
prisma/migrations
ディレクトリにmigration.sql
ファイルを作成 - データベースに対してSQLマイグレーションを実行
migration.sql
には、先程schema.prisma
に定義したモデルの通りにSQL文が記述されています。
実際にデータベース内にテーブルが作成されているのか確認するため、Prisma Studioを以下コマンドで立ち上げます。
npx prisma studio
自動でPrisma Studioが立ち上がり、作成したデータベースを選択すると、空のテーブルが作成されていることを確認できます。
おわりに
ORMは、簡単にデータベース操作を行うことができます(複雑な操作には向かないようですが)。
これからたくさん使ってみて、感じたメリデメも追記していけたらと思います。
Discussion