Cron式の基本構造:5つのフィールド

Cron式(cron expression)とは、コマンドを定期実行する時刻をスペース区切りの数値で表す記法です。POSIXおよびVixie cron系の標準では、以下の5フィールドで構成されます。

0-59 0-23 1-31 1-12 曜日 0-7 例: 30 9 * * 1 → 毎週月曜 9:30 に実行 0と7は両方日曜
図1: 標準cronの5フィールド構成と値の範囲

各フィールドには単一の値のほか、リスト(1,15)、範囲(1-5)、ステップ(*/10)、そしてすべてを表すワイルドカード(*)を指定できます。曜日は0と7がどちらも日曜を指す点が最初の注意点です。

よく使うパターン例

*/5 * * * *     5分ごと
0 9 * * 1-5     平日の毎朝9時
0 0 1 * *       毎月1日の0時
0 3 * * 0       毎週日曜の午前3時
15 14 1 * *     毎月1日の14:15

特殊文字と拡張構文

標準cronで使えるのは * , - / の4種ですが、Quartzスケジューラなど一部の実装は追加の特殊文字を提供します。これらは標準cronでは使えないため、方言の混同に注意が必要です。

主な特殊文字とその意味(対応は実装依存)
文字意味主な対応実装
*すべての値* * * * *全実装
/ステップ(間隔)*/15全実装
L最終日/最終曜日6L(最終金曜)Quartz
W直近の平日15WQuartz
#第N曜日6#3(第3金曜)Quartz
?指定なし日か曜日の一方にQuartz

また多くのVixie cron/cronie系実装は、@reboot @daily @hourly @weekly @monthly @yearly といったマクロをサポートします。ただし後述するGitHub ActionsやKubernetes CronJobではこれらは使えず、5フィールドで書き直す必要があります。

実装ごとの方言:標準cron・Quartz・systemd・CI

「cron式」と一口に言っても、プラットフォームごとにフィールド数や解釈が異なります。移行時にそのまま貼り付けると意図しない動作になるため、差異を把握しておきましょう。

主要スケジューラの仕様比較(2026年時点)
項目標準cronQuartzsystemd timerGitHub Actions
フィールド数56〜7OnCalendar式5
秒フィールドなしありありなし
L / W / #非対応対応非対応非対応
@daily等マクロ対応非対応省略形あり非対応
最短間隔1分1秒1秒級実質5分
タイムゾーンシステムTZ設定可設定可UTC基準

systemd timerはcron構文とは別物で、OnCalendar=Thu,Fri *-*-1,5 11:12:13 のように日付と時刻を1式に統合します。daily weekly hourly などの省略形も用意されています。書式が根本的に異なるため、crontabからの機械的な移行はできません。

2026年のトレンドとハマりどころ

GitHub Actionsのスケジュール実行は長らくUTC固定で、夏時間(DST)を跨ぐジョブでは実行時刻がずれる課題がありました。2026年時点ではタイムゾーン指定の改善が進んでいると報告されていますが、環境やドキュメントのバージョンによって挙動が異なるため、公式ドキュメントで最新仕様を確認することを推奨します。

もう一つの実務的な注意点として、GitHub Actionsのcronは5分未満の間隔を書いてもエラーにならず黙って無視されるサイレント失敗が起こります。また高負荷時には実行が5〜30分程度遅延しうるため、厳密な時刻精度が必要な用途には向きません。

Cron式は手書きするとフィールドの順序ミスや曜日の0/7混同が起きやすいため、Cron式ジェネレーターのようなツールでGUIから生成し、次回実行時刻をプレビューで確認する運用が安全です。定期実行のログ時刻を扱う際はUnixタイムスタンプ変換、実行間隔の日付計算には日付計算も併用すると便利です。