Prismaで始めよう:Node.jsのためのベストなORM
Emily Parker
Product Engineer · Leapcell

Prismaチュートリアル:KoaとPGに基づく実践的な演習
前書き
Prismaは、TypeScriptに基づいて開発された次世代のORM(Object Relational Mapping)ツールと見なされており、強力な型安全を提供します。この記事では、Koa.jsを使用してシンプルなWebサービスを構築し、それをMySQLデータベースと組み合わせて、Prismaを通じてデータの作成、読み取り、更新、および削除(CRUD)操作を実装する方法を示します。
Prismaの概要
Prismaは、次世代のORMツールであると主張しています。Prismaはオープンソースのデータベースツールチェーンプロジェクトであり、その機能は単なるシンプルなORMをはるかに超えています。PostgreSQL、MySQL、MongoDB、SQL Server、SQLiteなど、複数のデータベースをサポートしています。この記事では、MySQLを例としてデモンストレーションを行います。
Prismaを初めて使用する場合、プロセスは比較的煩雑であり、大まかに次の手順に分けることができます。
- 依存関係をインストールする
- Prismaプロジェクトを初期化する
- Prismaスキーマを設計する(データベース情報とモデルを定義する)
- データベースと同期する
- Prisma Clientを生成する
- Prisma Clientを使用してCRUD操作を完了する
次に、まず開発環境をセットアップし、Prismaについて深く紹介します。
環境の初期化
Koa Webサービスの構築
まず、プロジェクトディレクトリを作成し、依存関係をインストールします。
mkdir koa-prisma cd koa-prisma pnpm init # Koaの依存関係をインストールする pnpm add koa @koa/router koa-bodyparser
中でも、@koa/routerはルーティングミドルウェアであり、ルーティング機能を統合するのに便利です。koa-bodyparserは、リクエスト本文データを解析し、ctx.request.bodyオブジェクトに格納するために使用されます。
次に、新しいindex.jsファイルを作成し、シンプルなWebサービスを構築します。
const Koa = require('koa') const Router = require('@koa/router') const bodyParser = require('koa-bodyparser') const app = new Koa() // ルーターをインスタンス化し、共通のルートプレフィックスを/usersに設定します const router = new Router({ prefix: '/users' }) app.use(bodyParser()) // ユーザーリストをクエリする router.get('/', async ctx => { }) // 単一のユーザーをクエリする router.get('/:id', async ctx => { }) // ユーザーを作成する router.post('/', async ctx => { }) // ユーザーを更新する router.patch('/:id', async ctx => { }) // ユーザーを削除する router.delete('/:id', async ctx => { }) // ルーティングミドルウェアを登録する app.use(router.routes()).use(router.allowedMethods()) app.listen(3000, () => { console.log('The server is running on port 3000') })
上記のコードは、クエリ、挿入、更新、および削除のデータベース操作に対応する5つのルーティングメソッドを定義しています。Prismaの初期化を完了し、後でPrisma Clientを導入した後、これらのインターフェイスを実装できます。
nodemonコマンドを使用してサービスを開始します。このモジュールはグローバルにインストールすることをお勧めします。
nodemon src/index.js
Prisma CLI
Prismaの依存関係をインストールする
まず、Prismaの2つの依存関係モジュールをインストールします。
pnpm add -D prisma pnpm add @prisma/client
中でも、prismaは、データベースの移行、Prisma Clientの作成など、Prismaのさまざまな関数を呼び出すために使用されるCLIコマンドです。次のコマンドを実行して、prismaの使用方法を表示します。
npx prisma --help
prismaは7つのコマンドを提供します。
| コマンド | 説明 |
|---|---|
| init | アプリケーションでPrismaを初期化します |
| generate | 主にPrisma Clientを生成するために使用されます |
| db | データベースのスキーマとライフサイクルを管理します |
| migrate | データベースを移行します |
| studio | データを管理するためのWebベースのワークベンチを開始します |
| validate | Prismaスキーマファイルの構文が正しいかどうかを確認します |
| format | Prismaスキーマファイルをフォーマットします。デフォルトではprisma/schema.prismaです |
この記事では、これらのコマンドのうち3つを主に使用します。残りのコマンドは自分で調べてください。
Prismaの初期化
次のコマンドを実行して、初期化を完了します。
npx prisma init
このコマンドは、現在のディレクトリに.envファイルとprismaディレクトリを作成し、prismaディレクトリにschema.prismaファイルを作成します。
.envファイルは、環境変数を格納するために使用され、通常、いくつかの構成情報が含まれています。prismaディレクトリは、Prismaに関連するファイルを格納するために使用されます。現在、schema.prismaファイルのみがあります。このファイルはPrismaスキーマファイルであり、データベース接続情報とモデルを定義するために使用されます。
Prismaスキーマの設計
VSCプラグインのインストール
スキーマファイルを編集する前に、VS CodeにPrismaプラグインをインストールすることをお勧めします。このプラグインは、コードの強調表示、フォーマット、オートコンプリート、定義へのジャンプ、.prismaファイルのチェックなどの機能を提供し、開発エクスペリエンスを大幅に向上させます。
ジェネレーターの設定
generateを使用してジェネレーターを定義し、providerプロパティを介してprisma-client-jsとして宣言します(現在、これのみがサポートされています)。prisma generateコマンドが実行されると、Prisma Clientが生成され、データのCRUD操作を完了するために使用されます。
generator client { provider = "prisma-client-js" }
データソースの設定
datasourceを使用してデータソースを定義し、Prismaがデータベースに接続するために必要な情報を設定します。providerは、接続されているデータベースのタイプを指定します。デフォルトではpostgresqlです。これをmysqlに変更します。urlは、データベースURLを指定します。構成を分離するために、通常は.envファイルで定義され、env()関数を介して読み取られます。
datasource db { provider = "mysql" url = env("DATABASE_URL") }
デフォルトの.envファイルのデータベース接続は、Postgresql用です。
DATABASE_URL=postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public
MySQLデータベース接続URLは、次の必須項目で構成されています。
| 名前 | プレースホルダー | 説明 |
|---|---|---|
| ホスト | HOST | データベースのIPまたはドメイン名(localhostなど) |
| ポート | PORT | データベースポート(3306など) |
| ユーザー | USER | データベースのユーザー名(rootなど) |
| パスワード | PASSWORD | データベースのパスワード |
| データベース | DATABASE | データベース名(mydbなど) |
上記規則に従って、MySQL URLを定義します。
DATABASE_URL="postgresql://leapcell:leapcell123@localhost:9006/prisma"
ユーザーモデルの定義
ORMツールとして、Prismaのモデルには次の機能があります。
- アプリケーションドメインのエンティティを形成する
- データベースのテーブル(PostgreSQLなどのリレーショナルデータベース)またはコレクション(MongoDB)にマッピングする
- Prisma Client APIのクエリの基礎を形成する
- TypeScriptでは、Prisma Clientはモデルとそのバリアントの型定義を提供し、データベースアクセスの型安全を保証する
モデルを定義する場合、Prismaの組み込みユーティリティ関数(@id()や@default()など)が使用されます。たとえば、@id()は主キーを宣言するために使用され、@default()はデフォルト値を設定するために使用されます。以下は、ユーザーモデルの定義です。
model User { id Int @id @default(autoincrement()) name String email String @unique password String createdTime DateTime @default(now()) @map("created_time") updatedTime DateTime @updatedAt @map("updated_time") @@map("user") }
次の点に注意する必要があります。
- モデル名は、作成されたデータテーブルの名前のデフォルトです。ここでは、モデル名は
Userであり、`@@map(

