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
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
150
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
120
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
820
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
200
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
390
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
9.2k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
500
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
680
フィードバックで育てるAI開発
kotaminato
1
120
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
130
Featured
See All Featured
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
390
Everyday Curiosity
cassininazir
0
260
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
270
Measuring & Analyzing Core Web Vitals
bluesmoon
9
890
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The Limits of Empathy - UXLibs8
cassininazir
1
520
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Google's AI Overviews - The New Search
badams
0
1.1k
Agile that works and the tools we love
rasmusluckow
331
22k
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 ご清聴ありがとうございました