Note

3年後の自分のために書いています

API や DB のスキーマからコードを自動生成する系のツールを触ってみた

APIスキーマからコード生成する系

OpenAPI Generator

チュートリアルなかったので拾ってきた OpenAPI の定義ファイルから typescript-fetch なるジェネレータでコード吐くところまでやった。

メモ
参考

GraphQL Code Generator

チュートリアルなかったので適当な graphql スキーマからクライアントの生成(typescript-operations, typescript-graphql-request)とリゾルバの型定義の生成(typescript-resolvers)するところまでやった。

メモ
  • 主に TypeScript 用、GraphQL のスキーマ(とクエリ)から API クライアント(React 用とかもある)を生成したり、サーバ側のリゾルバの型定義を生成したりできる
  • 基本の @graphql-codegen/typescript だけだと最低限の型定義のみで、プラグインを使うことでクライアントやリゾルバの型定義を生成できる
  • ts 以外にも java のリゾルバとかも吐けるっぽいけど、基本は ts 向け
参考

gqlgen

Building GraphQL servers in golang — gqlgen やった。

メモ
  • GraphQL のスキーマからサーバ側のコードを生成する Go のライブラリ
  • チュートリアルではスキーマからコード生成 -> resolver 実装 -> モデルのコード変更(自動生成された graph/model/models_gen.go とは別に graph/model/xx.go 的なファイル作る、struct の名前被ってても generate コマンド打てば勝手に上書きしてくれる) -> generate コマンドで未実装の resolver 生成 -> スキーマを満たす resolver 実装って感じ
    • 👆 ではコード変更がモデルから始まってるけど、実運用で変更を加える際には最初にスキーマ変更やってからモデルの変更になるのかな
  • メルペイの人が gplgen で todo アプリの API サーバ作る動画があって、便利さが分かりやすい
参考

gRPC

Quick start | Go | gRPC やった。

メモ
  • gRPC っていうかスキーマファーストやコードの自動生成の文脈で大事なのは Protocol Buffers の方か(もうちょい調べる)
  • あと、gRPC はブラウザで動かないので Web のフロントエンド ⇄ バックエンド間の通信には使えない(サーバ間通信に使う想定)
    • 👆 を解決するために grpc-web なるものもあるが、実体は xhr リクエストなので動かすには gRPC Web Proxy なるプロキシサーバが必要(フロントエンドでも Protocol Buffers の型定義を使い回せるのが利点)
参考

DB or モデルのスキーマからコード生成する系

Prisma

Quickstart: Getting started with TypeScript & SQLite | Prisma Docs やった。

メモ
  • モデルの定義を Prisma schema で書くと型安全な DB クライアントを自動生成してくれる ORM(今は TS/JS 用だけど、Go もサポートされるかも)
    • Prisma schema が読み書きしやすくて良い、自動生成してくれるコードも過不足なく良い感じ
  • mizchi 氏の「お節介ではないクエリビルダ」っていう表現がしっくりきた
  • Prisma1 の頃は GraphQL 優先のツールだったっぽいけど、今の Prisma2 では GraphQL あんま関係なくなってる
参考

Hasura

コース紹介 | Hasura GraphQLチュートリアル を途中までやった。

メモ
参考

今回やらなかったこと

調べていく中で見つけたやつ。