Prisma & Apollo で簡単・型安全なデータベースアクセス

MySQL、PostgreSQL、SQL ServerデータベースのデータをPrisma(JavaScriptおよびTypeScript向けのより優れたORM)を使ってGraphQLでクエリできます。

tech

Prismaとは?

Prismaは、優れた開発者体験(DX)で高性能なNext.jsアプリを構築するための最適なデータベースツールを提供します。

ORM

Prisma ORMは最も人気のあるTypeScript ORMです。人間が読めるスキーマ、自動マイグレーション、直感的で完全に型安全なクエリAPIを備えています。

Prisma ORMについて詳しく知る

Postgres

Prisma Postgresは、コールドスタートのない初めてのサーバーレスデータベースです。ユニカーネルをベースとし、ベアメタル上で動作し、組み込みキャッシュ、高性能クエリ、シームレスなスケーリングをすべて優れた開発者体験(DX)で実現します。

Prisma Postgresについて詳しく知る

PrismaとApolloの連携

ApolloはGraphQLでアプリケーションを構築するための素晴らしいエコシステムを提供します。Apollo Serverでデータベースに対してGraphQL APIを構築する際、GraphQLリゾルバ内でデータベースクエリを送信する必要があります。そこでPrismaが役立ちます。

Prismaは、Apollo ServerのGraphQLリゾルバ内でデータベースにクエリするために使用されるORMです。 GraphQLエコシステムのすべての主要なツールやライブラリと完全に連携します。PrismaとGraphQLについて詳しく知る。

Prismaスキーマ

Prismaスキーマは、Prismaのモデリング言語を使用して*データベーススキーマ*を定義します。特に*リレーション*のモデリングにおいて、データモデリングを簡単かつ直感的にします。

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

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 title String
14 content String?
15 authorId String
16 author User
17}

PrismaとApolloのユースケース

Prismaは、Apollo ServerのGraphQLリゾルバ内でデータベースのデータの読み書きを行い、GraphQLクエリとミューテーションを実装するために使用できます。

ApolloのネイティブなSDL-firstアプローチ、またはNexusやTypeGraphQLのようなライブラリが提供するコードファーストアプローチと互換性があります。

Apollo Server (SDL-first)

Apollo Server — SDL-First

GraphQLスキーマを構築するためにApolloのネイティブなSDL-firstアプローチを使用する場合、*GraphQLスキーマ定義*を文字列として、そしてその定義を実装する*リゾルバマップ*を提供します。リゾルバ内では、Prisma Clientを使用してデータベースのデータを読み書きし、受信したGraphQLクエリとミューテーションを解決できます。

1import { PrismaClient } from '@prisma/client';
2import { ApolloServer } from 'apollo-server'
3
4const prisma = new PrismaClient();
5
6const typeDefs = `
7 type User {
8 email: String!
9 name: String
10 }
11
12 type Query {
13 allUsers: [User!]!
14 }
15`;
16
17const resolvers = {
18 Query: {
19 allUsers: () => {
20 return prisma.user.findMany();
21 }
22 }
23};
24
25const server = new ApolloServer({ resolvers, typeDefs });
26server.listen({ port: 4000 });
Nexus (コードファースト)
TypeGraphQL (コードファースト)

Apollo Server — SDL-First

GraphQLスキーマを構築するためにApolloのネイティブなSDL-firstアプローチを使用する場合、*GraphQLスキーマ定義*を文字列として、そしてその定義を実装する*リゾルバマップ*を提供します。リゾルバ内では、Prisma Clientを使用してデータベースのデータを読み書きし、受信したGraphQLクエリとミューテーションを解決できます。

1import { PrismaClient } from '@prisma/client';
2import { ApolloServer } from 'apollo-server'
3
4const prisma = new PrismaClient();
5
6const typeDefs = `
7 type User {
8 email: String!
9 name: String
10 }
11
12 type Query {
13 allUsers: [User!]!
14 }
15`;
16
17const resolvers = {
18 Query: {
19 allUsers: () => {
20 return prisma.user.findMany();
21 }
22 }
23};
24
25const server = new ApolloServer({ resolvers, typeDefs });
26server.listen({ port: 4000 });

"Prismaは、データベースを定義するための優れたモデリング言語と、JavaScript & TypeScriptでSQLを扱うための強力なORMを提供します。これは**Apollo Serverと完璧にマッチ**し、データベースを使ったGraphQL APIの構築を楽しくします。"

Kurt Kemple
カート・ケンブル -
DevRelマネージャー
所属: Apollo

PrismaとApolloを選ぶ理由

エンドツーエンドの型安全性

データベースからフロントエンドまで、アプリケーション全体で一貫した型付けを実現し、生産性を向上させ、エラーを防ぎます。

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

Prismaに組み込まれたデータローダーは、N+1クエリであっても、最適化された高性能なデータベースクエリを保証します。

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

Prisma Clientは、JavaScriptでもオートコンプリートなどのメリットを備えた、完全に型安全なデータベースクエリを保証します。

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

Prismaのモデリング言語はGraphQL SDLに触発されており、データベーススキーマを直感的に記述できます。

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

Prismaスキーマをデータベースにマッピングすることで、データベーススキーマ管理のためにSQLを記述する必要がなくなります。

フィルタ、ページネーション、並べ替え

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

Prisma & Apolloの注目事例

GraphQL APIの構築とデプロイ方法

Apollo ServerとPrismaを使用してGraphQL APIを構築し、DigitalOceanのApp Platformにデプロイする方法を解説する包括的なチュートリアルです。

SDL-firstスターターキット

SDL-firstスキーマとSQLiteデータベースを含む、すぐに実行できるサンプルプロジェクト

Nexusスターターキット

Nexus(コードファースト)とSQLiteデータベースを含む、すぐに実行できるサンプルプロジェクト

© . All rights reserved.