Cron 式ビルダー
変換cron 式を組み立て・検証・解説し、次回トリガー時刻(UTC)を計算します。
- 次回実行 (UTC)
- —
- コピー
- —
このページの内容
cron 式とは?#
cron 式は、5 つのスペース区切りフィールドで書かれたコンパクトなスケジュール表記です。分 時 日 月 曜日 という順になります。0 9 * * 1-5 という行は、左から右に「分 0、時 9、毎日、毎月、曜日 1〜5(月〜金)」と読みます。つまり平日 09:00 です。各 * は「このフィールドのすべての値」を意味するため、固定するフィールドが多いほどスケジュールは細かくなり、* のまま残すほど頻繁に発火します。
cron は Linux の crontab、GitHub Actions、Kubernetes の CronJob、ほとんどの CI システム、そして無数のタスクスケジューラで使われるネイティブなスケジュール言語です。正しく書くのは半分で、残りの半分は**「日」と「曜日」の特殊な挙動**(下記 FAQ を参照)で、これはベテランエンジニアでもつまずきます。本ページは入力に従って 5 つのフィールドを解析し、構文エラーや範囲エラーのあるフィールドを正確に指摘し、次回実行を計算するため、スケジュールが本当に意図した通りに発火するか確認できます。
使い方#
- 上部の式欄を編集します。初期値は
* * * * *(毎分)です。 - その下に 5 つのドロップダウン(分、時、日、月、曜日に 1 つずつ)があります。各フィールドのよく使う断片(
*、*/5、0、1-5、0,6など)を選べます。選ぶと式の対応する位置に挿入されるため、*/15が分の欄かどうか迷ったときに便利です。 - プリセットの行で、毎分・毎時・毎日・毎週・毎月・毎年・平日の完成したスケジュールをワンクリックで入力できます。
- 出力パネルには次回実行(現在時刻以降で最初に一致する瞬間)と、有効な解析を確認するか問題のフィールド名を示すステータス行が表示されます。now() を押すと現在時刻で再計算できます。
主な機能#
- 完全な 5 フィールド文法。
*、カンマリスト(0,15,30,45)、範囲(1-5)、ステップ(*/15、9-17/2)、月・曜日名(JAN-DEC、SUN-SAT、大文字小文字を区別しない)に対応します。日曜日に7も受け付け、0に正規化します。 - 正しい「日/曜日」ロジック。 標準的な Vixie-cron のルールを実装しています。両方のフィールドが制限されているときはどちらかが一致すれば発火(論理 OR)、片方だけが制限されているときは両方の一致が必要(AND)。この点を間違える計算機は少なくありません。
- フィールド単位のエラー。 範囲外の値や不正な文字は、汎用的な「式が無効」ではなく、問題のフィールド(
分、時…)とともに報告されます。 - UTC ベースの次回実行。 次のトリガーは瞬間の UTC 成分で計算されるため、ページをどこで開いても結果が確定的です。その上でコピーできる通常の日付として表示されます。
- 到達不能検出。 今後絶対に一致しない式(例えばどの月にも存在しない「日」)は、無限ループではなく検出されます。
実例#
平日の朝会として 0 9 * * 1-5 と入力します。フィールドごとに見ると、分 0、時 9、日 *、月 *、曜日 1-5 です。日付フィールド(*)と曜日フィールド(1-5)の両方が制限されているように見えますが、実は制限されているのは曜日だけで、日付はワイルドカードです。したがって AND のパスが適用され、月曜から金曜の 09:00 に発火します。次回実行は、次に来る平日 09:00 UTC の瞬間を示します。
次に 0 0 1 * 1(「分 0、時 0、毎月 1 日、毎月、月曜」)と比べてみてください。ここでは「日」(1)と「曜日」(1)の両方が制限されているため、cron は OR のパスをとります。ジョブは毎月 1 日と毎週月曜に発火します。「月曜かつ 1 日の日のみ」という、ほぼ誰もが勘違いする読み方ではありません。次回実行パネルがこの違いを可視化します。その月曜が 1 日でなくても、最も近い月曜に切り替わる様子が見えます。
よくある質問#
ジョブが想定外の日に発火するのはなぜですか?#
ほぼ常に「日」と「曜日」の相互作用が原因です。標準 cron は両方が固定されているとき OR 扱いします。0 0 1 * 1 は「1 日、または任意の月曜」であり、「1 日かつ月曜の日のみ」ではありません。1 日が月曜である場合にのみ実行させたい場合、cron 自体では表現できません。1 日をスケジュールし、スクリプト内部で曜日チェックを追加してください。
*/5 や 9-17/2 はどういう意味ですか?#
分フィールドの */5 は「0 から始めて 5 つおき」を意味し、0, 5, 10, 15, …, 55 になります。9-17/2 は「9 から 17 の範囲で 2 つおき」を意味し、9, 11, 13, 15, 17 になります。「就業時間中に 2 時間おき」に便利です。/ のあとのステップ除数は、先行する範囲やワイルドカードに対して適用されます。
日曜日は 0 と 7 のどちらですか?#
両方です。曜日フィールドは日曜に 0 と 7 を受け付けます(cron は歴史的に 0 を使っていましたが、後に 7 を追加したシステムもあります)。本ツールはどちらも受け付け、7 を 0 に正規化します。名前でも指定できます。SUN、Mon、fri はすべて大文字小文字を区別しません。
式は解析できるのに次回実行が遠いです。間違っていますか?#
おそらく違います。多くの場合、スケジュールが本当にすぐには発火できないことを意味します。0 0 29 2 *(2 月 29 日)は有効ですが閏年にしか一致しないため、次回実行まで何年もかかることがあります。本ツールは検索を約 8 年で打ち切ります。その範囲内で一致しない式は、ページをハングアップさせるのではなく到達不能として報告されます。