5
3

More than 3 years have passed since last update.

gqlgen + Prisma Lift + gormで出勤管理を作ってみた

Posted at

サンプル

コンテナ構成

DB

  • PostgreSQL

cron処理

  • busybox

cronで叩く用graphql api(非公開api)

  • gqlgen
  • gorm

公開用graphql api

  • gqlgen
  • Prisma(Liftのみ使用)
  • gorm

クライアントアプリ

  • nuxt
  • Apollo Client

その他

本番公開にhttps-portalを使用(別コンテナ)

graphQLサーバーを立てる上での躓きポイントをまとめる

※下記は今後、別記事にしてリンクを貼るようにします。

Hasuraによって作れるapiはいかなる場合もweb公開するしかないという話

PrismaはORMを使い、内部的にSQLを叩くことでDBを読み書きしているので
Prismaが自動生成するapiを直接、web公開する以外にも
prismaのORMを使い、別途公開用のgraphqlサーバーを立てることが可能です。
ですが、hasuraはORMではないので、hasuraが提供するgraphql apiは、http通信を通して叩くしか
DBの読み書きをする方法がありません。
つまり、hasuraではPrismaのように別途、公開用のgraphqlサーバーを立てるという事はできないという事です。

これについては、僕にもう少し
ネットワークの仕組みについて理解があれば躓く事はなかったのですが
こちらの記事

Prismaと違ってHasura GraphQL Engineはクライアントから直接呼ばれることも可能だが、凝った実装しようとするとやはりClient専用のGraphQL Serverは必要

という情報からhasuraでもPrismaのように別途、公開用のgraphqlサーバーを立てられるのだと
誤解してしまっていました。

その結果、hasuraに対してapolloクライアントを使ってgraphql apiを叩いてやる為の
graphQLサーバーフレームワークを作るという試みを一度やってみたのですが
完全に思惑はハズレました。

なにぶん、僕自身まだまだフロントエンドの方が長く
サーバー側の常識が十分に分かっていなかった為に起こった躓きです。

前の記事では、
2019年末時点でgraphqlサーバーを立てる上でのオススメのプログラミング言語は
goよりもnode.jsが良いと言う旨の記事を書きましたが
前言撤回
gqlgen + Prisma(Lift) + gormがかなりイイ感じで開発が楽そうです。
特に、prismaのORMは非常に使いづらかったのですが
gormでresolverを書くのは、かなり楽でした。

今回のその他の躓き

大したことでは無いのですが
postgresのコンテナがDBの内容を出力する
今回のサンプルでいうところの「postgres/data」ディレクトリ内の一部のディレクトリが空の場合
git pushすると消えてしまって本番環境でpostgresコンテナが起動しないという事態が発生しました。
gitは空のディレクトリはcommitしてくれないので空のディレクトリで必要なディレクトリは
.gitkeepを入れときましょう。
とただそれだけの話なんですが
割と小一時間頭を抱えたので書いておきます。

まとめ

今回のサンプル、まだ若干必要な修正があるものの
ようやく、graphqlを活用したサンプルアプリを公開することができました。
次は、画像アップロードなど研究しようと思います。

しかし、
gqlgenにしろ
prismaのliftにしろ
gormにしろ最高です。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3