cron-jobs について
cron-jobs は、RivetKit の永続的な Actor 単位のスケジュールと定期ジョブを扱うスキルです。スケジュールの選択、取消と更新、障害対応を説明し、全体またはエンティティ単位のタスク例を示します。
主な機能
- 01一度限りの遅延・時刻指定スケジュール
- 02カレンダー型・間隔型の Cron ジョブ
- 03永続的な Actor 単位のタイマー
- 04スケジュールの取消と更新
- 05障害対応と冪等性のガイダンス
- 06スケジュールのサンプル
活用シーン
- 01Actor の単発アクションの予約
- 02定期的なバックグラウンドジョブの実行
- 03ユーザー別リマインダーの作成
- 04全体向け定期タスクの管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ rivet-dev/ skills --skill cron-jobsインストール後、Claude Code で/cron-jobsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
BASE_SKILL.mdindex.jsonopenapi.jsonreference/actors/access-control.mdactions.mdactor-runtime-socket.mdappearance.mdauthentication.mdcommunicating-between-actors.mdconnections.mddebugging.mddesign-patterns.mddestroy.mderrors.mdevents.mdfetch-and-websocket-handler.mdhelper-types.mdhttp-api.mdinput.mdinspector-tabs.mdkeys.mdkv.mdlifecycle.mdlimits.mdmetadata.mdqueues.mdreference/actors/quickstart/backend.mdcloudflare.mdeffect.mdnext-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つだけ実行できます。リマインダー、トライアル、請求期間などのスケジュールをエンティティごとに分離する場合は、ユーザーまたはリソースごとにアクターを使用してください。
リファレンスマップ
アクター
- アクセス制御
- アクション
- アクターキー
- アクターランタイムソケット
- アクターのステータス
- 認証
- Cloudflare Workers クイックスタート
- アクター間の通信
- 接続
- カスタムインスペクタータブ
- デバッグ
- 設計パターン
- アクターの破棄
- Effect.ts クイックスタート(ベータ)
- エラー
- Fetch および WebSocket ハンドラー
- ヘルパー型
- アイコンと名前
- インメモリ状態
- 入力パラメーター
- ライフサイクル
- 制限
- 低レベル HTTP リクエストハンドラー
- 低レベル KV ストレージ
- 低レベル WebSocket ハンドラー
- メタデータ
- Next.js クイックスタート
- Node.js と Bun のクイックスタート
- キューと実行ループ
- React クイックスタート
- リアルタイム
- Rust クイックスタート(ベータ)
- スケーリングと並行処理
- スケジュールと Cron
- 状態の共有と参加
- SQLite
- SQLite と Drizzle
- Supabase Functions クイックスタート
- テスト
- トラブルシューティング
- 型
- 標準 HTTP API
- バージョンとアップグレード
- ワークフロー
CLI
クライアント
クックブック
- AI エージェント
- チャットルーム
- 共同編集テキストエディター
- Cron ジョブとスケジュールタスク
- テナントごとのデータベース
- VPC またはエアギャップネットワークへの Rivet のデプロイ
- ライブカーソルとプレゼンス
- マルチプレイヤーゲーム
デプロイ
- コンテナランナー
- Amazon Web Services Lambda へのデプロイ
- AWS ECS へのデプロイ
- Cloudflare Workers へのデプロイ
- Freestyle へのデプロイ
- Google Cloud Run へのデプロイ
- Hetzner へのデプロイ
- Kubernetes へのデプロイ
- Railway へのデプロイ
- Rivet Compute へのデプロイ
- Supabase Functions へのデプロイ
- Vercel へのデプロイ
- VM およびベアメタルへのデプロイ
全般
- アクター設定
- クロスオリジンリソース共有
- LLM および AI 向けドキュメント
- エッジネットワーキング
- エンドポイント
- 環境変数
- HTTP サーバー
- ロギング
- プール設定
- 本番環境チェックリスト
- レジストリ設定
- ランタイムモード
- WASM とネイティブ SDK の比較