MySQL、PostgreSQL、SQL ServerデータベースからGraphQLでデータをクエリします。JavaScriptおよびTypeScript向けのより良いORMであるPrismaを使用。
Prismaは、驚くべきDX(開発者体験)で高性能なNext.jsアプリを構築するための完璧なコンパニオンとなるデータベースツールを提供します。
Prisma ORMは最も人気のあるTypeScript ORMです。人間が読みやすいスキーマ、自動化されたマイグレーション、直感的で完全に型安全なクエリAPIが付属しています。
Prisma ORMについてもっと知るPrisma Postgresは、コールドスタートのない最初のサーバーレスデータベースです。ユニカーネルに基づいており、ベアメタルで動作し、組み込みキャッシュ、高性能クエリ、シームレスなスケーリングを提供します。これらすべてが素晴らしいDXと共に実現されます。
Prisma Postgresについてもっと知るGraphQLは、WebおよびモバイルアプリがAPIからデータをフェッチするための強力な方法を提供します。しかし、バックエンド開発者としては、GraphQLリゾルバを実装することで、GraphQLサーバーが要求されたデータをデータベースからどのように取得するかについて依然として責任があります。ここにPrisma ORMが役立ちます。Prisma ORMは、データベースをクエリするためにGraphQLリゾルバ内で使用されます。GraphQLエコシステムのすべてのお気に入りのツールやライブラリとシームレスに統合します。
Prisma ORMの利用をさらに強化する追加ツールも利用できます
• Prisma Accelerateは、グローバルデータベースキャッシュとスケーラブルなコネクションプールで、データベースクエリを高速化します。
• Prisma Pulseを使用すると、リアクティブでリアルタイムのアプリケーションを型安全に構築できます。Pulseは、GraphQLサブスクリプションやライブクエリを実装するのに最適なコンパニオンです。
Prismaスキーマは、Prismaのモデリング言語を使用してデータベーススキーマを定義します。これにより、データモデリング、特にリレーションのモデリングが簡単で直感的になります。
Prismaスキーマの構文は、GraphQL SDLから大きくインスピレーションを受けています。もしSDLにすでに慣れているなら、データベーステーブルをモデリングするためにPrismaスキーマを学ぶのは非常に簡単でしょう。
1// Define the `User` table in the database2model User {3 id String @id @default(cuid())4 email String @unique5 password String6 name String?7 posts Post[]8}910// Define the `Post` table in the database11model Post {12 id String @id @default(cuid())13 title String14 content String?15 authorId String16 author User @relation(fields: [authorId], references: [id])17}
Prismaは、graphql-tools
のmakeExecutableSchema
を使用したSDLファーストアプローチでも、NexusやTypeGraphQLのようなコードファーストアプローチでも、GraphQLリゾルバで使用できます。
注記:以下のすべての例では、express-graphql
をGraphQLサーバーとして使用していますが、これらはApollo Server、NestJS、Mercuriusなどの他のライブラリでも動作します。
GraphQLスキーマを構築するためにSDLファーストアプローチを使用する場合、GraphQLスキーマ定義を文字列として提供し、この定義を実装するリゾルバマップを提供します。リゾルバ内でPrisma Clientを使用して、データベースのデータを読み書きし、着信したGraphQLクエリとミューテーションを解決できます。
1import { PrismaClient } from '@prisma/client';2import express from 'express';3import { graphqlHTTP } from 'express-graphql';4import { makeExecutableSchema } from '@graphql-tools/schema';56const prisma = new PrismaClient();78const typeDefs = `9 type User {10 email: String!11 name: String12 }1314 type Query {15 allUsers: [User!]!16 }17`;1819const resolvers = {20 Query: {21 allUsers: () => {22 return prisma.user.findMany();23 }24 }25};2627export const schema = makeExecutableSchema({28 resolvers,29 typeDefs,30});3132const app = express();33app.use('/graphql', graphqlHTTP({34 schema,35}));3637app.listen(4000);
GraphQLスキーマを構築するためにSDLファーストアプローチを使用する場合、GraphQLスキーマ定義を文字列として提供し、この定義を実装するリゾルバマップを提供します。リゾルバ内でPrisma Clientを使用して、データベースのデータを読み書きし、着信したGraphQLクエリとミューテーションを解決できます。
1import { PrismaClient } from '@prisma/client';2import express from 'express';3import { graphqlHTTP } from 'express-graphql';4import { makeExecutableSchema } from '@graphql-tools/schema';56const prisma = new PrismaClient();78const typeDefs = `9 type User {10 email: String!11 name: String12 }1314 type Query {15 allUsers: [User!]!16 }17`;1819const resolvers = {20 Query: {21 allUsers: () => {22 return prisma.user.findMany();23 }24 }25};2627export const schema = makeExecutableSchema({28 resolvers,29 typeDefs,30});3132const app = express();33app.use('/graphql', graphqlHTTP({34 schema,35}));3637app.listen(4000);
データベースからフロントエンドまで、アプリケーション全体で一貫した型付けを実現し、生産性を向上させ、エラーを回避します。
Prismaに組み込まれたデータローダーは、N+1クエリであっても、最適化され高性能なデータベースクエリを保証します。
Prisma Clientは、JavaScriptでもオートコンプリートなどの利点を持つ完全に型安全なデータベースクエリを保証します。
Prismaのモデリング言語はGraphQL SDLからインスピレーションを受けており、データベーススキーマを直感的に記述できます。
Prismaスキーマをデータベースにマッピングできるため、データベーススキーマを管理するためにSQLを記述する必要がありません。
Prisma Clientは、一般的なデータベース機能のための便利なAPIを提供することで、定型コードを削減します。
Prismaでは、GraphQLを愛し、その明るい未来を信じています。人気のGraphQL BaaSである Graphcoolを運営して以来、私たちは過去にGraphQLエコシステムに多くの貢献をしてきましたし、現在も開発者がGraphQLを採用するのに役立つ様々なツールに投資しています。
私たちはまた、 GraphQL Foundation の誇り高きメンバーであり、GraphQLコミュニティとエコシステムの発展を支援しています。
GraphQLコミュニティとエコシステムに関する週刊ニュースレター
GraphQL Berlin Meetupは2016年に開始され、世界で最も人気のあるGraphQL Meetupの1つです
私たちは、開発者がGraphQLについて学ぶのを助けるために、人気のフルスタックGraphQLチュートリアルウェブサイト「How to GraphQL」を構築しました。
コミュニティのメンバーやPrismaチームと交流できる複数のチャネルがあります。