cron-and-intervals について
cronスケジュールで動作するVal TownのインターバルValを作成、管理するスキルです。定期処理やUTCでの時刻設定、ハンドラーの手動テストを支援します。
主な機能
- 01cron式で定期処理を定義
- 02前回成功時のタイムスタンプを利用
- 03スケジュールの確認、変更、一時停止、再開
- 04検証用にハンドラーを手動実行
活用シーン
- 01外部APIを定期的にポーリング
- 02リマインダー送信やレポート生成
- 03前回実行以降の追加項目だけを処理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ val-town/ plugins --skill cron-and-intervalsインストール後、Claude Code で/cron-and-intervalsを入力して読み込まれたか確認します。
詳細
Cron / Interval Vals
インターバル vals(fileType: "interval")は、cron 式で定義されたスケジュールに従って定期的に実行されます。外部 API のポーリング、リマインダーの送信、クリーンアップの実行、レポートの生成など、リクエストへの応答ではなく、決まった時間に実行する必要がある処理に使用します。
基本的なハンドラー
// Learn more: https://docs.val.town/vals/cron/
export default async function (interval: Interval) {
// interval.lastRunAt: Date | undefined
console.log(interval);
}
ファイルには export が必要です。ハンドラーには export default を使用してください。
タイムゾーン
cron 式は UTC で実行されます。 「東部時間の午前 9 時」など、人が読み取れるスケジュールは、cron 式を記述する前に UTC に変換してください。夏時間は考慮されないため、年間を通じておおむね適切な UTC 時刻を選んでください。
lastRunAt パターン
interval.lastRunAt は、前回の正常な実行時刻を表すタイムスタンプです(初回実行時は undefined)。すべてを再スキャンするのではなく、前回の実行以降に作成された項目のみを取得するために使用します。
export default async function (interval: Interval) {
const since = interval.lastRunAt ?? new Date(Date.now() - 24 * 60 * 60 * 1000);
const newItems = await fetchItemsSince(since);
for (const item of newItems) {
await handle(item);
}
}
これにより、実行漏れがあっても val の冪等性が保たれ、処理の重複を避けられます。
スケジュールの読み取りと更新
read_interval_settings— インターバルファイルの現在の cron 式と有効状態を取得します。write_interval_settings— cron 式を変更するか、インターバルを一時停止/再開します。
テンプレートを使わない場合
単純なスケジュールジョブでは、テンプレートを使わず、interval タイプのファイルを 1 つだけ含む新しい val を作成してください。テンプレートは、より複雑な構成(ダッシュボード、AI エージェント、Webhook と UI の組み合わせなど)に使用します。
変更の確認
インターバル val を編集した後は、次回のスケジュール実行を待つのではなく、run_file を使ってハンドラーを手動で実行してください。