表示言語: 日本語 英語に切り替え

Cron 式解説ツール

cron 式を貼り付けて、平易な英語の説明を取得。standard 5 フィールドと 6 フィールド (秒付き) の cron 形式をサポート。

例 (クリックで試す)

  1. 上の入力欄に cron 式を入力または貼り付けます。
  2. 下に表示される平易な英語の説明を読みます。
  3. 例のチップをクリックすると入力欄に投入され、デコードされる様子が見られます。
  4. 赤で表示されるパースエラーを修正し、説明が意図と一致するまで繰り返します。
何ができるのか?

この解説ツールは standard Unix cron 式 (5 フィールド) または秒付きの Quartz スタイル式 (6 フィールド) を受け取り、"At 09:00 AM, Monday through Friday" のような人間向け説明を返します。一般的な演算子 — *、","、-、/ — と名前付きの月 (JAN-DEC)、名前付きの曜日 (SUN-SAT) をサポートします。結果はキー入力ごとに更新されるので、式を素早く反復できます。

一般的な業務時間のジョブ:

0 9 * * MON-FRI

デコード:

At 09:00 AM, Monday through Friday

秒付きのより具体的な 6 フィールド Quartz 式:

0 30 2 ? * MON

デコード (毎週月曜 02:30:00)。

Cron 形式

┌───────── 分 (0 - 59)
│ ┌─────── 時 (0 - 23)
│ │ ┌───── 日 (1 - 31)
│ │ │ ┌─── 月 (1 - 12、または JAN-DEC)
│ │ │ │ ┌─ 曜日 (0 - 6、または SUN-SAT; 0 と 7 は両方とも日曜)
│ │ │ │ │
* * * * *

なぜ cron "0 0 * * *" は現地時間でなく UTC の午前 0 時に発火するのか?

実際の cron バグのほとんどは、いくつかの繰り返される罠に陥ります:

  • タイムゾーンドリフト。 0 0 * * * はスケジューラのタイムゾーンの午前 0 時に発火します。Kubernetes CronJobs や GitHub Actions ではデフォルトが UTC — spec.timeZone を設定するか、自分で時刻を UTC に変換してください。
  • 5 フィールド vs 6 フィールドの不一致。 0 0 9 * * MON-FRI (6 フィールド) を 5 フィールドスケジューラに貼り付けると、先頭の 0 を分、0 を時として読むので、ジョブは 09:00 ではなく午前 0 時に発火します。
  • 日と曜日の併用。 0 0 15 * MON は 15 日と毎週月曜に実行されます — 15 日にあたる月曜だけではありません。これは Vixie-cron の OR セマンティクスです。
  • Step はデプロイ時にリセットされない。 */10 * * * * は時計の :00, :10, :20, :30, :40, :50 で発火します — 前回のデプロイから 10 分後ではありません。
  • standard cron で ? を使う。 ? プレースホルダは Quartz 拡張です。Unix cron はそれを拒否します — 代わりに * を使ってください。
  • 曜日 0 vs 7。 クラシック cron ではどちらも日曜を意味しますが、一部のパーサ (古い BSD) は 0 のみ受け付けます。ポータビリティが重要なら SUN を使ってください。

演算子

  • * — 任意の値
  • , — 値のリスト (例 MON,WED,FRI)
  • - — 範囲 (例 1-5)
  • / — ステップ値 (例 */15 = 15 ごと)
よくある質問

5 フィールドと 6 フィールドの cron の違いは何ですか?

Standard POSIX cron は 5 フィールドです: 分、時、日、月、曜日。6 フィールドの亜種は秒フィールドを先頭に追加し、Quartz、Spring @Scheduled、多くの Node cron ライブラリで使用されます。6 フィールド式 "0 0 9 * * MON-FRI" は平日の 9:00:00 に発火し、5 フィールド "0 9 * * MON-FRI" は 9:00 に発火します。

L、W、# のような Quartz 拡張をサポートしますか?

この解説ツールは一般的な Unix / Vixie cron 方言と、オプションの先頭秒フィールドをサポートします。Quartz 専用トークン (最後を表す L、平日を表す W、第 n 曜日を表す #、? プレースホルダ) は standard cron の一部ではなく、パースが保証されません。これらに依存するなら、式の検証にはスケジューラ固有のドキュメントを使ってください。

なぜ 0 0 * * * が私の予想と違う時刻に発火するのか?

Cron 式にはタイムゾーンがありません。ジョブはスケジューラを所有するマシンまたはコンテナのタイムゾーンの午前 0 時に実行されます。Kubernetes CronJobs、GitHub Actions、AWS EventBridge ではデフォルトが UTC です。ローカル午前 0 時にしたい場合は、スケジューラのタイムゾーンを明示的に設定してください (CronJob の spec.timeZone、TZ 環境変数、cron.yaml の timezone キー)。

日と曜日を組み合わせられますか?

Standard Vixie cron では、日と曜日の両方が制限されている場合、どちらかが一致するとジョブが発火します — AND ではなく OR です。したがって "0 0 15 * MON" は毎月 15 日と毎週月曜に実行されます。Quartz はこれを逆転させ、曖昧性を解消するため片方のフィールドを "?" にすることを要求します。

ステップ値はどう動きますか?

ステップは範囲/ステップの構文を使います。"*/15 * * * *" は :00 から 15 分ごとに発火します。分フィールド内の "10-50/20" は :10、:30、:50 に発火します。ステップは "今から N ごと" を意味しません — 境界は常に範囲の先頭に整列するので、ステップが現在時刻とともにドリフトすることを期待しないでください。

ここでテストした cron 式を保存しますか?

いいえ。入力された式の記録は一切保持しません。貼り付けや実験は、ページを閉じるか更新すると破棄されます — ログなし、扱っているスケジュールに関する分析もなし。追加の安心が欲しい場合は、ブラウザの developer tools を確認できます。