TypeScript ORM
データベース向けのコストゼロの型安全性を実現

PrismaでMySQL、PostgreSQL、SQL Serverデータベースからデータをクエリ – Node.js向けの型安全なTypeScript ORM

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とTypeScriptの連携

TypeScriptはJavaScriptを基盤とする静的型付け言語です。JavaScriptのすべての機能に加え、コードを型付けして検証する機能を提供し、コードを実行する前にエラーを捕捉して修正を提供することで時間を節約できます。有効なJavaScriptコードはすべてTypeScriptコードでもあるため、TypeScriptは簡単に採用できます。

Prismaは、データベーススキーマから型を自動生成することにより、コストゼロで型安全性の利点を提供するNode.jsおよびTypeScript向けのORMです。 信頼性の高いデータ集約型アプリケーションの構築に最適です。Prismaは、リレーショナルデータベースにデータを保存する際に、より自信と生産性をもたらします。Node.jsサーバーフレームワークで使用して、データベースと対話できます。

Prismaスキーマ

Prismaスキーマは、Prismaのモデリング言語を使用してデータベーススキーマを定義し、対応するTypeScript型を生成します。特にリレーションのモデリングに関して、データモデリングを簡単かつ直感的にします。

1// Define the `User` table in the database
2model User {
3 id String @id @default(cuid())
4 email String @unique
5 password String
6 name String?
7 posts Post[]
8}
9
10// Define the `Post` table in the database
11model Post {
12 id String @id @default(cuid())
13 createdAt DateTime @default(now())
14 title String
15 content String?
16 authorId String
17 author User @relation(fields: [authorId], references: [id])
18}

Prismaスキーマから生成された型は、すべてのデータベースクエリが型安全であることを保証します。Prisma Clientは、素晴らしいオートコンプリート体験を提供し、迅速に作業を進め、無効なクエリを記述しないようにすることができます。

1type User = {
2 id: string
3 email: string
4 password: string
5 name: string | null
6}
7
8export type Post = {
9 id: string
10 createdAt: Date
11 title: string
12 content: string | null
13 authorId: string
14}

PrismaとTypeScriptのコード例

スキーマを一度定義すれば、PrismaがTypeScript型を自動生成します。データベーススキーマとアプリケーションコードの型を手動で同期する必要はありません。

以下のコードは、Prismaを使用したデータベースクエリが、部分的なクエリやリレーションを含め、完全に型安全であることを示しています。

型安全なデータベースクエリ

コストゼロの型安全性

Prisma Clientを使用したクエリは、常にその戻り値の型が推論されるため、リレーションを取得する場合でも、返されるデータについて簡単に推論できます。

1// Inferred type:
2// User & {
3// posts: Post[];
4// }
5const user = await prisma.user.create({
6 data: {
7 email: 'alice@prisma.io',
8 password: '0ee4808f893b8e05bdd251048d5c4c8af8bb89403676dda95619841a481f8e87',
9 name: 'Alice',
10 posts: {
11 create: {
12 title: 'Learn how to use Prisma with TypeScript',
13 content: 'https://prisma.dokyumento.jp/docs/',
14 },
15 },
16 },
17 include: {
18 posts: true,
19 },
20})
生成された型

コストゼロの型安全性

Prisma Clientを使用したクエリは、常にその戻り値の型が推論されるため、リレーションを取得する場合でも、返されるデータについて簡単に推論できます。

1// Inferred type:
2// User & {
3// posts: Post[];
4// }
5const user = await prisma.user.create({
6 data: {
7 email: 'alice@prisma.io',
8 password: '0ee4808f893b8e05bdd251048d5c4c8af8bb89403676dda95619841a481f8e87',
9 name: 'Alice',
10 posts: {
11 create: {
12 title: 'Learn how to use Prisma with TypeScript',
13 content: 'https://prisma.dokyumento.jp/docs/',
14 },
15 },
16 },
17 include: {
18 posts: true,
19 },
20})

PrismaとTypeScriptを選ぶ理由

型安全なデータベースクライアント

Prisma Clientは、完全に型安全なデータベースクエリを保証し、無効なクエリを記述することを防ぎます。

最適化されたデータベースクエリ

Prismaの組み込みデータローダーは、N+1クエリであっても、最適化されパフォーマンスの高いデータベースクエリを保証します。

オートコンプリート

Prismaは、クエリを記述する際に豊富なオートコンプリートでクエリの記述を支援します。

型推論

Prisma Clientを使用したクエリは、常にその戻り値の型が推論されるため、データを簡単に推論できます。

簡単なデータベースマイグレーション

Prismaスキーマをデータベースにマッピングするため、データベーススキーマを管理するためにSQLを記述する必要はありません。

フィルター、ページネーション、順序付け

Prisma Clientは、一般的なデータベース機能のための便利なAPIを提供することで、ボイラープレートを削減します。

index.tsx
1const users = await prisma.user.findMany({
2 where: {
3 email: {
4 endsWith: '@prisma.io',
5 }
6 },
7 include: {
8 p
9 }
10})
 
postsPost[]

私たちはTypeScriptが大好きです ❤️

Prismaでは、TypeScriptを愛しており、その明るい未来を信じています。Prismaの開始以来、私たちは TypeScriptコンパイラを限界まで活用 し、前例のない型安全なデータベースアクセスと、快適な開発者体験のための豊富なオートコンプリートを提供するために取り組んできました。

Prismaは、ミスを減らすために型安全性を中心に構築されています。TypeScriptの構造的な型システムを活用することで、Prismaはデータベースクエリを 構造型 にマッピングするため、記述するすべてのPrisma Clientクエリに対して、返されるデータの正確な形状を知ることができます。

TypeScriptリソース

TypeScript Berlin Meetup

TypeScript Berlin Meetupは2019年に始まり、世界で最も人気のあるTypeScript Meetupの1つです

Prisma TypeScriptの例

Prisma、TypeScript、およびさまざまなフレームワークとAPIテクノロジーを使用した、すぐに実行できるサンプルプロジェクト

TypeScript、PostgreSQL、Prismを使用した最新のバックエンド構築

hapiとPrismaを使用した最新のバックエンドを構築するためのチュートリアルシリーズ