mcpField
C
cron-jobs

cron-jobs

github.com/rivet-dev開発441.2k 回インストール1 日前に更新
リポジトリ

cron-jobs について

cron-jobs は、RivetKit の永続的な Actor 単位のスケジュールと定期ジョブを扱うスキルです。スケジュールの選択、取消と更新、障害対応を説明し、全体またはエンティティ単位のタスク例を示します。

主な機能

  1. 01一度限りの遅延・時刻指定スケジュール
  2. 02カレンダー型・間隔型の Cron ジョブ
  3. 03永続的な Actor 単位のタイマー
  4. 04スケジュールの取消と更新
  5. 05障害対応と冪等性のガイダンス
  6. 06スケジュールのサンプル

活用シーン

  1. 01Actor の単発アクションの予約
  2. 02定期的なバックグラウンドジョブの実行
  3. 03ユーザー別リマインダーの作成
  4. 04全体向け定期タスクの管理

インストール

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

$npx skills add https://github.com/rivet-dev/skills --skill cron-jobs

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

同梱ファイル

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

BASE_SKILL.md
index.json
openapi.json
reference/actors/
access-control.md
actions.md
actor-runtime-socket.md
appearance.md
authentication.md
communicating-between-actors.md
connections.md
debugging.md
design-patterns.md
destroy.md
errors.md
events.md
fetch-and-websocket-handler.md
helper-types.md
http-api.md
input.md
inspector-tabs.md
keys.md
kv.md
lifecycle.md
limits.md
metadata.md
queues.md
reference/actors/quickstart/
backend.md
cloudflare.md
effect.md
next-js.md

詳細

Cron ジョブとスケジュールされたタスク

重要:作業を始める前に、このスキルのディレクトリにある BASE_SKILL.md を必ず読んでください。デバッグ、エラー処理、状態管理、デプロイ、プロジェクトのセットアップに関する重要なガイダンスが記載されています。これらのルールとパターンは、すべての RivetKit の作業に適用されます。以下の内容は、すでに読み、理解していることを前提としています。

動作するサンプル

参考実装が必要な場合は、以下のテンプレートにある、実際に動作するコードを読んでください。

Rivet Actor のスケジュールは、アクター内で永続化されるタイマーです。アクターがスリープ、再起動、アップグレード、デプロイ、クラッシュしても、別途 Cron サービスを用意せずに維持されます。

スケジュールの種類を選ぶ

API用途
c.schedule.after(delayMs, action, ...args)相対的な遅延時間の後に実行する、一度限りの処理です。
c.schedule.at(timestamp, action, ...args)Unix タイムスタンプ(ミリ秒)で指定した時刻に実行する、一度限りの処理です。
c.cron.set({ ... })IANA タイムゾーンで指定する、名前付きのカレンダー形式の繰り返し処理です。
c.cron.every({ ... })5 秒以上の間隔で実行する、名前付きの固定間隔の処理です。

すべてのコールバックは、同じアクター上の通常のアクションです。クライアントから任意のアクション名を受け取るのではなく、コード内でアクション名を固定してください。

API、履歴、キャンセル、失敗時の動作、制限の詳細については、スケジュールと Cron を参照してください。

カレンダー形式のジョブ

ワンショットアクションを手動で再登録するのではなく、cron.set を使用してください。

固定のバックグラウンドジョブは onCreate に登録し、アクターごとに一度だけセットアップが実行されるようにしてください。ジョブ名はアップサートキーとして機能するため、後から cron.set を呼び出すと、重複したジョブを作成するのではなく既存のジョブが更新されます。また、cron.set はタイムゾーンや夏時間への移行にも対応します。

固定間隔のジョブ

プレゼンスの定期確認やキャッシュの更新など、頻繁に行う処理には cron.every を使用してください。

await c.cron.every({
  name: "presence-sweep",
	interval: 15_000, // Minimum 5 seconds.
  action: "sweepPresence",
  maxHistory: 25,
});

間隔はアクションの実行時間によってずれるのではなく、スケジュールされた期限を基準に維持されます。前回の実行がまだ進行中の場合、重複する実行はスキップされます。

キャンセルと更新

キャンセルが必要になる可能性のあるワンショットスケジュールでは、返された ID を保持してください。

const id = await c.schedule.after(60_000, "expireSession", sessionId);
await c.schedule.cancel(id);

繰り返し実行するジョブは名前で管理します。

await c.cron.delete("presence-sweep");

同じ名前で再度 cron.set または cron.every を呼び出すと、設定が置き換えられます。

失敗と冪等性

重複した処理が問題となる場合は、スケジュールされたアクションを冪等にしてください。再試行の動作とワークフローに関するガイダンスについては、実行時の動作 を参照してください。

トポロジー

jobs["daily-report"] のようなシングルトンのアクターキーを使用すると、グローバルなジョブを1つだけ実行できます。リマインダー、トライアル、請求期間などのスケジュールをエンティティごとに分離する場合は、ユーザーまたはリソースごとにアクターを使用してください。

リファレンスマップ

アクター
CLI
クライアント
クックブック
デプロイ
全般
セルフホスティング

コメント