xstate-store について
xstate-storeは、TypeScriptプロジェクトで@xstate/store v4と@xstate/store-react v2を扱うコーディングスキルです。状態プリミティブの選択を案内し、ストアロジック、React連携、テスト、移行の参照情報を提供します。
主な機能
- 01状態プリミティブの選択
- 02ストアの遷移と副作用の実装
- 03アトムとセレクターの利用
- 04ストアとReactの連携
- 05ストアのテストと移行
活用シーン
- 01機能に適した状態モデルの選定
- 02非同期副作用とイベント発行の追加
- 03ストア状態とReactコンポーネントの接続
- 04v3またはZustandストアの移行
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pedronauck/ skills --skill xstate-storeインストール後、Claude Code で/xstate-storeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/effects-and-events.mdextensions.mdmigration-v4.mdreact.mdschemas-and-validation.mdselectors-and-atoms.mdstore-core.mdstore-logic-and-input.mdtesting-and-interop.md詳細
XState Store
@xstate/store v4 および @xstate/store-react v2(TypeScript 5.4+)が対象です。変更する API や動作に対応するリファレンスを読みます。変更に関係する範囲のリファレンスのみ追加で読み、すでに読んだ関連情報は再利用します。
まずプリミティブを選ぶ
| 状態 | プリミティブ | 理由 |
|---|---|---|
| 名前付きイベントを通じて更新されるドメイン状態 | createStore({ context, on }) | 型付きの trigger、can、イベントの発行、再生可能な遷移 |
| 入力から構築するインスタンスごとの状態 | createStoreLogic({ context: (input) => … }) | 定義は1つで、複数のインスタンスを作成できます。selectors も備わっています |
| 直接設定する単一の値 | createAtom(value) | ストアを正当化するイベントの種類がありません |
| 他のアトムやセレクターから算出する値 | createAtom(() => …) | 読み取り専用で、依存関係が変わると再計算されます |
| モード、ガード、遅延、階層状態、並列状態 | xstate マシン | ストアがモデル化するのはデータであり、ライフサイクルではありません |
完了条件: この表に基づいてプリミティブが選択され、その選択理由が妥当であること。
分岐
| 状況 | リファレンス |
|---|---|
ストアの作成、遷移の記述、trigger/send/can の使用、または Immer | references/store-core.md |
| エフェクトのキューへの追加、イベントの発行、または非同期処理 | references/effects-and-events.md |
schemas の宣言、またはランタイム検証の有効化 | references/schemas-and-validation.md |
store.select、アトム、派生/非同期/リデューサーアトムによる状態の読み取り | references/selectors-and-atoms.md |
createStoreLogic、入力、または selectors を使った再利用可能/インスタンスごとのストアの構築 | references/store-logic-and-input.md |
persist、undoRedo、reset の追加、または .with(...) による合成 | references/extensions.md |
| ストアと React コンポーネントの接続 | references/react.md |
| 遷移のテスト、ストアの検査、または XState との相互運用 | references/testing-and-interop.md |
| v3 ストアの v4 へのアップグレード、または既存の Zustand ストアの移行 | references/migration-v4.md |
変更する動作に関連する技術ルールを適用します。
注意点
遷移 — 完全な次のコンテキスト(古いコンテキストをスプレッド)を返します。イベントを許可しない場合は undefined を返します。これは store.can.*() が報告する内容です。
エフェクト — 遷移内で enqueue.effect、enqueue.emit.*、enqueue.trigger.* を同期的に呼び出します。非同期処理は enqueue.effect(async () => …) 内に記述し、別のイベントをトリガーして結果を返します。
インポート — フレームワークのバインディングは @xstate/store-react(および関連パッケージ)からインポートし、@xstate/store/react からはインポートしません。拡張機能は @xstate/store/persist、/undo、/reset、/validate からインポートします。
スキーマ — schemas はストアの型を定義します。ランタイムで検証するのは .with(validateSchemas()) を指定した場合のみです。
アトム — 算出アトムは .get() で依存関係を読み取ります。最初のパラメーターは前回の算出値なので、使用時は createAtom<T>(…) を指定します。
React — アプリ全体の状態にはモジュールスコープのストアを、コンポーネントスコープの状態には useStore(logic, input) を使用します。getSnapshot() ではなく、useSelector/useAtom で購読します。