Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GraphQLスキーマからの自動生成 - フロントエンド開発体験の向上
Search
hirataku
November 16, 2023
Programming
0
570
GraphQLスキーマからの自動生成 - フロントエンド開発体験の向上
tsukiji.graphql #2 LT で話した内容です。
https://tsukiji-graphql.connpass.com/event/298830/
hirataku
November 16, 2023
Tweet
Share
More Decks by hirataku
See All by hirataku
gql.tada の紹介
hiramatsutaku
0
750
Other Decks in Programming
See All in Programming
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
360
Module Harmony
petamoriken
2
610
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
400
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
920
Developing static sites with Ruby
okuramasafumi
0
110
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.2k
connect-python: convenient protobuf RPC for Python
anuraaga
0
360
無秩序からの脱却 / Emergence from chaos
nrslib
2
12k
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
4.1k
Level up your Gemini CLI - D&D Style!
palladius
1
170
How Software Deployment tools have changed in the past 20 years
geshan
0
28k
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
120
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
A better future with KSS
kneath
240
18k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.2k
Become a Pro
speakerdeck
PRO
30
5.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Unsuck your backbone
ammeep
671
58k
Site-Speed That Sticks
csswizardry
13
990
Producing Creativity
orderedlist
PRO
348
40k
How GitHub (no longer) Works
holman
316
140k
We Have a Design System, Now What?
morganepeng
54
7.9k
Transcript
GraphQLスキーマからの自動生成 - フロン トエンド開発体験の向上 @hiramatsutaku 2023/11/16 tsukiji.graphql #2 https://tsukiji-graphql.connpass.com/event/298830/
自己紹介 • Taku Hiramatsu • 京都在住、娘👭 • 趣味 ◦ サッカー、山登り、コードを書くこと
• 職種 ◦ ソフトウェアエンジニア ▪ フロントエンドが主軸 • 経歴 ◦ 新卒で株式会社フリークアウト ◦ いくつかの新規事業に従事 ◦ 2020/6〜 株式会社カケハシ
今日話すこと
今日話すこと ここ数年、GraphQL を利用したプロダクトを複数開発してきました。 知見が溜まってきたので、フロントエンド観点で、開発体験を向上してくれる 「GraphQL スキーマから自動生成すると便利なもの」を共有したいと思います! (TypeScript 前提です)
GraphQL スキーマからの自動生成
GraphQL スキーマからの自動生成 • client-preset • MSW モックハンドラ • GraphQL レスポンスのモックデータの
factory 関数 • GraphQL API ドキュメント
client-preset • GraphQL Code Generator のプラグインの一つ ◦ フロントエンド開発に必要なプラグインの組み合わせ • TypedDocumentNode
を生成(メジャーな GraphQL クライアントがサポート) ◦ これを用いて、型付けされた Graphql Operation(Query, Mutation, Subscription)を行う • Fragment Colocation を支援する fragment-masking の機能を提供 ref • https://the-guild.dev/graphql/codegen/plugins/presets/preset-client • https://zenn.dev/mh4gf/articles/graphql-codegen-client-preset
client-preset - 運用しての所感 • 新規プロダクトでは、client-preset は迷わず入れて良い ◦ fragment-masking の制約はフロントエンドをシンプルにする ▪
コンポーネントの props が GraphQL スキーマと対応するため • 既存プロダクトに fragment-masking を適用していくのはそれなりのコストがかかる ◦ 機能追加する部分から適用していく方針を取った • Operation、Fragment の命名規則を作っておくと良い
• client-preset • MSW モックハンドラ • GraphQL レスポンスのモックデータの factory 関数
• GraphQL API ドキュメント GraphQL スキーマからの自動生成
MSW モックハンドラ • 昨今のフロントエンド開発において、GraphQL API をモックしたい場合、MSW(Mock Service Worker)を活用 するケースが増えている •
@graphql-codegen/typescript-msw を利用 ◦ GraphQL Code Generator のプラグインの一つ ◦ 型付けされた MSW モックハンドラの生成 ref • https://the-guild.dev/graphql/codegen/plugins/typescript/typescript-msw
MSW モックハンドラ - ユースケース • バックエンドの実装を待たずにフロントエンド開発を進めたいケース ◦ GraphQL の場合、スキーマ駆動開発を採用することは多い ◦
フロントエンドとバックエンドの開発者が別の場合は有用 • Storybook + MSW(API リクエストするコンポーネントの Story) ◦ msw-storybook-addon を利用して、Storybook で MSW を活用 ◦ 正常系、異常系、データがない場合など、レスポンスを簡単にモックできるので、複数パターンの Story を簡単に作成 可能 • Jest + Testing Library + MSW(API リクエストするコンポーネントのユニットテスト) ref • https://storybook.js.org/addons/msw-storybook-addon • https://mswjs.io/docs/integrations/node/#test-runner
• client-preset • MSW モックハンドラ • GraphQL レスポンスのモックデータの factory 関数
• GraphQL API ドキュメント GraphQL スキーマからの自動生成
GraphQL レスポンスのモックデータの factory 関数 • graphql-codegen-typescript-mock-data を利用 ◦ GraphQL Code
Generator のプラグインの一つ ◦ レスポンスモックデータの factory 関数を生成 ▪ MSW モックハンドラで利用する ◦ (後発の graphql-codegen-typescript-fabbrica というものがあるので検討したい) ref • https://the-guild.dev/graphql/codegen/plugins/typescript/typescript-mock-data • https://the-guild.dev/graphql/codegen/plugins/typescript/typescript-fabbrica
GraphQL レスポンスのモックデータ 全部補完が効きます(大事!)
• client-preset • MSW モックハンドラ • GraphQL レスポンスのモックデータの factory 関数
• GraphQL API ドキュメント GraphQL スキーマからの自動生成
GraphQL API ドキュメント • SpectaQL が便利 ◦ 静的サイトが生成されるので GitHub Pages
などで簡単にホスティング可能 • GraphQL スキーマの description もドキュメントに表示されるので、description を書くモチベーションになる ref • https://github.com/anvilco/spectaql
GraphQL API ドキュメント ref: https://www.useanvil.com/blog/engineering/autogenerate-graphql-docs-with-spectaql/
GraphQL API ドキュメント ref: https://www.useanvil.com/blog/engineering/autogenerate-graphql-docs-with-spectaql/
まとめ
まとめ GraphQL は強力な型システムを持っています。この優れた型システムに基づき、 GraphQL Code Generator などの自動生成ツールが充実しています。このエコシステムを巧みに活 用することで、開発体験を飛躍的に向上させることが可能です。型安全性を最大限に引き 出し、コード生成を通じて作業の効率化を図り、生産性を向上させましょう。
End ご清聴ありがとうございました