mcpField
S
serverpod-scheduling

serverpod-scheduling

github.com/serverpod開発3.3k44 回インストール1 日前に更新
リポジトリ

serverpod-scheduling について

Serverpodで、データベースに保存する遅延呼び出しやUTC時刻指定の呼び出しを設定するスキルです。型安全なAPIの生成と、クラスターでの実行設定を扱います。

主な機能

  1. 01遅延呼び出しと時刻指定呼び出し
  2. 02再起動後も保持するデータベース保存
  3. 03クラスター全体での実行権取得
  4. 04型安全なAPI生成
  5. 05実行と並行数の設定

活用シーン

  1. 01処理の遅延実行
  2. 02UTC時刻での処理予約
  3. 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 ゲッターも生成されません。この値はすべての実行モード設定ファイルで一致している必要があります。一致しない場合、生成は失敗します。

将来の呼び出しは冪等にしてください。呼び出しは、再試行や再起動が発生しても、取り消せない副作用が重複しないようにする必要があります。

コメント