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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
takanorip
May 23, 2018
Technology
840
0
Share
GraphQLの オフライン対応した話
takanorip
May 23, 2018
More Decks by takanorip
See All by takanorip
「見せる」登壇資料デザインの極意
takanorip
3
790
Design System Documentation Tooling 2025
takanorip
3
2.6k
デザインエンジニアの延長にデザインマネージャーとしての可能性を探る
takanorip
1
1k
Tools for Design Engineers other than LLM in the LLM era
takanorip
1
730
Bulletproof Design System with TypeScript
takanorip
7
5k
Eleventy3.0 で始める爆速個人ブログ開発!
takanorip
0
280
Webフォント選定の極意!フォントの基本から最新トレンドまで徹底解説
takanorip
6
1.1k
効果的な管理画面を デザインをするために 避けるべき5つの罠
takanorip
15
7.8k
社内管理画面のデザインもプロダクトデザイン
takanorip
5
2.2k
Other Decks in Technology
See All in Technology
Purview Endpoint DLP 動かしてみた
kozakigh
0
250
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
2
1.1k
QAエンジニアはどうやって プロダクト議論の場に入れるのか?
moritamasami
2
410
freeeで運用しているAIQAについて
qatonchan
0
480
Agent Skillsで実現する記憶領域の運用とその後
yamadashy
2
1.6k
鹿野さんに聞く!CSSの最新トレンド Ver.2026
tonkotsuboy_com
6
2.8k
色を視る
yuzneri
0
330
「強制アップデート」か「チームの自律」か?エンタープライズが辿り着いたプラットフォームのハイブリッド運用/cloudnative-kaigi-hybrid-platform-operations
mhrtech
0
160
AI時代に、 データアナリストがデータエンジニアに異動して
jackojacko_
0
620
AIの揺らぎに“コシ”を与える階層化品質設計
ickx
0
270
そのSLO 99.9%、本当に必要ですか? 〜優先度付きSLOによる責任共有の設計思想〜 / Is that 99.9% SLO really necessary? Design philosophy of shared responsibility through prioritized SLOs
vtryo
0
500
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
5
1.2k
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.4k
GitHub's CSS Performance
jonrohan
1032
470k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
920
Measuring & Analyzing Core Web Vitals
bluesmoon
9
820
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
400
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
180
How to Ace a Technical Interview
jacobian
281
24k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
340
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
540
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Transcript
GraphQLの オフライン対応した話 Takanori Oki @PWA Beginners 勉強会 #4
自己紹介 • 大木尊紀(オオキタカノリ / @takanorip) • 株式会社スマートドライブ フロントエンドエンジニア • Nuxt.js、Polymer、React、など
• Polymer Japan 翻訳チーム
「イヌでもわかる〜」シリーズ Boothで好評発売中!
None
GraphQL?
GraphQL / Apollo Client • GraphQL • APIへリクエストするためのクエリ言語 • apollo-client
• フロントエンドからGraphQLへリクエスト するためのツール
GraphQLのリクエスト結果は ServiceWorkerだけだと キャッシュされない
なぜ?
GraphQLは すべてのリクエストが POSTメソッド だから!
Cache.put と、Cache.add、 Cache.addAll は、 GET リクエストのみ cache に保存できます。 出典:MDN
別途、GraphQLの オフライン対応が必要
じゃあどうするの? • リクエスト結果をIndexedDBなどに保存 • オフラインエラーのときはIndexedDBに 保存したキャッシュに向けて再度リクエストを 投げる • その結果を使ってViewを表示
apollo-cache-persist • GraphQLのキャッシュをオフラインストレージ に入れることで永続化するライブラリ • localStorage、sessionStorage、 localForageに対応してる • https://github.com/apollographql/ apollo-cache-persist
None
補足:localForage • 非同期ストレージ(IndexedDBやWebSQL) をlocalStorageライクなAPIで使えるように してくれる • IndexedDBやWebSQLがサポートされてな いブラウザだとlocalStorageを使う • (localStorageは同期的)
None
apollo-link-retry • ネットワーク接続がオフラインのとき、リクエスト を保持し、オンラインに戻るまで再試行する • オフラインのときにすぐこけない • 間隔や遅延などをコントロールできる
None
Optionの設定 • apollo-clientの設定でキャッシュを優先的に 参照するようにする
None
まとめ
• GraphQLはServiceWorker だけじゃオフライン対応できない • localForageが有能 • キャッシュに対してクエリを投げる
おわり (フォント:BIZ UDフォント)