serverpod-scheduling について
Serverpodで、データベースに保存する遅延呼び出しやUTC時刻指定の呼び出しを設定するスキルです。型安全なAPIの生成と、クラスターでの実行設定を扱います。
主な機能
- 01遅延呼び出しと時刻指定呼び出し
- 02再起動後も保持するデータベース保存
- 03クラスター全体での実行権取得
- 04型安全なAPI生成
- 05実行と並行数の設定
活用シーン
- 01処理の遅延実行
- 02UTC時刻での処理予約
- 03再起動後も予約処理を保持
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ serverpod/ serverpod --skill serverpod-schedulingインストール後、Claude Code で/serverpod-schedulingを入力して読み込まれたか確認します。
詳細
Serverpod スケジューリング(将来の呼び出し)
将来の呼び出しは指定した時刻に実行され、データベースに保存されるため、再起動後も残ります。各呼び出しは、クラスター全体で1回だけ実行されるように取得されます。将来の呼び出しにはデータベースのサポートが必要です。実行を開始するのはモノリス/メンテナンスロールであり、サーバーレスロールではありません。
将来の呼び出しの定義
class ExampleFutureCall extends FutureCall {
Future<void> doWork(Session session) async {
// Work here.
}
Future<void> doOtherWork(Session session, MyModel data) async {
// Work with data.
}
}
型安全な pod.futureCalls API を利用するには、serverpod generate を実行してください。
サポートされているパラメーター型
エンドポイントメソッドと同じ型を使用できます。Serverpod エンドポイントに記載されています。
スケジューリング
// Delay
await pod.futureCalls
.callWithDelay(const Duration(hours: 1))
.example.doWork();
// At specific time (UTC)
await pod.futureCalls
.callAtTime(DateTime.utc(2026, 1, 1))
.example.doOtherWork(myModel);
// With identifier (for cancellation)
await pod.futureCalls
.callWithDelay(const Duration(hours: 1), identifier: 'my-job-id')
.example.doWork();
// Recurring task from `Duration` interval with an optional start time
await pod.futureCalls
.callRecurring()
.every(const Duration(hours: 1), start: DateTime.now())
.example.doWork();
// Recurring task from `cron` expression
await pod.futureCalls
.callRecurring()
.cron("0 * * * *")
.example.doWork();
await pod.futureCalls.cancel('my-job-id'); // Cancels all with that identifier
処理が最終的に成功する必要がある場合は、呼び出し内でエラーを処理し、再スケジュールしてください。
設定
futureCall:
enabled: true # SERVERPOD_FUTURE_CALL_ENABLED (default true)
executionEnabled: true # SERVERPOD_FUTURE_CALL_EXECUTION_ENABLED
concurrencyLimit: 5 # SERVERPOD_FUTURE_CALL_CONCURRENCY_LIMIT (default 1, <1 maps to unlimited and is not recommended)
scanInterval: 2000 # SERVERPOD_FUTURE_CALL_SCAN_INTERVAL (ms, default 5000)
futureCallExecutionEnabled: false は実行を停止するだけで、呼び出しのスケジュールは引き続き可能です。futureCall.enabled: false は将来の呼び出しを完全に無効にします。将来の呼び出しマネージャーは作成されず、serverpod generate によって pod.futureCalls ゲッターも生成されません。この値はすべての実行モード設定ファイルで一致している必要があります。一致しない場合、生成は失敗します。
将来の呼び出しは冪等にしてください。呼び出しは、再試行や再起動が発生しても、取り消せない副作用が重複しないようにする必要があります。