Cron 式パーサーは cron 式を受け取り、人間が読める説明・ASCII フィールド図・直近の次回実行時刻 5 件・直近の過去実行時刻 5 件を出力します。定期タスクをデプロイする前に式のロジックを確認したり、スケジュールが期待通りに動作しない問題をデバッグするのに役立ちます。
5 フィールド形式 vs. 6 フィールド形式
2 つの形式に対応しています:
- 5 フィールド(
分 時 日 月 曜日)— 標準的な Linux crontab 構文 - 6 フィールド以上(
秒 分 時 日 月 曜日)— 秒レベルの粒度を必要とする Spring・Quartz などのフレームワークで使用
フィールド数に基づいてどちらの形式かを自動検出します。
特殊文字 L・#・?
これらは基本演算子 *、,、-、/ を超えて、月ごとに繰り返すパターンを制御します:
L(Last) — 日フィールドでは月の最終日、曜日フィールドではその月のその曜日の最後の出現を意味します:
0 18 L * * # 毎月最終日の 18:00
30 10 * * 5L # 毎月最終金曜の 10:30
#(第 N 番目) — 曜日フィールドのみ、形式は 曜日#n。1 = 日曜、7 = 土曜:
0 10 ? * 2#3 # 毎月第 3 火曜の 10:00
0 9 ? * 1#1 # 毎月第 1 日曜の 09:00
? — 日または曜日フィールドで「未指定」を意味し、もう一方のフィールドが設定されている場合の曖昧さを避けます:
30 9 ? * MON-FRI # 平日の 09:30(日フィールドは未指定)
0 12 15 * ? # 毎月 15 日の 12:00(曜日フィールドは未指定)
日と曜日の両方が指定された場合
デフォルトでは、日付フィールドと曜日フィールドの両方が設定されている場合(どちらも ? や * でない場合)、エンジンは OR として扱います — どちらかの条件が満たされるとジョブが実行されます。これは多くの Linux crontab 実装と一致しています。異なるスケジューラーをターゲットにしている場合は、そのデプロイ環境での実際の動作を確認してください。
よく使う式の例
*/5 * * * * # 5 分ごと
0 9 * * 1 # 毎週月曜 09:00
0 0 1 * * # 毎月 1 日の深夜 0:00
0 18 L * ? # 毎月最終日の 18:00
0 10 ? * 2#3 # 毎月第 3 火曜の 10:00
15,45 13 ? 6 Tue # 6 月の毎週火曜、13:15 と 13:45
0-5 13 * * ? # 毎日 13:00〜13:05 の毎分
タイムゾーンと H 文字
タイムゾーンフィールドは America/New_York や Asia/Tokyo のような IANA 名を受け付けます。パーサーは夏時間(DST)の切り替えを処理するので、表示される時刻はそのゾーンのローカル時計を反映します。
H は Jenkins などの一部の CI スケジューリングシステムで使われるランダムだが安定したプレースホルダーです。ハッシュシードなしでは解決される値が環境によって異なり、2 つのマシンが同じ時刻に実行されない可能性があります。一貫したタイミングが必要な本番環境では明示的な値を使用してください。