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
72
Reactで始めるsencer入門
remrem0090
0
46
今日から始めるgithub actions
remrem0090
0
41
effectorを使い倒してReduxのかわりになるか検証する
remrem0090
1
760
React code Splitting
remrem0090
1
540
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
For a Future-Friendly Web
brad_frost
179
9.8k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Agile that works and the tools we love
rasmusluckow
329
21k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
RailsConf 2023
tenderlove
30
1.1k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Gamification - CAS2011
davidbonilla
81
5.4k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
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!!