Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / ...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
izumin5210
November 06, 2024
Programming
2.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
November 06, 2024
More Decks by izumin5210
See All by izumin5210
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
670
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
2.1k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
1.1k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
3.1k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.3k
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
6
1.8k
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
3.6k
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.8k
Other Decks in Programming
See All in Programming
Building an Out-of-Order CPU
latte72
1
760
Deep dive into the select statement (GopherCon UK)
jespino
0
180
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
170
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
450
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
38k
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
300
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
140
アクセシビリティから考える情報設計
high_g_engineer
0
370
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
170
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
6
1.8k
高専キャリア LT 発表内容
crysta1221
6
5.7k
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
670
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Being A Developer After 40
akosma
91
590k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Paper Plane (Part 1)
katiecoart
PRO
1
11k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
280
Leo the Paperboy
mayatellez
9
2.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
600
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Transcript
© LayerX Inc. Webフロントエンドにおける GraphQL(あるいはバックエンドのAPI)との向き合い方 2024-11-06 #241106_plk_frontend @izumin5210
© LayerX Inc. 2 ▸ Wantedly, Inc. (2018-04 - 2022-08)
▸ LayerX (2022-09-) ‐ バクラク事業部 Platform Engineering 部 Enabling Team ‐ Web Frontend と Backend をやっています ▸ 好きな ESLint rule は no-restricted-syntax 画像を入れてね whoami @izumin5210
© LayerX Inc. 3 ▸ プロダクト: お客様に1つのパッケージとして価値を提供するソフトウェア製品 ‐ (「バクラク申請」など、右下の図における ◦
を指すイメージ) ▸ サービス: 論理的あるいは物理的に分けられた1つのサーバアプリケーション ‐ 誤解を恐れずにいうと、マイクロサービス・アーキテクチャにおける 「サービス」という単語と概ね同等 ▸ API: サービスが他のプロセスとやりとりするための API ‐ いわゆる Web API (?) ‐ 本発表では 3rd party 向けのものは考えない 発表内での用語の定義 今日の話の前提: 用語の定義
© LayerX Inc. 4 ▸ Web フロントエンドが依存する “API” について、 それをなぜ・どうやって選ぶか、あるいは選ばれているか
について考える ‐ + バクラクでどういう背景で、どういう選択をしたか ▸ バクラクで採用されている GraphQL について、 Web Frontend でその力を引き出すためにどういう思考をしたか ‐ + 具体的になにやったか 一例 今日話すこと 今日話すこと
API まわりの技術をどう選択するか どう選択するか, あるいはどう選択されるか
6 © LayerX Inc. “API”っていろいろある そもそもAPIなんか作らんぞ! (Server Components から頑張る) OpenAPI
gRPC-Web Connect RPC Hono RPC tRPC GraphQL 技術 リソース指向 UI指向 (Server Driven UI) スキーマ設計 BFF Gateway バックエンドに 直つなぎ アーキテクチャ どう選ぶ?
7 © LayerX Inc. 選ぶための観点 ▸ API は様々なものの境界である ‐ プロダクトとプロダクト,
チームとチーム, 技術領域と技術領域, 開発者と開発者 ‐ 一般に、「境界をまたぐ」行為はオーバーヘッドを伴いやすい ▸ (Web)フロントエンドだけで決められることではない かといってバックエンドに完全お任せというわけにもいかない API 技術、どうやって選ぶか
8 © LayerX Inc. 選ぶための観点 プロダクト構成 開発チームの設計 プロダクトの性質 いろんな観点で考えてみる
9 © LayerX Inc. 選ぶための観点 ▸ 「プロダクト」はいくつ? それぞれの関係は? ‐ 単一プロダクトなのか、シリーズなのか
‐ 独立したプロダクトなのか, プロダクト同士が連携するか ▸ 「フロントエンド」「クライアント」はどれくらいある? ‐ シリーズごとに Web Frontend アプリケーションを分けるかどうか ‐ モバイルアプリはあるか 観点の例 - プロダクト構成
10 © LayerX Inc. 選ぶための観点 ▸ ドメインの複雑さ ▸ UI の複雑さ
‐ 複雑にも種類はある: e.g. フロントエンドで難しいロジックを持たざるをえない, そもそも高度なGUI ▸ 変更頻度・変更可能性・フェーズ ‐ 複雑なドメイン × 開発初期 = 仕様も不安定で無限スクラップアンドビルド…かもしれない 観点の例 - プロダクトの性質
11 © LayerX Inc. 選ぶための観点 ▸ チームの構成・役割分担 ‐ 技術領域(Backend, Web
Frontend)でチームがわかれる ‐ フルサイクルチーム(1つのチームでぜんぶやる) ‐ フルサイクルエンジニア(ひとりひとりがぜんぶやる) ▸ 規模感 ‐ どれくらいのプロダクトがあって、どれくらいチームができるか 観点の例 - 開発チームの設計
バクラクの API 前提になるプロダクト「バクラク」とアーキテクチャ概要
13 © LayerX Inc. 前提: バクラクについて LayerX Company Deck https://speakerdeck.com/layerx/company-deck?slide=24
© LayerX Inc. 14 ▸ プロダクトは toB, 複数, プロダクト間で機能・データの連携がある ‐
1つのデータ空間を持つ、一連のシリーズあるいはプラットフォームになっているイメージ ‐ toB でドメインも複雑になりがちなで、そこにかかる思考のリソースは大きい ▸ フロントエンドも複数 ‐ モバイルアプリもあるし, 前述の通りプロダクト間の連携もある ▸ チームはフルサイクルエンジニアの集合体 ‐ もちろん技術領域の得意不得意を鑑みた分担もするが、基本は個々人がフルサイクル ‐ ひとつひとつのチームのサイズはちいさめ バクラクは? バクラクにおける API 技術選定の観点
© LayerX Inc. 15 ▸ 汎用的かつドメイン知識を持ったAPIを作る モチベーションがある ‐ 複数のクライアントがある ‐
「申請者の”部署”」「このクレジットカードを持つ”部署”」のように 様々なオブジェクトと関連を持つオブジェクトが多く、 オブジェクトグラフを作れる GraphQL が活かしやすい ▸ 一方で… ‐ 規模が小さいかつフルサイクルエンジニアの集まりで、 BFF は too much になりがち ‐ モバイルもあるので tRPC など TypeScript 全部のせ系は難しい バクラクは? バクラクにおける API 技術選定の観点 GraphQL リソース指向 Gateway
GraphQL と Web フロントエンド GraphQL Gateway の思想を理解して設計・実装に組み込む
© LayerX Inc. 17 どうやって GraphQL や Gateway を活かすか GraphQL
と Web フロントエンド ▸ GraphQL という技術の特性と、その採用された周辺アーキテクチャ、 選定の背景を深堀りして、それらによるメリットをうまく引き出す ‐ “GraphQL” の部分はお使いの技術に置き換えて考えてみてください ▸ いろんな観点や考えられることがあるけど… 今回は GraphQL を題材に考えの掘り下げ方を1例だけ紹介 ‐ GraphQL を使うときのアレコレはいくらでも話せる・話したいことあるので、懇親会で捕まえてください
© LayerX Inc. 18 ▸ パフォーマンスメリット ‐ 選択的なデータ取得による、overfetch や undefetch
の解消 ‐ 従来の REST API だと複数の fetch になっていたものが1つにまとめられることによる、 通信回数の削減や waterfall の回避 ▸ 開発体験・保守性 ‐ スキーマを通じてデータの構造が明確になり、 TypeScript などの型も生成できる ‐ スキーマ自体が自然言語によらない、機械同士・人間同士いずれのコミュニケーションにも使えるプロトコルとなる ‐ Lint, Breaking Change 検知, 補完, Playground などサポートが充実 ▸ etc. GraphQL という技術の特性・そこから得られるもの GraphQL と Web フロントエンド
© LayerX Inc. 19 ▸ パフォーマンスメリット ‐ 選択的なデータ取得による、overfetch や undefetch
の解消 ‐ 従来の REST API だと複数の fetch になっていたものが1つにまとめられることによる、 通信回数の削減や waterfall の回避 ▸ 開発体験・保守性 ‐ スキーマを通じてデータの構造が明確になり、 TypeScript などの型も生成できる ‐ スキーマ自体が自然言語によらない、機械同士・人間同士いずれのコミュニケーションにも使えるプロトコルとなる ‐ Lint, Breaking Change 検知, 補完, Playground などサポートが充実 ▸ etc. GraphQL という技術の特性・そこから得られるもの GraphQL と Web フロントエンド
© LayerX Inc. 20 ▸ パフォーマンスメリット ‐ 選択的なデータ取得による、overfetch や undefetch
の解消 ‐ 従来の REST API だと複数の fetch になっていたものが1つにまとめられることによる、 通信回数の削減や waterfall の回避 ▸ この “選択的データ取得” はパフォーマンス観点で語られがちだけど、 掘り下げていくと設計上も上も重要なポイントになる ‐ まさに “グラフ” であると考えていく GraphQL という技術の特性・得られるもの GraphQL と Web フロントエンド
© LayerX Inc. 21 フルサイズのグラフから、 必要なデータに絞ったサブグラフ(木?)を取り出す 選択的データ取得 #とは
© LayerX Inc. 22 更に、特定の部分に絞った サブサブグラフ(?)を定義できる 👉 Fragment
© LayerX Inc. 23 コンポーネント(UIに限らず)ごとに必要なデータを Fragment として記述 👉 Fragment Colocation
© LayerX Inc. 24 ▸ コンポーネントが依存するのは API ではなくオブジェクトになる ‐ (ドメイン)オブジェクトに向き合う力学が働く
▸ 利用状況トレーサビリティの向上 ‐ バックエンドから見たとき、 「どのコンポーネントで使われているか」という 非常に解像度の高いトレースになる グラフ, 選択的データ取得, Fragment Colocation で 得られるもの
© LayerX Inc. 25 ▸ GraphQL は “オブジェクトのグラフ” を提供する ‐
そのグラフのサブセットに、アプリケーションや個々のコンポーネントが依存していく ‐ APIやオペレーションへの依存ではなく、サブグラフ = (ドメイン)オブジェクト への依存へ ▸ バクラク(toB, 複数プロダクト)では同じグラフを見ていることが活きやすい ‐ あるプロダクト実装時に繋いだグラフ(エッジ)が、別のプロダクトでも生きる ‐ また、たとえばプロダクトをまたいだ共通のコンポーネントが依存オブジェクトを Fragment で持っていれば、 それぞれのプロダクトの fetch に共通コンポーネントも紛れ込ませることができる ▪ 依存はオブジェクトのままだが、データ取得へのつなぎ込みがしやすくなる GraphQL を活かす設計例: グラフ・選択的データ取得を活かす GraphQL と Web フロントエンド
© LayerX Inc. 26 どうやって GraphQL や Gateway を活かすか GraphQL
と Web フロントエンド ▸ 再掲: GraphQL という技術の特性と、採用された周辺アーキテクチャ、 選定の背景を考えて、それらによるメリットをうまく引き出す ‐ “GraphQL” の部分はお使いの技術に置き換えて考えてみてください ▸ こんな感じで技術や背景から深堀りしていって、 自分たちの選定にあった設計を考え当てはめていくことで技術を活かしていく ‐ おまけ: Why から詰めていくことで、「今の時代は〇〇じゃなくて△△じゃない?」みたいな話でも 意義のある議論ができるようになる(そして、本当にそうなったときの移行の必要性の議論もしやすくなる)
まとめ
© LayerX Inc. 28 まとめ API技術選定・設計における考え方や観点の一例を紹介した ▸ 技術自体の性質や一般的な選定における観点に加え、 プロダクト自体の構成, プロダクトの性質,
チームの構成 などなど、APIならではの観点がある ▸ バクラクでは GraphQL Gateway を作り、シリーズの各プロダクトが利用する形を取っている API技術を活かす例として、GraphQLを Web Frontend で使うときに考えたこと(一部) ▸ GraphQL という技術の特性と採用したアーキテクチャ、選定の背景を考え、 技術の力を引き出すための考察を深めるアクションの例を紹介した ▸ 具体例: ある程度汎用なグラフ, Fragment による API 依存 → オブジェクト依存への転換 etc.