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
210
Reactでのマルチストア運用を考察する
Effectorにを触ってみてマルチストアの運用について考察してみました。
Hayashi Takao
August 08, 2019
Tweet
Share
More Decks by Hayashi Takao
See All by Hayashi Takao
今日から始めるWeb Components
remrem0090
0
71
Reactで始めるsencer入門
remrem0090
0
44
今日から始めるgithub actions
remrem0090
0
40
effectorを使い倒してReduxのかわりになるか検証する
remrem0090
1
720
React code Splitting
remrem0090
1
520
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Scaling GitHub
holman
459
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
Embracing the Ebb and Flow
colly
84
4.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
490
Why Our Code Smells
bkeepers
PRO
335
57k
The Language of Interfaces
destraynor
155
24k
Navigating Team Friction
lara
183
15k
Unsuck your backbone
ammeep
669
57k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
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!!