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
in-process GraphQL のすすめ #ginzajs
Search
izumin5210
August 17, 2026
Programming
1.5k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
in-process GraphQL のすすめ #ginzajs
izumin5210
August 17, 2026
More Decks by izumin5210
See All by izumin5210
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
690
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
2.2k
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
2
1.1k
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
8
3.1k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
2.4k
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
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
1.4k
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
Intent as Code
shoppingjaws
6
1.1k
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
170
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
290
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
18
15k
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
270
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.3k
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
360
Jetpack Compose メカニズム
skydoves
0
470
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
530
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
210
wkhtmltopdfの次どうするか問題2026
willnet
2
1.7k
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Making Projects Easy
brettharned
120
6.8k
Navigating Team Friction
lara
192
16k
Six Lessons from altMBA
skipperchong
29
4.5k
Side Projects
sachag
456
43k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
700
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
290
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
RailsConf 2023
tenderlove
30
1.6k
Transcript
in-process GraphQL のすすめ 2026-08-17 ginza.js #11 @izumin5210
whoami @izumin5210 LayerX バクラク事業部 (2022-09 -) Platform Engineering 部 Enabling
チーム / Dev Infrastructure チーム Staff Software Engineer バックエンドや Web フロントエンドが専門 ISUCON14 4位 好きなリポジトリは vercel-labs/wterm © LayerX Inc.
単に「GraphQL の API サーバをデプロイしてフロントエンドから叩く」以上の GraphQL の使い方を紹介します © LayerX Inc. 3
前提 | GraphQL サーバの構成要素 © LayerX Inc.
前提 | GraphQL サーバの構成要素 GraphQL サーバの構成要素 NestJS Pothos GraphQL, GraphQL
Nexus, TypeGraphQL, graphql-js SDL (*.graphql) Schema Definition @graphql-codegen/ typescript-resolvers Resolver Execution Engine Apollo Server Envelop Execution Middleware graphql-http, GraphQL Yoga Transport Adapter Hono, Express, Fastify, Next.js, … Transport ※ @izumin5210 による独自の分類です © LayerX Inc. https://speakerdeck.com/izumin5210/graphql-server-technology-selection 5
GraphQL を Next.js に乗せる © LayerX Inc.
GraphQL を Next.js に乗せる API が引くのは サーバ・クライアントの論理的な境界線 GraphQL がもたらすのは、view と
presentation logic の間の契約 それは物理的に異なるサーバである必要はない 同一プロセスに置いても、境界線はそのまま引ける 開発チームが小さい場合など、 初期はデプロイメントを1つにまとめると運用負荷が抑えられる © LayerX Inc. 7
GraphQL を Next.js に乗せる GraphQL Yoga を Next.js に乗せる GraphQL
Yoga: The Guild 製の GraphQL サーバライブラリ 層でいうと Transport Adapter Envelop(Execution Middleware)も同梱 スキーマの作り方にも、下の HTTP サーバにも依存しない 実体は Request を受けて Response を返す関数 ひとつ yoga.fetch(request) © LayerX Inc. で実行できる スキーマ + resolver graphql-js GraphQL Yoga HTTP サーバ Schema Definition Resolver Execution Engine Execution Middleware Transport Adapter Transport 8
GraphQL を Next.js に乗せる Route Handler にそのまま乗る Yoga の interface
は Fetch API の / Next.js の Route Handler もまったく同じ interface Request © LayerX Inc. Response 9
GraphQL を Next.js に乗せる Transport が Next.js になっただけ スキーマ +
resolver graphql-js GraphQL Yoga Next.js Route Handler Schema Definition Resolver Execution Engine Execution Middleware Transport Adapter Transport 差し替わったのは一番外側の層だけ。中身はどのデプロイ形態でも同じ © LayerX Inc. 10
GraphQL を Next.js に乗せる 運用が増えてから切り出せばいい 初期はデプロイするのが Next.js だけで済む 監視・デプロイ・権限まわりの 面倒が増えない
切り出すときも、 差し替わるのは Transport だけ スキーマと resolver はそのまま © LayerX Inc. 11
RSC / SSR から GraphQL を直接呼ぶ © LayerX Inc.
RSC / SSR から GraphQL を直接呼ぶ Transport を飛ばして直接実行する スキーマ +
resolver execute({ schema, document, … }) yoga.fetch(request) → → graphql-js GraphQL Yoga Next.js Route Handler 必要な層だけ着けて、その層を直接呼べばよい © LayerX Inc. Schema Definition Resolver Execution Engine Execution Middleware Transport Adapter Transport 13
RSC / SSR から GraphQL を直接呼ぶ RSC — yoga.fetch yoga.fetch
Request を直接呼ぶ はグローバルの fetch ではなく、Yoga インスタンスのメソッド を渡すとその場で GraphQL が走り、 Response が返る Server Component は async 関数なので、これを await するだけ © LayerX Inc. 14
RSC / SSR から GraphQL を直接呼ぶ SSR — Apollo Client
の YogaLink Apollo Client の API はそのまま。差し替わるのは link だけ Client Component と同じ書き味のまま、サーバ側でも実行できる © LayerX Inc. 15
メール・Slack から呼ぶ © LayerX Inc.
メール・Slack から呼ぶ メールも Slack も、Web ページと同じ view 出てくるものは同じ 「表示用の氏名」「ステータスの表示名」「金額の書式」… 本質的に同じ
presentation logic が使われるはず ならば Web frontend と同じ方法論が使えるはず © LayerX Inc. 17
メール・Slack から呼ぶ Web frontend の方法論をそのまま持ち込む ① component 指向で view を組む
jsx-slack — Slack Block Kit react-email — メール HTML vercel/chat — チャット UI fragment colocation もそのまま ② presentation logic は API の裏に隠蔽されている 表示のためのロジックは、Web frontend 向けの resolver にすでにある 「この view に何が必要か」の宣言 (query + DataLoader)ごと再利用できる GraphQL が in-process で呼べればオーバーヘッドを最小にしつつ再利用できる © LayerX Inc. 18
メール・Slack から呼ぶ component が自分の依存データを宣言する © LayerX Inc. https://speakerdeck.com/izumin5210/using-typescript-plus-jsx-outside-of-web-frontend-number-tskaigikansai 19
メール・Slack から呼ぶ 呼び出し側 メールなら render(<ReportEmail data={data.contentReport} />) に変わるだけ © LayerX
Inc. 20
まとめ © LayerX Inc.
まとめ in-process GraphQL のすすめ GraphQL サーバは層に分解できて、Transport は一番外側の層でしかない API が引くのは論理的な境界線。物理的に分けなくても成立する Next.js
に相乗りさせれば、デプロイメントを増やさずに始められる 必要な層だけ着けて、その層を直接呼べる RSC / SSR、そしてメール・Slack のような push 型 view からも 結果として「view のためのデータ取得と presentation logic」を、 Web frontend の外へほぼコストゼロで持ち出せる © LayerX Inc. 22