次世代の完全タイプセーフなNestJS用ORM

JavaScriptとTypeScriptのためのより良いORMであるPrismaを使用して、NestJSアプリでMySQL、PostgreSQL、SQL Serverデータベースからデータをクエリします。

tech

Prismaとは?

Prismaはデータ操作を容易にします!タイプセーフなNode.js & TypeScript ORM、グローバルデータベースキャッシュ、接続プーリング、およびリアルタイムデータベースイベントを提供します。

クエリ
// Creating a new record
await prisma.user.create({
firstName: “Alice”,
email: “alice@prisma.io”
})
テーブル
id firstName email
1 Bobby bobby@tables.io
2 Nilufar nilu@email.com
3 Jürgen jums@dums.edu
4 Alice alice@prisma.io

PrismaとNestJSの連携

Prisma ORMは、NestJS アプリでデータベースをクエリするために使用できる次世代ORMです。TypeScriptを採用して、ランタイムエラーを回避し、生産性を向上させます。それが提供するタイプセーフ性は、TypeORMやSequelizeのような従来のORMの保証をはるかに超えています(詳細はこちら)。
Prismaは、RESTまたはGraphQL APIを構築しているかどうかにかかわらず、NestJSのモジュールアーキテクチャとスムーズに統合します。

追加ツールでPrisma ORMの使用をさらに強化できます
Prisma Accelerate は、データベースクエリを高速化するグローバルデータベースキャッシュおよびスケーラブルな接続プールです。
Prisma Pulse を使用すると、タイプセーフな方法でリアクティブなリアルタイムアプリケーションを構築できます。

PrismaとNestJSのコード例

NestJSとPrismaを組み合わせることで、Node.js & TypeScriptエコシステムの他のORMでは実現できない新しいレベルのタイプセーフ性が提供されます。この例では、Prisma Clientの使用方法を示します

NestJSのモジュールアーキテクチャに従い、依存性注入を介して、アプリケーションコントローラーにCRUDまたはドメイン固有の操作を提供するUserServiceクラスを実装します。

PrismaService

PrismaService

PrismaServiceクラスは、生成されたPrismaClientを拡張することにより実装でき、NestJSアーキテクチャと統合するPrisma Clientの抽象化を構築します。これは、依存性注入を介して他のサービスおよびコントローラーに提供されます。

1import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common'
2import { PrismaClient } from '@prisma/client'
3
4@Injectable()
5export class PrismaService extends PrismaClient
6 implements OnModuleInit {
7
8 async onModuleInit() {
9 await this.$connect();
10 }
11}
AppController
Prismaスキーマ

PrismaService

PrismaServiceクラスは、生成されたPrismaClientを拡張することにより実装でき、NestJSアーキテクチャと統合するPrisma Clientの抽象化を構築します。これは、依存性注入を介して他のサービスおよびコントローラーに提供されます。

1import { Injectable, OnModuleInit, INestApplication } from '@nestjs/common'
2import { PrismaClient } from '@prisma/client'
3
4@Injectable()
5export class PrismaService extends PrismaClient
6 implements OnModuleInit {
7
8 async onModuleInit() {
9 await this.$connect();
10 }
11}

PrismaとNestJSを選ぶ理由?

TypeScriptの採用

Prismaは、部分モデルとリレーションをクエリする場合でも、完全なタイプセーフ性を提供する最初のORMです。

スムーズな統合

PrismaはNestJSのモジュールアーキテクチャに完全に適合し、強力なデータベースアクセスレイヤーを提供します。

タイプセーフなデータベースクライアント

Prisma Clientは、JavaScriptでもオートコンプリートのような利点がある、完全にタイプセーフなデータベースクエリを保証します。

直感的なデータモデリング

Prismaの宣言型モデリング言語はシンプルで、データベーススキーマを直感的に記述できます。

簡単なデータベース移行

宣言型のPrismaスキーマから予測可能でカスタマイズ可能なSQL移行を生成します。

API構築向け設計

Prisma Clientは、一般的なAPI機能(例:ページネーション、フィルターなど)のクエリを提供することで、ボイラープレートを削減します。

注目のPrisma & NestJSコミュニティ事例

NestJS & Prismaの本番環境対応スターターキット

本番環境でNestJSとPrismaを構築するために必要なすべてを網羅したスターターキット。

NestJSドキュメントのPrisma

公式NestJSドキュメントでNestJSとPrismaの使用方法を学びます。

NestJSとPrismaを使用したREST APIの構築

NestJS REST APIをPrismaで構築するための包括的なワークショップとシリーズ。

大規模な本番環境アプリをTypeORMからPrismaへ移行する

NestJSアプリをTypeORMからPrismaに移行するプロセスに関する詳細な記事。