hasuraに入門してみた

こんにちは。ナナオです。 今回はPostgresサーバーから、そのままGraphQLとして運用することが可能なHasuraをイジってみたいと思います。 準備 とりあえずディレクトリを作っておきます。 mkdir hasura_playground ちゃっと検証したいので、とりあえずスキーマは以前触ったsqldefを使います。 【以前の記事はこちら】 マイグレーションの基盤とするSQLファイルを作成します。 touch schema.sql テーブルはUserとそれに紐づくPostテーブルを作る感じにしましょう。 CREATE EXTENSION "uuid-ossp"; CREATE TABLE public.user ( id uuid NOT NULL DEFAULT uuid_generate_v4(), name varchar(255), age integer ); CREATE TABLE public.post ( id uuid NOT NULL DEFAULT uuid_generate_v4(), title varchar(255), content text, user_id uuid ); dockerでPostgresを起動するためのdocker-compose.yamlファイルも実装しておきます。 version: '3' services: db: image: postgres:15 container_name: postgres ports: - 5432:5432 environment: - POSTGRES_PASSWORD=example これを起動します。 docker compose up -d あとは以下のコマンドで先程のテーブル定義を適用すればよいです。 psqldef --password=example -h localhost -p 5432 -U postgres postgres < schema.sql あとは適当にデータを追加しておきましょう。 ...

November 3, 2024 · にあえん

PrismaでGraphQLに入門する

Prismaを使うとGraphQLが簡単にできるようなので、やってみました。 前回書いた、Prismaとdbdocsを組み合わせて使ってみたという記事の実質続きみたいな感じです。 ジェネレーターを実装する GraphQLを扱うためにはリゾルバという実装が必要なようですが、これをスキーマ定義から作成するようにします。 既に構築済みのprismaプロジェクトがある場合、typegraphql-prismaを追加するだけです。 yarn add -D typegraphql typegraphql-prisma 追加したら、schema.prismaに以下のgeneratorセクションを追加します。 generator typegraphql { provider = "typegraphql-prisma" } 追加したら以下のコマンドでリゾルバが作成されます。 npx prisma generate 作成されたリゾルバは、デフォルトではnode_modules/@generated/type-graphqlにあります。 GraphQLのサーバーを構築する 本題です。 Apolloを使用してGraphQLサーバーを構築しました。 実装はこちらを参考にしつつ行いました。 import { PrismaClient } from "@prisma/client"; import { ApolloServer, BaseContext } from "@apollo/server"; import { startStandaloneServer } from "@apollo/server/standalone"; import { resolvers } from "@generated/type-graphql"; import { buildSchema } from "type-graphql"; (async () => { const schema = await buildSchema({ resolvers, validate: false, }); const prisma = new PrismaClient(); interface Context { prisma: PrismaClient; } const server = new ApolloServer<Context>({ schema, }); const { url } = await startStandaloneServer(server, { context: async () => ({ prisma }), listen: { port: 4000 }, }); })(); 最新のApolloだと、contextの関数がasyncになっているので注意が必要です。 ...

July 30, 2023 · にあえん