Cron式ジェネレーター
Cronスケジュール式のビジュアル生成・解析ツール
Cron式とは?
Cron 式は、定期実行されるタスクのスケジュールを文字列で表す形式です。利用するスケジューラーによって、分、時、日、月、曜日に加えて、秒や年を含む 5、6、7 フィールド構成があります。アスタリスク、カンマ、範囲、ステップ、疑問符、特殊なプレースホルダーを使うことで、「5 分ごと」「平日 9 時」「月末」などのルールを表せます。このツールは Cron 式を読み、検証し、次回実行時刻を確認するために役立ちます。ただし Linux cron、Quartz、クラウドスケジューラー、各種フレームワークでは、フィールド数、タイムゾーン、対応記法が異なる点に注意が必要です。
使い方
使い方
- 生成モードまたは解析モードを選択
- ドロップダウンで時間フィールド(秒・分・時・日・月・曜日)を設定
- プリセットをクリックしてよく使う式を素早く入力
- 生成モードでは式と次の 5 回の実行時刻が表示されます
- 解析モードでは既存の式を検証し、実行時刻を表示します
構文記号
- * — すべての値
- 「,」 — 複数の値を列挙(例:1,3,5)
- - — 範囲指定(例:1-5)
- / — ステップ間隔(例:*/5 は 5 ごとなので)
- ? — 値を指定しない(日または曜日で使用)
- L — 月または週の最終日
- W — 最も近い平日
- # — 第 N 曜日(例:2#3 = 第 3 火曜)
開発時の注意
- 結果は目安として扱い、実際のコード・ビルド・API の環境で必ずテストしてください。
- バージョン、方言、環境変数、プロジェクトの規約を考慮してください。
重要な注意点
- 日と曜日のフィールドに同時に値を設定することはできず、片方には ? を使う必要があります
- 各フィールドには有効な範囲があります:分 0〜59、時 0〜23
- フィールドの順序は固定です:秒 分 時 日 月 曜日 年
- 曜日は大文字小文字を区別せず、MON と mon は同じです
利用シーン
仕組み
Cron 式は、ゼロ以上の時間マッチング制約を固定順序のフィールドにエンコードする形式です。古典的な Vixie/BSD cron(Linux crond で使用)は 5 フィールドを使用します:分(0〜59)、時(0〜23)、日(1〜31)、月(1〜12 または JAN-DEC)、曜日(0〜6 または SUN-SAT、慣例として日曜 = 0)。Spring や Egistix ライブラリで普及した Quartz スケジューラーは先頭に秒フィールドを追加した 6 フィールド構成、末尾に年フィールドを加えた 7 フィールド構成をサポートします。各フィールドにはリテラル値、リスト(1,3,5)、範囲(1-5)、ステップ(0/15 は 0 から 15 刻みを意味)、ワイルドカード *(すべての値にマッチ)が使用できます。疑問符 ? は Quartz 独用の「特定の値なし」を示すセンチネルで、日または曜日のいずれか一方に制約がある場合、もう一方に必ず配置する必要があります。 次回の N 回の実行時刻の計算には貪欲前進探索アルゴリズムを使用します:基準時点(通常は現在)から開始し、制約にマッチしない最下位フィールドをインクリメントし、すべての下位フィールドを最小値にリセットし、フィールドがオーバーフローした場合(例:分が 59 を超過、時が 23 を超過)に上位フィールドへカスケードさせます。これは Donovan/Spoonhour 反復法として知られ、O(K x F)(K は候補数、通常 5、F はフィールド数)で実行されます。曜日名(MON、FRI など)は小文字に変換されてマッチングされ、月名の略称も受け付けられます。Quartz の特殊文字 L は月内の最終出現曜日を解決します(例:0 0 0 ? * 5L は最終金曜日)。月の最終日から遡って要求された曜日を計算します。W 文字は指定された日付に最も近い平日(月〜金)を見つけ、必要に応じて前後の月にまたがります。 タイムゾーンの処理は最もよくある設定ミスです:式自体にタイムゾーンメタデータが含まれないため、同じ 0 0 9 * * ? でも America/New_York、Asia/Tokyo、UTC のサーバーでは異なる UTC オフセットで発火します。@daily(0 0 0 * * ?)、@hourly(0 0 * * * ?)、@reboot(デーモン起動時に 1 回実行、時間式ではない)、@weekly(0 0 0 ? * 1)などの省略記法は、解析前に等価な 6 フィールド形式に展開されます。よくある落とし穴として、日 + 曜日の結合があります:古典的 cron ではいずれかがマッチした場合にジョブが実行されます(OR 論理)が、一部の新しい方言では AND 論理に切り替わります。式 0 0 0 15 * 5 は Vixie cron では「15日の深夜0時 AND すべての金曜日」を意味し、多くの初心者が想定する「15日 OR 金曜日の深夜0時」ではありません。Y2038 問題は cron に直接影響しません(time_t を使用)が、32 ビット Unix crond を実行する組み込みデバイスでは 2038-01-19T03:14:07Z に time_t 符号付き 32 ビット整数がオーバーフローします。
- 古典的 5 フィールド:分 時 日 月 曜日。Quartz は秒(6 フィールド)とオプションで年(7 フィールド)を追加。
- ? は日/曜日のいずれか一方に値がある場合、もう一方に配置する必要がある。* はそのフィールドのすべての値にマッチ。
- 日 + 曜日は Vixie cron では OR、一部の新しいスケジューラーでは AND。デプロイ前に確認すること。
- L は月の最終曜日に解決:例 0 0 0 ? * 5L = 最終金曜日。月の日数から計算される。
- W は指定日付に最も近い平日(月〜金)を見つける。前後の月にまたがる場合がある。
- Cron 式にはタイムゾーンメタデータが含まれない。同じ式でもサーバーローカル時刻、UTC、名前付きゾーンで異なる時刻に発火する。
- Y2038:32 ビット time_t は 2038-01-19 03:14:07 UTC でオーバーフロー。レガシー組み込みシステムの crond に影響。
- 省略記法 @hourly/@daily/@midnight/@weekly/@monthly/@yearly/@reboot は等価な 5 フィールドまたは 6 フィールド式に展開される。
- ステップ / 演算子は最左の値からカウント:hour フィールドの 2/3 は 2, 5, 8, 11, 14, 17, 20, 23 に発火。
- 5 回の反復貪欲前進探索(O(KxF))で基準時点から次回 N 回の実行時刻を計算。
使用例
毎日午前0時(日次バックアップ)
式 : 0 0 * * *
意味 : 毎日 00:00 に実行
次回実行 : 2026-06-11 00:00, 2026-06-12 00:00, 2026-06-13 00:00
用途 : データベースバックアップ、日次レポート生成15分ごと(ヘルスチェック)
式 : */15 * * * *
意味 : 毎時 0, 15, 30, 45 分に実行
次回実行 : 14:00, 14:15, 14:30, 14:45, 15:00
用途 : API ヘルスチェック、キューポーリング、同期ジョブ平日午前9時(業務時間中の通知)
式 : 0 9 * * 1-5
意味 : 月曜から金曜の 09:00
次回実行 : 月 09:00, 火 09:00, 水 09:00, 木 09:00, 金 09:00
用途 : 朝会リマインダー、Slack デイリーダイジェスト毎月1日 03:30(月次請求)
式 : 30 3 1 * *
意味 : 毎月 1 日の 03:30
次回実行 : 7月1日 03:30, 8月1日 03:30, 9月1日 03:30
用途 : 月次請求処理、ログローテーション、アーカイブ毎週日曜 午前0時(週次クリーンアップ)
式 : 0 0 * * 0
意味 : 毎週日曜の 00:00(Linux cron では 0 = 日曜)
次回実行 : 日 00:00, 日 00:00, 日 00:00
用途 : 週次レポートメール、キャッシュ削除、再学習Quartz 秒指定 - 30秒ごと
式 : */30 * * * * ?
意味 : 30 秒ごと(Quartz の 6 フィールド構文)
次回実行 : 14:00:00, 14:00:30, 14:01:00, 14:01:30
備考 : day-of-month が * のため day-of-week は ? を使用。この構文には Linux cron ではなく Quartz を使用してください。よくある質問
どのcron形式に対応していますか?
標準の5フィールドcron(分、時、日、月、曜日)、6フィールド(秒付き、Quartz、Spring、多くのクラウドスケジューラで使用)、オプションの年付き7フィールドに対応しています。ページでは形式を選択でき、式を構築する際に各フィールドの説明が表示されます。
なぜdayOfMonthとdayOfWeekの両方がフィールドにあるのですか?
標準のcronではこれらをORとして扱います。「月の最初の日 OR 毎週月曜日」はどちらかの条件を満たすと実行されます。AND条件にするには、通常非標準の?構文(Quartz)や回避策が必要です。ページでは次回の実行時刻を表示するので、意図を視覚的に確認できます。
スケジュールは実際に私のシステムで実行されますか?
いいえ。このページは式を生成・検証するだけで、ジョブ自体はあなたのスケジューラ(Linuxのcron、GitHub Actions、Kubernetes CronJob、AWS EventBridge、Quartzなど)で実行されます。スケジューラごとにcron方言が微妙に異なるため、ターゲットに合った形式を選んでください。
スケジュールはどのタイムゾーンを使用しますか?
標準のUnix cronはシステムのローカルタイムゾーンを使用します。クラウドスケジューラはまちまちです。AWS EventBridgeはデフォルトでUTC、GitHub ActionsもデフォルトでUTC、Kubernetes CronJobはAPIサーバーのタイムゾーンを使用します。スケジューラのドキュメントを読み、サマータイムの切り替えで予期せぬ時刻にジョブが実行される可能性があることを忘れないでください。
「30分ごと」はどう表現しますか?
*/30 * * * *(分=0,30、毎時、毎日、毎月、毎曜日)。「営業時間内のみ15分ごと」は、*/15 9-17 * * 1-5(さらに月曜から金曜の9~17時に制限)です。ページでは次回5~10件の実行時刻を表示して確認できます。
実本番のスケジュールに使っても安全ですか?
ページは式を生成するだけで、ジョブの実行はスケジューラの仕事です。まずサンプル実行で式をテストし(ほとんどのスケジューラには「手動実行」オプションがあります)、多くのシステムでジョブが衝突してスパイクが発生する深夜(00:00)にジョブをスケジュールすることは避けてください。
何かアップロードされますか?
いいえ。式の解析と次回実行時刻の計算は、JavaScriptのcronライブラリを使ってブラウザ内で行われます。