zustand について
zustand は React 開発者向けの軽量な状態管理スキルです。Store の作成、TypeScript のパターン、ミドルウェア、Next.js などでの実践方法を扱います。
主な機能
- 01Provider 不要のフックベース Store
- 02TypeScript での Store 作成パターン
- 03セレクターと浅い比較
- 04永続化や更新のミドルウェア
- 05大規模 Store のスライス構成
活用シーン
- 01基本的な React Store の構築
- 02状態の localStorage への永続化
- 03React でのバニラ Store の利用
- 04Next.js での Store 構成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ marcioaltoe/ skills --skill zustandインストール後、Claude Code で/zustandを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/apis.mdmiddlewares.mdpatterns.mdtypescript.md詳細
Zustand
React 向けの軽量な状態管理です。プロバイダーも定型コードも不要です。ストアはフックです。
クイックスタート
import { create } from "zustand"
interface BearState {
bears: number
increase: (by: number) => void
}
const useBearStore = create<BearState>()((set) => ({
bears: 0,
increase: (by) => set((state) => ({ bears: state.bears + by })),
}))
// In components — select only what you need
const bears = useBearStore((state) => state.bears)
重要なルール
- TypeScript: 型推論に必要なため、カリー化形式の
create<T>()(...)を使用します - 不変性: 状態は不変として扱います。
setが浅くマージするのは 1 階層のみです - セレクター: ストア全体ではなく、特定のフィールドを常に選択します。新しい参照を返す複数フィールドのセレクターには
useShallowを使用します - ミドルウェアの順序:
devtoolsを最も外側に配置する必要があります:devtools(persist(immer(...))) - Next.js: グローバルな
createではなく、createStoreと Context を使ってリクエストごとにストアを作成します - ネストされた更新: 深いネストには Immer を、浅いネストにはスプレッド演算子を使用します
用途に応じた選択
| 必要なもの | 解決策 |
|---|---|
| 基本的な React ストア | create<T>()(...) |
| Vanilla(React 以外)のストア | zustand/vanilla の createStore |
| React で Vanilla ストアを使用する | useStore(store, selector) |
| 型を自動推論する(インターフェースなし) | combine ミドルウェア |
| localStorage に永続化する | persist ミドルウェア |
| Redux DevTools | devtools ミドルウェア |
| 可変スタイルの更新 | immer ミドルウェア |
| スライスを外部から購読する | subscribeWithSelector ミドルウェア |
| 再レンダリングせずに複数のフィールドを取得する | useShallow ラッパー |
| 大規模なストアをモジュール化する | StateCreator を使ったスライスパターン |
| Next.js App Router | createStore + Context + Provider |
| ストアをリセットする | set(initialState) または store.getInitialState() |
参考資料
- API リファレンス(create、createStore、フック、shallow):references/apis.md を参照
- TypeScript のパターン(カリー化された create、スライス、ミドルウェアの型付け、カスタムミドルウェア):references/typescript.md を参照
- ミドルウェア(persist、devtools、immer、redux、combine、subscribeWithSelector):references/middlewares.md を参照
- パターンとベストプラクティス(Next.js、テスト、リセット、自動セレクター、SSR、深い階層の更新):references/patterns.md を参照
コメント
Markdown 対応