6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScriptのORM 「Prisma」が素晴らしかった件

Last updated at Posted at 2022-05-01

概要

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)
}
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?