API のスキーマからコード生成する系
OpenAPI Generator
チュートリアルなかったので拾ってきた OpenAPI の定義ファイルから typescript-fetch なるジェネレータでコード吐くところまでやった。
メモ
- OpenAPI のスキーマ定義から API クライアントのコードを自動生成できる(サーバ側コードも生成できるっぽい)
- 有名なツールだけど 2000 件超えの issue があってググるとそれに不満の声をあげてる人がけっこういる
- いろんな言語のジェネレータがある
参考
- TypeScriptとOpenAPIスキーマで型安全に READYFORが語る“スキーマファースト”で効率的な開発方法 - ログミーTech
- OpenAPI や Protocol Buffers のおかげで開発がかなり捗っている話 - Medley Developer Blog
- GoにおけるAPIドキュメントベースのWeb API開発について登壇しました | フューチャー技術ブログ
GraphQL Code Generator
チュートリアルなかったので適当な graphql スキーマからクライアントの生成(typescript-operations, typescript-graphql-request)とリゾルバの型定義の生成(typescript-resolvers)するところまでやった。
メモ
- 主に TypeScript 用、GraphQL のスキーマ(とクエリ)から API クライアント(React 用とかもある)を生成したり、サーバ側のリゾルバの型定義を生成したりできる
- 基本の
@graphql-codegen/typescript
だけだと最低限の型定義のみで、プラグインを使うことでクライアントやリゾルバの型定義を生成できる- プラグインについては All Plugins | GraphQL Code Generator が詳しい
- ts 以外にも java のリゾルバとかも吐けるっぽいけど、基本は ts 向け
参考
- graphql-codegen で型定義を生成する (React, Apollo, TypeScript) - Qiita
- GraphQL Code Generator の使い方。〜GraphQLのSchemaからTSの型定義を自動生成する〜 - Qiita
- GraphQL Code Generator で TypeScript の型を自動生成する - クックパッド開発者ブログ
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 サーバ作る動画があって、便利さが分かりやすい
参考
- 春の入門祭り🌸 #7 作って学ぶGraphQL。gqlgenを用いて鉄道データ検索API開発入門 | フューチャー技術ブログ
- Go + gqlgenを使ったGraphQLアプリケーションサーバーの実装 | Money Forward Kessai TECH BLOG
- Go + TypeScriptによるGraphQLスキーマ駆動開発 - 一休.com Developers Blog
gRPC
メモ
- gRPC っていうかスキーマファーストやコードの自動生成の文脈で大事なのは Protocol Buffers の方か(もうちょい調べる)
- あと、gRPC はブラウザで動かないので Web のフロントエンド ⇄ バックエンド間の通信には使えない(サーバ間通信に使う想定)
参考
- Protocol Buffers で快適な API 開発環境を構築した話 | Raksul ENGINEERING
- Web API に秩序を与える Protocol Buffers / Protocol Buffers for Web API #builderscon - Speaker Deck
- スキーマ定義言語 Protocol Buffers と protoc-gen-swagger を使って Web API のスキマを埋めよう - VOYAGE GROUP techlog
- 今さらProtocol Buffersと、手に馴染む道具の話 - Qiita
- OK Google, Protocol Buffers から生成したコードを使って Node.js で gRPC 通信して | メルカリエンジニアリング
- TypeScriptにおけるgRPC関連ライブラリの比較とプロダクト開発で採用した方法の紹介 - CADDi Tech Blog
- gRPCを使ったWebアプリケーション開発
- フロントエンドエンジニアも知っておきたいgRPC - Speaker Deck
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 あんま関係なくなってる
参考
- Why Prisma? Comparison with SQL query builders & ORMs | Prisma Docs
- 5分で終わるPrisma 2 Tutorial - valid,invalid
- blitz-js prisma rails 倒し方
- Re: Rails を主戦場としている自分が今後学ぶべき技術について
Hasura
コース紹介 | Hasura GraphQLチュートリアル を途中までやった。
メモ
- DB のスキーマ定義書くと GraphQL API サーバを自動で構築してくれるやつ(現状は PostgreSQL のみ、MySQL はまだベータ版的位置づけっぽい)
- リッチな GUI で Hasura が構築する API サーバの設定(DB のスキーマ含む)や GraphiQL を使った動作確認ができる
- 標準だと DB スキーマに則った CRUD しかできないが、Remote Schemas なるものを使えばカスタムのリゾルバも定義できる
- 触ってないけど認証認可の仕組みもある模様
- REST API も最近サポートし始めたっぽいが、REST 形式でリクエスト受け取って、内部で GraphQL に変換してるだけっぽい
参考
- Hasura vs Prisma
- Hasura とは何者か メリット・デメリット - Speaker Deck
- 組織戦略と GraphQL、Hasura - Speaker Deck
- GraphQLサービスを提供するHasuraが約26.5億円を調達、MySQLを新たにサポート | TechCrunch Japan
今回やらなかったこと
調べていく中で見つけたやつ。