このチュートリアルでは、PrismaとGraphQLを使って簡単なユーザー情報を扱うAPIを作成します。 所要時間:約30分
# プロジェクトディレクトリの作成 mkdir prisma-graphql-demo cd prisma-graphql-demo # package.jsonの初期化 npm init -y # 必要なパッケージのインストール npm install typescript ts-node @types/node prisma @prisma/client apollo-server-express graphql type-graphql reflect-metadata express # TypeScript設定 npx tsc --init
# Prismaの初期化 npx prisma init # prisma/schema.prismaを以下の内容で作成
prisma
datasource db { provider = "sqlite" url = "file:./dev.db" } generator client { provider = "prisma-client-js" } model User { id Int @id @default(autoincrement()) name String email String @unique }
bash
# データベースマイグレーション npx prisma migrate dev --name init
`src/index.ts` を作成:
typescript
import 'reflect-metadata'; import { ApolloServer } from 'apollo-server-express'; import { buildSchema } from 'type-graphql'; import { PrismaClient } from '@prisma/client'; import express from 'express'; import { ObjectType, Field, ID, Resolver, Query, Mutation, Arg } from 'type-graphql'; // Prismaクライアントのインスタンス化 const prisma = new PrismaClient(); // User型の定義 @ObjectType() class User { @Field(() => ID) id: number; @Field() name: string; @Field() email: string; } // リゾルバーの定義 @Resolver(User) class UserResolver { // ユーザー一覧取得 @Query(() => [User]) async users() { return prisma.user.findMany(); } // ユーザー作成 @Mutation(() => User) async createUser( @Arg('name') name: string, @Arg('email') email: string, ) { return prisma.user.create({ data: { name, email, }, }); } } // サーバーの起動 async function main() { const app = express(); const schema = await buildSchema({ resolvers: [UserResolver], }); const server = new ApolloServer({ schema, }); await server.start(); server.applyMiddleware({ app }); app.listen(4000, () => { console.log('Server is running on http://localhost:4000/graphql'); }); } main().catch(console.error);
bash
# サーバー起動 npx ts-node src/index.ts
ブラウザで `http://localhost:4000/graphql` にアクセスし、以下のクエリを試してみましょう:
graphql
# ユーザー作成 mutation { createUser(name: "John Doe", email: "john@example.com") { id name email } } # ユーザー一覧取得 query { users { id name email } }
エラーが発生した場合は以下を確認してください: 1. すべての依存パッケージが正しくインストールされているか
2. TypeScript?の設定が正しいか
3. Prismaのマイグレーションが成功しているか