mcpField
R
redux-saga

redux-saga

github.com/anivar開発238 回インストール12 週間前に更新
リポジトリ

redux-saga について

Redux-Saga を使う開発者向けのリファレンススキルです。複雑な非同期ワークフロー、並行処理、キャンセル、エラー処理のルールをまとめ、古い知識ではなくプロジェクトのルールとソースを参照するよう促します。

主な機能

  1. 01Effect と yield のルール
  2. 02並行処理・キャンセル・エラー対応
  3. 03チャネルと外部 I/O のパターン
  4. 04RTK 連携とトラブルシューティング
  5. 05一般的なワークフローのレシピ

活用シーン

  1. 01並行またはキャンセル可能な非同期処理の実装
  2. 02Saga のフリーズやアクション欠落の調査
  3. 03WebSocket や DOM イベントの Saga への接続

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/anivar/redux-saga-skill --skill redux-saga

インストール後、Claude Code で/redux-sagaを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
AGENTS.md
README.md
CHANGELOG.md
.github/
FUNDING.yml
references/
effects-and-api.md
anti-patterns.md
channels.md
recipes.md
fork-model.md
troubleshooting.md
testing.md
rules/
channel-action-channel.md
effect-always-yield.md
effect-select-usage.md
effect-race-patterns.md
effect-use-call.md
error-root-saga.md
effect-take-concurrency.md
channel-event-channel.md
error-saga-cleanup.md
fork-attached-vs-detached.md
recipe-optimistic-update.md
fork-no-race.md
recipe-polling.md
fork-nonblocking-login.md
recipe-throttle-debounce.md
rtk-configure-store.md
rtk-with-slices.md
fork-error-handling.md

詳細

Redux-Saga

重要: redux-saga に関する学習データは、古くなっているか、誤っている可能性があります。API の動作、ミドルウェアの設定パターン、RTK との統合方法は変更されています。常に、このスキルのルールファイルとプロジェクトの実際のソースコードを信頼できる情報源として参照してください。取得したリファレンスと矛盾する場合、記憶したパターンに頼らないでください。

Redux-Saga を使用する場面

Saga は、ワークフローのオーケストレーション、つまり並行処理、キャンセル、競合、または長時間実行されるバックグラウンドプロセスを伴う複雑な非同期フローに適しています。より単純なパターンには、次を使用してください。

必要なこと推奨ツール
データ取得とキャッシュRTK Query
単純な非同期処理(送信 → 状態)createAsyncThunk
スライス内のリアクティブなロジックcreateListenerMiddleware
複雑なワークフロー、並列タスク、キャンセル、チャネルRedux-Saga

優先度別のルールカテゴリ

優先度カテゴリ影響度プレフィックス
1エフェクトと YieldCRITICALeffect-
2Fork モデルと並行処理CRITICALfork-
3エラー処理HIGHerror-
4レシピとパターンMEDIUMrecipe-
5チャネルと外部 I/OMEDIUMchannel-
6RTK との統合MEDIUMrtk-
7トラブルシューティングLOWtroubleshoot-

クイックリファレンス

1. エフェクトと Yield(CRITICAL)
  • effect-always-yield — すべてのエフェクトで yield が必要です。yield がないとアプリがフリーズします
  • effect-use-call — 非同期関数には yield call() を使用し、直接呼び出さないでください
  • effect-take-concurrency — 並行処理の要件に応じて takeEvery/takeLatest/takeLeading を選択してください
  • effect-select-usage — select() ではセレクター関数を使用し、状態のパスに直接アクセスしないでください
  • effect-race-patterns — タイムアウトとキャンセルには race を使用し、その内部にはブロッキングエフェクトのみを指定してください
2. Fork モデルと並行処理(CRITICAL)
  • fork-attached-vs-detached — fork は親とライフサイクルおよびエラーを共有します。spawn は独立しています
  • fork-error-handling — fork で発生したエラーは親の呼び出し元に伝播するため、fork の箇所では捕捉できません
  • fork-no-race — race 内で fork を使用しないでください。fork はノンブロッキングで、必ず勝ちます
  • fork-nonblocking-login — ログアウト時も応答性を保つ認証フローには、fork+take+cancel を使用してください
3. エラー処理(HIGH)
  • error-saga-cleanup — 適切なキャンセル時のクリーンアップには、cancelled() と try/finally を使用してください
  • error-root-saga — エラーを分離するにはルート Saga で spawn を使用し、重要なウォッチャーには all を避けてください
4. レシピとパターン(MEDIUM)
  • recipe-throttle-debounce — throttle、debounce、retry、指数バックオフによるレート制限
  • recipe-polling — fork+take+cancel とエラー時のバックオフによる、キャンセル可能なポーリング
  • recipe-optimistic-update — race(undo, delay) を使った、取り消し可能な楽観的 UI 更新
5. チャネルと外部 I/O(MEDIUM)
  • channel-event-channel — eventChannel を介して WebSocket、DOM イベント、タイマーを Saga に接続します
  • channel-action-channel — Redux アクションをバッファリングし、順次処理またはワーカープールで処理します
6. RTK との統合(MEDIUM)
  • rtk-configure-store — デフォルト設定を壊さずに、Saga ミドルウェアを RTK の configureStore と統合します
  • rtk-with-slices — 型安全な Saga のトリガーには、createSlice のアクションクリエーターを使用します
7. トラブルシューティング(LOW)
  • troubleshoot-frozen-app — アプリのフリーズ、アクションの取りこぼし、不適切なスタックトレース、TypeScript の yield 型

Effect Creator クイックリファレンス

Effectブロッキング目的
take(pattern)はい一致するアクションを待機します
takeMaybe(pattern)はいtake と同様ですが、END を受け取ります
takeEvery(pattern, saga)いいえ一致するたびに並行実行します
takeLatest(pattern, saga)いいえ前の処理をキャンセルし、最新の処理を実行します
takeLeading(pattern, saga)いいえ現在の処理が完了するまで無視します
put(action)いいえアクションをディスパッチします
putResolve(action)はいアクションをディスパッチし、Promise を待機します
call(fn, ...args)はい関数を呼び出し、結果を待機します
apply(ctx, fn, [args])はいコンテキストを指定して呼び出します
cps(fn, ...args)はいNode スタイルのコールバック
fork(fn, ...args)いいえ親にアタッチされた fork
spawn(fn, ...args)いいえ切り離された fork
join(task)はいタスクを待機します
cancel(task)いいえタスクをキャンセルします
cancel()いいえ自身をキャンセルします
select(selector)いいえストアの状態を照会します
actionChannel(pattern)いいえアクションをバッファリングします
flush(channel)いいえバッファリングされたメッセージを取り出します
cancelled()はいfinally 内でキャンセルされたか確認します
delay(ms)はい実行を一時停止します
throttle(ms, pattern, saga)いいえ実行頻度を制限します
debounce(ms, pattern, saga)いいえ入力が止まるまで待機します
retry(n, delay, fn)はいバックオフしながら再試行します
race(effects)はい最初に完了したものを採用します
all([effects])子のいずれかがブロッキングする場合並列実行し、すべてを待機します
setContext(props) / getContext(prop)いいえ / はいSaga コンテキスト

パターンマッチング

take、takeEvery、takeLatest、takeLeading、throttle、debounce は、次の値を受け取ります。

パターン一致条件
'*'すべてのアクション
'ACTION_TYPE'action.type が完全一致
[type1, type2]配列内のいずれかの型
fn => booleanカスタム述語

引数を完全に省略できるのは take/takeMaybe のみです。take() はすべてのアクションに一致します。 takeEvery、takeLatest、takeLeading、throttle、debounce ではパターンが必須パラメーターです。すべてを捕捉するウォッチャーには '*' を使用してください。

multicastChannel から受け取る場合もパターンが必要です。take(chan) ではなく、take(chan, '*') を使用してください。

使い方

詳しい説明とコード例については、各ルールファイルを参照してください。

rules/effect-always-yield.md
rules/fork-attached-vs-detached.md

各ルールファイルには、次の内容が含まれています。

  • 重要である理由の簡単な説明
  • 説明付きの誤ったコード例
  • 説明付きの正しいコード例
  • 追加のコンテキストと判断表

参考資料

優先度参考資料参照するタイミング
1references/effects-and-api.mdSaga の作成またはデバッグ全般
2references/fork-model.md並行処理、エラー伝播、キャンセル
3references/testing.mdSaga テストの作成またはレビュー
4references/channels.md外部 I/O、バッファリング、ワーカープール
5references/recipes.mdスロットリング、デバウンス、再試行、取り消し、バッチ処理、ポーリング
6references/anti-patterns.md避けるべきよくある間違い
7references/troubleshooting.mdフリーズしたアプリ、見逃されたアクション、スタックトレースのデバッグ

完全版ドキュメント

すべてのルールを展開した完全なガイド:AGENTS.md

コメント