Submit Search
Upload
20年続いているサービスの複雑な注文画面を GraphQL を使って改善した話
•
0 likes
•
154 views
Demaecan
Follow
【一休 × 出前館】Frontend Meetup 資料
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 46
Download now
Download to read offline
Recommended
ライフインフラとなるために進めている出前館の Web アクセシビリティ改善への取り組み
ライフインフラとなるために進めている出前館の Web アクセシビリティ改善への取り組み
Demaecan
設計書からの卒業
設計書からの卒業
Fumiyasu Sumiya
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
智啓 出川
商流物流金流.pdf
商流物流金流.pdf
Zenji Kanzaki
Object as Points
Object as Points
harmonylab
エステティクス(美学=感性論)概念を 視座とする「きれい事」の経営実現に関する考察
エステティクス(美学=感性論)概念を 視座とする「きれい事」の経営実現に関する考察
Yuichi Inobori
Git超入門(ハンズオン).pdf
Git超入門(ハンズオン).pdf
憲昭 村田
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
eiryu
Recommended
ライフインフラとなるために進めている出前館の Web アクセシビリティ改善への取り組み
ライフインフラとなるために進めている出前館の Web アクセシビリティ改善への取り組み
Demaecan
設計書からの卒業
設計書からの卒業
Fumiyasu Sumiya
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
智啓 出川
商流物流金流.pdf
商流物流金流.pdf
Zenji Kanzaki
Object as Points
Object as Points
harmonylab
エステティクス(美学=感性論)概念を 視座とする「きれい事」の経営実現に関する考察
エステティクス(美学=感性論)概念を 視座とする「きれい事」の経営実現に関する考察
Yuichi Inobori
Git超入門(ハンズオン).pdf
Git超入門(ハンズオン).pdf
憲昭 村田
Javaでのバリデーション 〜Bean Validation篇〜
Javaでのバリデーション 〜Bean Validation篇〜
eiryu
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
Deep Learning JP
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
智啓 出川
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
Kazuyuki Miyazawa
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
TorchDataチュートリアル解説
TorchDataチュートリアル解説
西岡 賢一郎
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Jun Kurihara
[DL Hacks]Simple Online Realtime Tracking with a Deep Association Metric
[DL Hacks]Simple Online Realtime Tracking with a Deep Association Metric
Deep Learning JP
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
takaya imai
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
Deep Learning JP
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
Deep Learning JP
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
Yoshinori Yamanouchi
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
Deep Learning JP
BRDF レンダリングの方程式
BRDF レンダリングの方程式
康弘 等々力
CycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換する
meownoisy
Linked Open Data(LOD)の基本理念と基盤となる技術
Linked Open Data(LOD)の基本理念と基盤となる技術
Kouji Kozaki
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
Tatsuo Kudo
Raspberry PiとGoogle Meetでお手軽ペットカメラ
Raspberry PiとGoogle Meetでお手軽ペットカメラ
KLab Inc. / Tech
ChatGPTの驚くべき対話能力 20230414APR.pdf
ChatGPTの驚くべき対話能力 20230414APR.pdf
YamashitaKatsushi
More Related Content
What's hot
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
Deep Learning JP
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
智啓 出川
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
Kazuyuki Miyazawa
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
Naohiro Fujie
TorchDataチュートリアル解説
TorchDataチュートリアル解説
西岡 賢一郎
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Jun Kurihara
[DL Hacks]Simple Online Realtime Tracking with a Deep Association Metric
[DL Hacks]Simple Online Realtime Tracking with a Deep Association Metric
Deep Learning JP
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
takaya imai
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
Deep Learning JP
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
Deep Learning JP
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
Yoshinori Yamanouchi
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
Deep Learning JP
BRDF レンダリングの方程式
BRDF レンダリングの方程式
康弘 等々力
CycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換する
meownoisy
Linked Open Data(LOD)の基本理念と基盤となる技術
Linked Open Data(LOD)の基本理念と基盤となる技術
Kouji Kozaki
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
Tatsuo Kudo
Raspberry PiとGoogle Meetでお手軽ペットカメラ
Raspberry PiとGoogle Meetでお手軽ペットカメラ
KLab Inc. / Tech
ChatGPTの驚くべき対話能力 20230414APR.pdf
ChatGPTの驚くべき対話能力 20230414APR.pdf
YamashitaKatsushi
What's hot
(20)
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
VoxFormer: Sparse Voxel Transformer for Camera-based 3D Semantic Scene Comple...
分散型IDと検証可能なアイデンティティ技術概要
分散型IDと検証可能なアイデンティティ技術概要
TorchDataチュートリアル解説
TorchDataチュートリアル解説
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
[DL Hacks]Simple Online Realtime Tracking with a Deep Association Metric
[DL Hacks]Simple Online Realtime Tracking with a Deep Association Metric
画像認識の初歩、SIFT,SURF特徴量
画像認識の初歩、SIFT,SURF特徴量
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
プログラミング勉強会「オトナのGit入門」
プログラミング勉強会「オトナのGit入門」
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
[DL輪読会]Batch Renormalization: Towards Reducing Minibatch Dependence in Batch-...
BRDF レンダリングの方程式
BRDF レンダリングの方程式
CycleGANで顔写真をアニメ調に変換する
CycleGANで顔写真をアニメ調に変換する
Linked Open Data(LOD)の基本理念と基盤となる技術
Linked Open Data(LOD)の基本理念と基盤となる技術
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
Raspberry PiとGoogle Meetでお手軽ペットカメラ
Raspberry PiとGoogle Meetでお手軽ペットカメラ
ChatGPTの驚くべき対話能力 20230414APR.pdf
ChatGPTの驚くべき対話能力 20230414APR.pdf
20年続いているサービスの複雑な注文画面を GraphQL を使って改善した話
1.
20年続いているサービスの 複雑な注文画面を GraphQLを使って改善した話 株式会社出前館・橋本茉利奈
2.
橋本茉利奈 Hashimoto Marina 株式会社出前館 モバイルアプリエンジニア
3.
4.
出前館アプリ
5.
注文画面
6.
7.
お届け時間
8.
お届け時間 決済方法
9.
お届け時間 決済方法 クーポン利用
10.
お届け時間 決済方法 クーポン利用 LINEポイント
11.
お届け時間 決済方法 クーポン利用 LINEポイント 特典の付与
12.
お届け時間 決済方法 クーポン利用 LINEポイント 特典の付与 料金の再計算
13.
お届け時間 決済方法 クーポン利用 LINEポイント 特典の付与 料金の再計算 めっちゃ切り替わる…😵
14.
状態管理が大変…😵
15.
状態管理が大変…😵 • 画面内に状態を管理しなければいけない要素が多い • 増え続ける決済パターン •
ユーザ操作によって切り替わる注文情報 • ユーザへの許諾チェックボックスの表示制御 …etc
16.
どうする…🤔
17.
とにかくシンプルを目指す
18.
RecoilをState管理に使ってみた • ねらい:State管理をできるだけシンプルにする • 要素をできるだけ細かく分解して管理する •
Stateをどこからでも呼び出せる
19.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method
20.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method
21.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method 依存関係が多すぎる…😵
22.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method
23.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method
24.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method 頻繁に更新される…😵
25.
screen RecoilをState管理に使ってみた Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method かえって複雑に…😵
26.
どうする…🤔
27.
状態を2種類にわける
28.
Server Cache /
Local State
29.
Server Cache • サーバの情報を保持するキャッシュ •
サーバとクライアントの情報の一致が常に保証されている • キャッシュの値がコンポーネントへリアクティブに作用する
30.
Local State • クライアントでのユーザ操作による情報を管理するState •
クライアントのみで一時的に保持している値を管理
31.
screen Server Cache /
Local State Server user input Server Cache Local State
32.
注文画面で実装する💪
33.
注文画面で実装する💪 • Server Cache
→ Apollo Client のキャッシュを使う • Local State → React useState を使う
34.
screen 注文画面で実装する💪 Apollo Server (BFF) user input Apollo
Client Cache useState
35.
注文画面で実装する💪 • Server Cache
→ Apollo Client のキャッシュを使う • Local State → React useState を使う
36.
Server Cache→ apollo
client のキャッシュを使う • BFFのレスポンス情報自体を、Server Cacheとして保持する • BFF (GraphQL) によって、1画面描画のためのリクエストが1回で 済むのでServer Cacheの状態管理が容易 • BFFのスキーマで型定義できる
37.
注文画面で実装する💪 • Server Cache
→ Apollo Clientのキャッシュを使う • Local State → React useState を使う
38.
Local State →
React useState を使う • Server Cacheのおかげで、Localで独自に定義するStateを減らすこと ができる
39.
screen Before... Recoil Server user input item info amount coupon delivery type LINE
point order type terms agreement isEnabled receipt address phone number payment method
40.
screen After... Apollo Server (BFF) user input Apollo
Client Cache useState isEnabled address payment method
41.
まとめ
42.
まとめ • 注文画面は、出前館アプリの中でも状態管理が大変な画面のひとつ • まずRecoilで管理する方法を試したものの、膨大な量のStateを管 理しなければならず、大変なことに...
43.
まとめ • そこで、画面で管理するStateをSever CacheとLocal
Stateの2種類に 分類して管理することにした
44.
まとめ • Server Cacheとして,
Apollo Client のキャッシュを活用することで 、型安全で、かつシンプルにサーバ情報を保持できるようになった
45.
まとめ • Server Cacheがあるおかげで、ユーザ操作によって更新がかかる StateのみをLocal
Stateで管理すれば良くなった
Download now