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になっているので注意が必要です。 ...

7月 30, 2023 · にあえん

prisma + dbdocsで楽しくデータベース設計する

つい先日dbdocsに入門したという記事を書きましたが、dbdocsではDBマイグレーションの管理などはできないので、ちょっとそこが不満でした。 今回はPrismaに入門して、dbdocsと組み合わせることでGUIでも Prismaとは DBクライアント、DBマイグレーション、GUI出力といった機能が一体となったツールです。 Node.jsとTypeScriptを使用しています。 Prisma | Simplify working and interacting with databases DBクライアントやDBマイグレーションのプレイグラウンドも用意してあります。親切。 Prisma Playground | Learn the Prisma ORM in your browser とりあえずマイグレーションを体験してみる QuickStartに沿ってやっていきましょう。 TypeScriptのプロジェクトは既に作成した前提で、関連するモジュールを追加していきます。 npm install prisma --save-dev 次にprismaの初期化処理を行います。 あんまり凝った構成にすると疲れるので、とりあえずSQLiteを使います。 npx prisma init --datasource-provider sqlite すると、プロジェクトにprisma/schema.prismaというファイルが作成されます。 // This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "sqlite" url = env("DATABASE_URL") } このファイルに以下のモデルを追加していきます。 ...

7月 30, 2023 · にあえん

dbdocsでDBML管理入門してみる、あわよくばCI/CDもやる

DBML、便利ですよね。 開発初期の段階でER図の共有やSQLのエクスポートなどで非常に役立つツールです。 しかし、それは開発初期の話。 開発が進むにつれて実装とDBMLに齟齬が生じてしまうため、メンテナンスがされなくなっていってしまいます。。 今回は、DBMLの管理をローカルから行うことが可能なdbdocsというツールを見つけたので、紹介したいと思います。 dbdocs.io - Database Documentation and Catalog Tool 使い方 早速インストールしてみます。 npm install -g dbdocs (余談ですが、僕の環境ではnodenvを使用していたんですが、この-gオプションでインストールしたパッケージがうまく動かなかったので直したときの記事もあるので良ければこちらもどうぞ↓) nodenvのnpmでインストールしたyarnからglobal addで追加したパッケージが使用できなかったときの対策 無事インストールできたら、まずはdbdocsにログインしましょう。 dbdocs login Choose a login methodと表示されたので、Githubを選択するとWebブラウザに遷移するので、そこでログインを行うとトークンが発行されます。 発行されたトークンをターミナルに貼り付ければログイン完了です。 では次にdbmlファイルを実装します。 今回は簡易的にDBエンジンとしてPostgresを使用し、ユーザーテーブルのみがあるデータベースを設計しました。 Project social_blogging_site { database_type: 'PostgreSQL' } Table user { id uuid [pk] name varchar [not null] create_time timestamp [not null] update_time timestamp [not null] archive_time timestamp } これをdatabase.dbmlとして保存し、以下のコマンドを実行します。 dbdocs build database.dbml --project=test 無事作成が完了すると、以下のような画面が表示されます。 Visitに書かれているURLに遷移すると、プロジェクトページに遷移することができます。 また、画面上部のRelationをクリックすると各テーブルの依存関係を見ることができます。 これだけだと分かりづらいので、テーブルを増やしてみます。 Table weapon { id uuid [pk] name varchar [not null] } Table user_weapon { user_id uuid [ref: < user.id] weapon_id uuid [ref: < weapon.id] } 武器を追加しました。 ...

7月 29, 2023 · にあえん