mcpField
R
riverpod-retry

riverpod-retry

github.com/serverpod開発1076 回インストール34 週間前に更新
リポジトリ

riverpod-retry について

riverpod-retryは、RiverpodのProvider再試行動作とカスタマイズ方法を説明します。開発者はProvider単位または全体にポリシーを設定し、特定のエラーで再試行を止められます。

主な機能

  1. 01デフォルトの指数バックオフ
  2. 02再試行関数のカスタマイズ
  3. 03Providerごとの設定
  4. 04全体への再試行設定
  5. 05nullで再試行を停止

活用シーン

  1. 01一時的な障害後にProviderを再試行
  2. 02Providerごとに異なるポリシーを設定
  3. 03ProviderScopeで共通ポリシーを適用
  4. 04特定のエラーで再試行を停止

インストール

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

$npx skills add https://github.com/serverpod/skills-registry --skill riverpod-retry

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

詳細

Riverpod — 自動リトライ

手順

Riverpod は、計算処理で例外がスローされるとプロバイダーをリトライします。リトライはプロバイダーごと、またはグローバルにカスタマイズできます。

デフォルトの動作

デフォルトでは、プロバイダーは指数バックオフ(例:200ms から 6.4s)を使用して、上限回数(例:10 回)までリトライされます。Error と ProviderException はリトライされません。Error はバグを示し、ProviderException は依存関係の失敗を意味するため、依存するプロバイダーはリトライされず、基となるプロバイダーがリトライされます。

カスタムリトライ関数

リトライ関数のシグネチャは Duration? Function(int retryCount, Object error) です。次のリトライまでの遅延として Duration を返すか、リトライを停止する場合は null を返します。

Duration? myRetry(int retryCount, Object error) {
  if (retryCount >= 5) return null;
  if (error is ProviderException) return null;
  return Duration(milliseconds: 200 * (1 << retryCount));
}
設定場所
  • プロバイダーごと: プロバイダーの定義時に retry: myRetry を渡します(コード生成を使用する場合は @Riverpod(retry: myRetry) を指定します)。
  • グローバル: ProviderScope または ProviderContainer に retry: myRetry を渡します。
// Global
ProviderScope(retry: myRetry, child: MyApp())

// Per provider (manual)
final myProvider = Provider<int>(retry: myRetry, (ref) => 0);
リトライの無効化

常に null を返します。

ProviderScope(retry: (retryCount, error) => null, child: MyApp())
リトライ付きの非同期プロバイダーを待機する

ref.watch(myProvider.future)(または同等の処理)は、すべてのリトライが終了するか、プロバイダーが成功するまで待機し続けます。そのため、await ref.watch(myProvider.future) は途中の失敗をスキップし、最終的にプロバイダーが成功するか、リトライを断念したときに完了します。

コメント