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
stand.fmにGraphQLを導入して、半年。〜導入経緯や技術選択、現状や将来について〜
Search
Spice-Z
March 03, 2022
Programming
2.4k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
stand.fmにGraphQLを導入して、半年。〜導入経緯や技術選択、現状や将来について〜
こちらの発表で使用した資料です
https://standfm.connpass.com/event/239750/
Spice-Z
March 03, 2022
More Decks by Spice-Z
See All by Spice-Z
Native Module入門記録
spicez
3
990
NuxtでSSR時にGoogleOptimize(ABテストツール)を使いたい
spicez
1
1.2k
"transform" Why do we have to use it in CSS animation
spicez
0
5.2k
Other Decks in Programming
See All in Programming
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
230
AIと壁打ちしながら進めるコスト管理
fufuhu
2
2k
Family mrubyの進捗
kishima
1
100
ソフトウェアラスタライザ
fadis
1
800
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
180
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
Intent as Code
shoppingjaws
4
650
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
190
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
高専キャリア LT 発表内容
crysta1221
6
5.6k
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
560
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
730
Designing for humans not robots
tammielis
254
26k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Ruling the World: When Life Gets Gamed
codingconduct
0
330
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
The Language of Interfaces
destraynor
162
27k
Transcript
に GraphQLを導入して、半年。 〜導入経緯や技術選択、現状や将来について〜 by spice(@rabspice) on 2022/03/03 @ TECH STAND
#7 GraphQL
自己紹介 @rabspice ・2021年6月stand.fm入社 ・React Native / React / express などで
アプリ/ Web / バックエンド を実装している ・マリオカート(switch)をほぼ毎日やってる (やってる人いたらフレンドになりましょう) spice (Yugo Ogura)
stand.fmでは 2021年10月頃から GraphQLを使い始めました。 今回は ・GraphQLの導入理由 ・技術選定話 ・実際に導入しての苦労話 についてお話しします! ※時間がないのであんまり深ぼれなさそう。 聞きたことがあったらQ&Aセクションで
目次 1. GraphQL導入の理由 2. ライブラリの技術選定理由 3. 「新機能はGraphQLでやってみよう!」の苦労 4. 現状とこれから 0.
stand.fmのアーキテクチャ
stand.fmの アーキテクチャ
stand.fmのアーキテクチャ App Web React Native React Redux app server web
server DB 音声系 処理 課金系 処理 その他色々な処理 ※ 全てJSなので、1人がフロント~バックエンド実装を担当することもしばしば
目次 1. GraphQL導入の理由 2. ライブラリの技術選定理由 3. 「新機能はGraphQLでやってみよう!」の苦労 4. 現状とこれから 0.
stand.fmのアーキテクチャ
GraphQL導入の理由
・既存のRedux Storeをアプリ上で効率的に使うことが難しかった ・APIコールのキャッシュとして使いたいけど、複雑すぎて開発コスト高い GraphQL導入の理由
・コンポーネントの依存するデータが追いにくく、バグが頻発していた ・undefined参照でアプリが落ちるとか ・既存のRedux Storeをアプリ上で効率的に使うことが難しかった ・APIコールのキャッシュとして使いたいけど、複雑すぎて開発コスト高い GraphQL導入の理由
・コンポーネントの依存するデータが追いにくく、バグが頻発していた ・undefined参照でアプリが落ちるとか ・既存のRedux Storeをアプリ上で効率的に使うことが難しかった ・APIコールのキャッシュとして使いたいけど、複雑すぎて開発コスト高い GraphQL導入の理由 ・クライアントからサーバーサイドにビジネスロジックを寄せたい ・本来ならAPIを変更すべきところを、アプリ側の変更で吸収しがち ・見通しが悪かったりテストが描きにくかったり
Q. GraphQLじゃなくてもよかったのでは? リファクタ がんばる SWR や React Query GraphQL (with
Relay) APIの キャッシュ コンポーネント の依存データ 整理 ビジネス ロジック をサーバーに
目次 1. GraphQL導入の理由 2. ライブラリの技術選定理由 3. 「新機能はGraphQLでやってみよう!」の苦労 4. 現状とこれから 0.
stand.fmのアーキテクチャ
ライブラリの 技術選定理由
採用したGraphQL関連ライブラリ Apollo Federation Rover CLI DataLoader graphql-codegen Relay
Apollo Gateway GraphQL関連部分のアーキテクチャ App Web app server web server Core
Server Relay Rover CLI graphql-codegen Dataloader schema/型生成
Q. なぜ Relay ? 「コンポーネントが必要なデータの定義を 同ファイルに書くことを強制しやすい」のが良い。 (Apollo Clientはデフォルトでやりにくい)
コンポーネントファイルの中に 必要なデータの定義を書く 実際にデータを使う時は Relayが用意するhooksで データを取り出す 子
子 親 親でもRelayのhooksを使って データを取り出す 子にはデータが含まれるオブ ジェクトを渡す 子コンポーネントで必要な Fragment(データの定義) を必ず展開
このあたりのRelayのコンセプトは、 公式ドキュメントの 「Principles And Architecture > Thinking in Relay」 に書いてあります。
https://relay.dev/docs/principles-and-architecture/thinking-in-relay/
Q. Relayのサーバー仕様を満たすの面倒では 言うほどでもなさそうです また、これによりクライアント側で便利なRelayの関数がたくさん使えるので メリットがかなり上回ってる感じがあります
Q. なぜ Apollo Server ・JSのGraphQLサーバーライブラリは他に目ぼしいものがなさそうだった ・RelayとApollo Serverの組み合わせは特に問題ないです ・既存のサーバーの構成に則りたい ・今後複数のGraphQLサーバー組み合わせたい Apollo
Server Apollo Federation
目次 1. GraphQL導入の理由 2. ライブラリの技術選定理由 3. 「新機能はGraphQLでやってみよう!」の苦労 4. 現状とこれから 0.
stand.fmのアーキテクチャ
新機能はGraphQL でやってみよう! の苦労
0から学んで実装はとにかく時間がかかった ・最初の数人がとにかく頑張って数個の機能を実装したけど大変 ・サーバー側/アプリ側の実装のパラダイムシフト ・何も考えないとRESTの設計に引きづられてGraphQLの理解が進まない
0から学んで実装はとにかく時間がかかった ・⇨ slackに#z-graphqlを作り、知見の集約 ・⇨ドキュメント読む会を開催して全体で理解しやすく ・https://graphql.org/learn/ ⇨ GraphQL自体 ・https://www.apollographql.com/docs/apollo-server/ ⇨ サーバー実装
・https://relay.dev/ ⇨ フロント実装 ・⇨ 初めて実装する人は、ペアプロで学習コストを下げたり
・組織内に知見が少なくて参考になるコードも少ない ➡ 工数増加で実装に遅れが💦 ・工数増加は一時的で、将来回収できるコストだとエンジニアは認識 ・代表「長期的にメリットあるなら大丈夫です。やりましょう。」 ・エンジニア「❤」 実装工数の一時的な増加
目次 1. GraphQL導入の理由 2. ライブラリの技術選定理由 3. 「新機能はGraphQLでやってみよう!」の苦労 4. 現状とこれから 0.
stand.fmのアーキテクチャ
現状とこれから
現状とこれから ・新機能は基本GraphQLで開発 ・既存機能は適宜GraphQLで置き換えている ・Relayを使いながらReduxからうまく脱却する ・エラーハンドリングや負荷対策 ・Relay関連の知見についてはたくさんブログを書きたいと思っています(!)
質問があれば Q&Aセクション or Meety で! Thank you !