🔪

Zustandって大規模な状態管理に使えるの?Zustand-Slicesを作ったワケ

2024/09/14に公開

個人的にはJotaiの方が大規模開発に向いているのではないかと思うのですが、現状だと大規模開発にはZustandの方が優勢のようです。

https://x.com/dai_shi/status/1826447367429911018

質問は「大規模」ではなく「複雑」なので、正確性に欠けますが。

個人的に大規模に向かないと思った一つの理由はSlicingの対応です。もともと、Slicingの仕組みはZustandには備わっておらず、コミュニティによって発展した使い方です。JSの場合はそれほど困らないのですが、TSの場合は型づけが複雑でドキュメントになってはいるものの、自分ではあまり使う気になりません。また、Slicingする場合は、各Sliceが独立するようにNamespacingするのが一般的だと思いますが、それもできません。

Namespacingはだいぶ以前に求められてきた機能ですが、仕組みが複雑になりがちなのと、実現方法が複数あることから、Zustand本体では対応しないことにしました。その後、Namespacing対応のライブラリは登場しているのですが、残念ながらあまり使われていません。

何かテコ入れが必要だと思いつつ、Zustand自体はunopinionatedを売りの一つにしているので使い方を狭める機能を加えたくありません。しかし、外部ライブラリとしてならその制限はありません。それなら、自分好みのやつを一つ作ってみようと思ったのが、Zustand-Slicesです。

https://github.com/zustandjs/zustand-slices

こちらはある程度opinionatedなのでユーザを選ぶと思います。実装としてはシンプルなので、Zustand流ではあると思っていて、今のところの一押しです。

対抗馬はいくつかあって、以前pollしたので参考にしてください。

https://zenn.dev/dai_shi/articles/af7d1dfe17a35e

こちらを直接見ていただく方がいいかも。

https://github.com/pmndrs/zustand/discussions/2647


少し余談ですが、TypeScriptの書き方で、型を明示するのを好む人と、型推論を好む人がいるのですよね。

const valWithExplicitTyping: number = 1;
const valWithTypeInferred = 1;

上記のPollでBare Zustandが強いところを見ると、前者のが主流なのかも。Zustand-Slicesは後者です。

Discussion