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
Reactでのマルチストア運用を考察する
Search
Hayashi Takao
August 08, 2019
0
220
Reactでのマルチストア運用を考察する
Effectorにを触ってみてマルチストアの運用について考察してみました。
Hayashi Takao
August 08, 2019
Tweet
Share
More Decks by Hayashi Takao
See All by Hayashi Takao
今日から始めるWeb Components
remrem0090
0
73
Reactで始めるsencer入門
remrem0090
0
46
今日から始めるgithub actions
remrem0090
0
41
effectorを使い倒してReduxのかわりになるか検証する
remrem0090
1
760
React code Splitting
remrem0090
1
550
Featured
See All Featured
The Language of Interfaces
destraynor
158
25k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
For a Future-Friendly Web
brad_frost
179
9.9k
A designer walks into a library…
pauljervisheath
207
24k
Making Projects Easy
brettharned
117
6.3k
Rails Girls Zürich Keynote
gr2m
95
14k
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
GitHub's CSS Performance
jonrohan
1031
460k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Agile that works and the tools we love
rasmusluckow
329
21k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
Transcript
Reactでのマルチストア運用を 考察する
自己紹介
自己紹介 Hayashi Takao (れむ@9almondchocola) software engineer / React, Scala, Go
Cyberbuzz,inc.
マルチストアというユートピア
ドメインが適切に切られていて、 ドメインは自分の関心ごとに必要な情報だけを更新し 必要なコンポーネントがその情報を取りに行くって最高じゃね? Reduxのシングルストアはでかくなりすぎる! ミドルウェアのメンテキッツ! 同じような情報がストア内にいるしいらない情報まで取りに行って欲しくない! となったのでマルチストアでのフロントエンド開発をしてみました。
今回はマルチストアを実現するために Effectorというライブラリを使用しました。 Effector : https://effector.now.sh/
今回注目してみているポイント
注目ポイント - ストアの予測はしやすいか? - メンテナンスコストは低いか? - テストしやすいか?またはテストカバレッジを阻害されないか?
ストアが予測しやすいか?
ストアの予測 EffectorにはDomainという実装がある。 DomainはそのDomainの中で発生する通信やイベント、状態変化を サブスクライブするがDomainの外の情報には干渉しない。 また、Domainの中にDomainを作ることができる。
❌ App User Likes Follower
micro serviceがBfFからのリクエストに応じる感覚に近く てとてもすき。 データ設計がシンプルなほど強い。
Domainは名前空間 親は子のDomainをサブスクライブできるが、子は親の状態を知らない。 つまり名前空間をきちんと切って通信して APIの戻り値や状態をストアリングしてくれる!!
メンテナンスしやすい?
メンテナンス性 DomainごとにEventやEffectがあるので責務が明確。 明確な責務のものほどメンテナンスがしやすい! 発行されたEventの処理は一つの関数が担うため、Domainがわかれてるから 関係ない値を選別したりする必要はない。
テストしやすい?
テストのしやすさ マルチストアはテストしにくい! ストアの状態が色々あるためテストパターンを用意するのが大変。 特にコンポーネント単位になってくるとカオス。 テスト性能に置いてReduxはすごく快適。
ここまでを振り返る
振り返り - ストアの予測 ◦ - メンテナンス性能 ◦ - テスト ✖
でもよく考えると辛い本質はストアの形ではない気がする。。。
Reduxのときつらいなと思ったこと - 不必要にでかいオブジェクト - 責務があやふやなaction - 巨大すぎるMildeWear - コンポーネントテストつらい!
翻って見てみればきつい原因は - とりあえずで作った計画性のないaction - 責務が不明確なままつくったMiddleWear - デザイナーに適当に振ってしまったコンポーネント ...etc
ごめんなさい、ちゃんと設計をすべきでした。 銀の弾丸を望んですいまんせんでしたm(_ _)m
まとめ
- そもそも論、情報設計が悪かった(Redux) - 情報設計の筋の悪さはマルチストアでも解消されない!! - マルチストアにしてテストカバレッジ下がるくらいならしないほうがいい - ミドルウェア部分のメンテナンス性は抜群 - ストアの中身の予測もしやすい
マルチストアは全然銀の弾丸ではなかった。 基本的な設計がすごく大切。 関わる人全員で知見を深め作り上げてく必要がある。
Thank you!!