Open13

とある日の雑な技術メモ

Taichi MasuyamaTaichi Masuyama

(Nestjs, hasura, Prisma) on Cloud Run with Cloud SQL for PG with Datadog まで持っていきたい。

  1. Local で Nestjs x hasura x pg を動かす
  2. コンテナ化して Cloud Run にあげる
  3. Cloud SQL と繋ぐ
  4. Datadog 入れる

土日でやれたらいい感じ

先に調べたこと

Taichi MasuyamaTaichi Masuyama

https://hasura.io/blog/build-fullstack-apps-nestjs-hasura-graphql-api
Nest.js => hasura の順でわかりやすそうなので一旦これを進めてみる。

Taichi MasuyamaTaichi Masuyama

脇道に逸れるが、NestJS を bun でセットアップできるか怪しい。

一旦 yarn で入れて、bun でも動くかやってみる。

動かなかったのでしゃーなしで yarn でやる。

Taichi MasuyamaTaichi Masuyama

と思ったらミスっていたことに気づいた。

biome の auto format で import が import type になってしまって、NestJS の DI の仕組みと噛み合わずに正しく動いてなかったので biome の設定を変えた (useImportType: off)

Taichi MasuyamaTaichi Masuyama

Cloud Run と GitHub Actions のセットアップ

https://cloud.google.com/blog/ja/products/devops-sre/deploy-to-cloud-run-with-github-actions/?hl=ja
この通りに進める。

Taichi MasuyamaTaichi Masuyama

https://hasura.io/blog/rapid-prototyping-with-hasura

00:00 Introduction to rapid prototyping
00:58 Creating a project in Hasura
01:19 Working with DBDiagram.io
05:50 Creating our tables in Postgres
08:10 Creating mock data with Mockeroo
10:00 Importing mock data
11:20 Working with Retool

Hasura Cloud 立てて、Heroku の pg に繋いで、DBDiagram.io でデータモデリングして、Mockaroo でモックデータ作って、Retool で簡易 UI 作ったら爆速プロトタイピングできるという話。
すごくいい。

Taichi MasuyamaTaichi Masuyama

https://youtu.be/9BoMb2-jGy4

本番運用の話が助かる。
マイグレの Hasura と ORM どっち使う問題は、Hasura で主にやって ORM と差が出たのを検知して通す通さないを決める運用とのこと。
JWT で権限絞れるのも Good、さらに order.user.userId のようにリレーションの先も見れるのは Great。
graphql-codegen のスキーマをロール別に分けたい場合も問題なし。

Taichi MasuyamaTaichi Masuyama

https://hasura.io/blog/build-fullstack-apps-nestjs-hasura-graphql-api

続き。Hasura で Actions, Remote Schema を使うところから。

詰まったとこ

apollo-server-express@2.x.x はもう古くなっていて、@nestjs/graphql を v9 に落として使うか、最新で使いたい場合は @nestjs/apollo @apollo/server を入れて、GraphQLModule に driver: ApolloDriver を加えるかのいずれかが必要だった。
新しいほうがいいので後者にした。

Taichi MasuyamaTaichi Masuyama

Remote Schema

api サーバーの /graphql エンドポイントを Hasura に登録することで api サーバーの graphql スキーマを統合できる。