Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GraphQLスキーマからの自動生成 - フロントエンド開発体験の向上
Search
hirataku
November 16, 2023
Programming
660
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GraphQLスキーマからの自動生成 - フロントエンド開発体験の向上
tsukiji.graphql #2 LT で話した内容です。
https://tsukiji-graphql.connpass.com/event/298830/
hirataku
November 16, 2023
More Decks by hirataku
See All by hirataku
gql.tada の紹介
hiramatsutaku
0
880
Other Decks in Programming
See All in Programming
Laravelで学ぶ Webアプリケーションチューニング入門/web_application_tuning_101
hanhan1978
4
1.2k
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
170
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
610
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
380
継続モナドとリアクティブプログラミング
yukikurage
3
620
5分で問診!Composer セキュリティ健康診断
codmoninc
0
490
Claude Team Plan導入・ガイド
tk3fftk
0
220
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.9k
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
140
えっ!!コードを読まずに開発を!?
hananouchi
0
230
symfony/aiとlaravel/boost
77web
0
140
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
400
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.1k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
The Language of Interfaces
destraynor
162
27k
Into the Great Unknown - MozCon
thekraken
41
2.6k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
610
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Documentation Writing (for coders)
carmenintech
77
5.4k
Marketing to machines
jonoalderson
1
5.6k
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 ご清聴ありがとうございました