概要
TypeORM
を普段使っていたがPrisma
を使ってみると素晴らしかった(TypeORMがイケていない訳ではない)のでまとめる
Prismaは、PostgreSQL、MySQL、SQL Server、SQLite、MongoDB、CockroachDB(プレビュー)用のオープンソースデータベースツールキットにより、アプリケーション開発者がより速く構築し、エラーを少なくすることを支援します。
やり方
依存関係をインストール
# package.jsonを生成する
npm init -y
# --save-dev プログラムの実行ではなくビルドや開発時に実行する
npm install prisma typescript ts-node @types/node --save-dev
# tsconfig.jsonの生成
npx tsc --init
TypeScriptのコンパイラ設定
-
experimentalDecorators
:デコレータの実験的なサポートを有効 -
target
:JSの出力バージョン -
lib
:コンパイルする際に使用する組み込みライブラリ -
module
:出力するjsのモジュールの仕組みとして何を使用するか -
rootDir
:コンパイル結果をoutDirで出力する際に、どのディレクトリ配下のディレクトリ構造で出力するか -
resolveJsonModule
:jsonファイルから型解決した状態で値を取得できるようにする -
outDir
:コンパイルされたjsの出力先 -
esModuleInterop
:コンパイル時にヘルパーメソッドが生成される -
forceConsistentCasingInFileNames
:import時にファイルパスの文字列で大文字小文字を区別するか -
strict
:strict
系のオプションを全て有効にするおまじない -
noImplicitReturns
:条件分岐の条件によって明示的なreturnがされないルートがある場合、コンパイルエラーにしない -
skipLibCheck
:*.d.ts
ファイルに対する型チェックをスキップ -
noPropertyAccessFromIndexSignature
:定義されているプロパティにアクセスする時はドットアクセスのみが許容 -
noImplicitOverride
:override修飾子なしのオーバーライドは認めない
tsconfig.json
{
"compilerOptions": {
"experimentalDecorators": true,
"target": "esnext",
"lib": [
"es6",
"dom",
"esnext"
],
"module": "commonjs",
"rootDir": "src",
"resolveJsonModule": true,
"outDir": "dist",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitReturns": false,
"skipLibCheck": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitOverride": true
}
}
環境変数を定義する
.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
DEV_DATABASE_URL="mysql://ユーザー名:パスワード@localhost:8000/DBName?schema=public"
prismaプロジェクトをセットアップ
# セットアップ
npx prisma init
# TypeScriptのコードを生成
prisma generate
# 既存のDBからモデルを生成する
prisma db pull
# スキーマファイルをフォーマット
npx prisma format
# ビジュアルエディタで確認
npx prisma studio
スキーマのパスを定義
package.json
"prisma": {
"schema": "./prisma/schemaDev.prisma"
}
Prismaの構成ファイルを定義する
既存のDBからモデルを自動生成すると自動的に作成してくれます
prisma/schemaDev.prisma
generator client {
provider = "prisma-client-js"
output = "./prisma/client"
previewFeatures = ["fullTextSearch", "fullTextIndex"]
}
datasource db {
provider = "mysql"
url = env("DEV_DATABASE_URL")
}
model admin_account {
id BigInt @id @default(autoincrement())
login_id String? @db.VarChar(255)
login_password String? @db.Text
name String? @db.VarChar(255)
name_kana String? @db.VarChar(255)
role Int @default(0)
status Int?
create_user String? @db.VarChar(255)
update_user String? @db.VarChar(255)
created_at DateTime? @db.Timestamp(0)
updated_at DateTime? @db.Timestamp(0)
}