Cron式の解説ツール
Cron式を分かりやすい言葉で読み、任意のタイムゾーンでの次回実行を確認し、標準形に整えます。
コード例
自分のプロジェクトにコピーして使えます。どの例も言語の標準ライブラリだけを使うので、インストールするものはありません。
const expand = (field, min, max) =>
field.split(',').flatMap((part) => {
const [range, step = '1'] = part.split('/')
const [from, to = from] = range === '*' ? [min, max] : range.split('-').map(Number)
return Array.from({ length: Math.floor((to - from) / Number(step)) + 1 }, (_, i) => from + i * Number(step))
})
function matches(expression, instant) {
const [minute, hour, dayOfMonth, month, dayOfWeek] = expression.split(' ')
const inMonth = expand(dayOfMonth, 1, 31).includes(instant.getUTCDate())
const inWeek = expand(dayOfWeek, 0, 7).some((day) => day % 7 === instant.getUTCDay())
const dayMatches =
!dayOfMonth.startsWith('*') && !dayOfWeek.startsWith('*') ? inMonth || inWeek : inMonth && inWeek
return (
expand(minute, 0, 59).includes(instant.getUTCMinutes()) &&
expand(hour, 0, 23).includes(instant.getUTCHours()) &&
expand(month, 1, 12).includes(instant.getUTCMonth() + 1) &&
dayMatches
)
}
console.log(matches('*/15 9-17 * * 1-5', new Date('2023-11-14T09:30:00Z')))概要
Cron式を分かりやすい言葉で読み、任意のタイムゾーンで次にいつ実行されるかを確認し、正規の形に整えます。標準の5フィールドの cron と、秒を含む Quartz または Spring の方言に対応しています。すべてブラウザ内で計算されます。
使い方
- 式を入力または貼り付けます。例:
*/15 9-17 * * MON-FRI。@dailyや@hourlyなどのショートカットにも対応しています。カーソルのあるフィールドが強調され、下で説明されます。 - 方言を選びます。**標準(5フィールド)**か、Quartz / Spring(秒から始まる6または7フィールド)です。
- スケジュールを読み取るタイムゾーンと、一覧表示する次回実行の数を選びます。
- 入力欄の上で式の意味を言葉で読み、その下で次回の実行時刻を確認します。すべてのcronが理解するわけではない書き方は、注意として表示されます。
- ランダムやスケジュールのチップから始めるか、複数行に切り替えて1行に1つずつ式を確認します。
例
@daily → 0 0 * * *
*/15 9-17 * * MON-FRI → 月曜日から金曜日の午前9:00から午後5:59まで、15分ごと
毎月第2月曜日の正午を表す Quartz 式です。
0 0 12 ? * MON#2
知っておくと便利なこと
- 5つのフィールドは、分、時、日、月、曜日です。
- 標準の cron では日曜日は0です。Quartz と Spring では1で、日と曜日のどちらかのフィールドに
?が必要です。 - cron は、それが動いているマシンやスケジューラーの時計で実行されます。そのタイムゾーンを選んでください。多くの場合は UTC です。
- Quartz の
L、W、#(月末日、直近の平日、第n曜日)に対応しています。 - 読み取れないフィールドは赤くなり、メッセージでそのフィールドが示されます。
- 日と曜日の両方を指定すると、両方が一致したときだけでなく、どちらか一方が一致したときにジョブが実行されます。
@rebootには一覧にできるスケジュールがなく、標準cronでの日曜日の7やQuartzの文字?、L、W、#は注意として表示されます。
Cron式とは?
Cron式は、ジョブをいつ実行するかを5つのフィールド(分、時、日、月、曜日)で表します。* はすべての値、*/15 は15ごと、1-5 は範囲、1,15 はリストです。QuartzとSpringは先頭に秒フィールドを加え、末尾に年を付けることもあり、L、W、# などの拡張も使えます。
よくある質問
実行時刻はどのタイムゾーン?
選択したものです。cronはそれが動くマシンやスケジューラーの時計で実行されるため、実際の時刻を見るにはそのタイムゾーン(多くはUTC)を選んでください。
標準とQuartzの違いは?
標準cronは5フィールドで日曜が0です。QuartzとSpringは6〜7フィールドで秒から始まり、日曜が1で、日または曜日のフィールドのどちらかに ? が必要です。
式はどこかに送信される?
いいえ。説明と実行時刻はブラウザ内で計算されます。入力した内容が当社のサーバーに送信されることはありません。