CRON 入門:スケジュール表記を人間の言葉で理解する
・対象: 初学者,Web エンジニア・タグ: tool:cron-jst, cron, linux, scheduling, automation
「毎朝 9 時にバッチを動かしたいけど、cron 構文が読めない...」「設定したのに動かない!タイムゾーンが違った!」――サーバー運用やバッチ設定を任されたとき、誰もが一度は悩む CRON の壁。
この記事では、CRON 構文の基本・JST/UTC の違い・よくあるつまずき・実例 10 選を 5 分で理解できるようまとめました。まずはツールで試してみましょう。
1. そもそも CRON とは?(いつ・どこで使われるか)
CRON(クーロン) は、Linux やクラウドサービスで「定期的にコマンドやスクリプトを自動実行」するための仕組みです。
例えば:
- 毎朝 9 時にレポートを自動生成
- 毎時 0 分にデータベースをバックアップ
- 平日 18 時に通知を送信
- 深夜 1 時にログをローテーション
どこで使われる?
- Linux/Unix の
crontab - GitHub Actions(
schedule) - GCP Cloud Scheduler
- AWS EventBridge
- Azure Logic Apps
構文は共通: 5 フィールド(または 6 フィールド)の記法が標準です。
2. 基本構文(5/6 フィールド解説)
CRON 式はスペース区切りの 5 つの数字で構成されます:
分 時 日 月 曜日
| フィールド | 範囲 | 例 |
|---|---|---|
| 分 | 0–59 | 0, 15, */5 |
| 時 | 0–23 | 9, 0, 9-18 |
| 日 | 1–31 | 1, 15, * |
| 月 | 1–12 | 1, 6, * |
| 曜日 | 0–6 (0=日曜) | 1, 1-5, * |
記法のルール
*: すべての値(例:* * * * *= 毎分)*/n: n 間隔(例:*/15= 15 分おき)a,b,c: 複数指定(例:1,15= 1 日と 15 日)a-b: 範囲指定(例:9-18= 9 時〜18 時)
6 フィールド形式(秒付き)
一部のツール(AWS EventBridge、一部のライブラリ)では、秒フィールドが先頭に追加されます:
秒 分 時 日 月 曜日
(例: 0 0 9 * * * = 毎朝 9 時 0 分 0 秒)
3. 代表的な実例 10 選
📌 毎日系
| CRON 式 | 実行タイミング |
|---|---|
0 0 * * * | 毎日 0 時(深夜) |
0 9 * * * | 毎日 9 時 |
30 18 * * * | 毎日 18 時 30 分 |
📌 平日系
| CRON 式 | 実行タイミング |
|---|---|
0 9 * * 1-5 | 平日(月〜金)9 時 |
*/5 9-18 * * 1-5 | 平日 9〜18 時の 5 分おき |
📌 特定日系
| CRON 式 | 実行タイミング |
|---|---|
0 0 1 * * | 毎月 1 日 0 時 |
0 9 1,15 * * | 毎月 1 日と 15 日の 9 時 |
0 0 * * 0 | 毎週日曜 0 時 |
📌 間隔系
| CRON 式 | 実行タイミング |
|---|---|
*/10 * * * * | 10 分おき(24 時間) |
0 * * * * | 毎時 0 分 |
4. JST と UTC の違い(タイムゾーンの落とし穴)
CRON が実行される時刻は、サーバーやサービスのタイムゾーン設定に依存します。
🌐 JST(日本標準時)と UTC の関係
- JST = UTC + 9 時間
- 日本の「朝 9 時」は UTC では「0 時」
例: 0 9 * * * と設定したとき
- サーバーが JST なら → 日本時間 9 時に実行
- サーバーが UTC なら → UTC 9 時(日本時間 18 時) に実行 ⚠️
❌ よくある失敗
「毎朝 9 時にレポート送信」のつもりで 0 9 * * * を設定したが、サーバーが UTC 設定だったため、実際には日本時間 18 時に実行されてしまった。
✅ 対策
- サーバーのタイムゾーンを確認:
date timedatectl # Linux - UTC → JST に換算:
- 日本時間 9 時 = UTC 0 時 →
0 0 * * *
- 日本時間 9 時 = UTC 0 時 →
- クラウドサービスの設定確認:
- GCP Cloud Scheduler → タイムゾーン選択可能
- AWS EventBridge → UTC 固定(式で調整)
- GitHub Actions → UTC 固定(式で調整)
🎯 サマータイム(DST)に注意
日本はサマータイムがないため、UTC との時差は常に+9 時間で一定です。ただし、海外環境では3 月・11 月に DST 切替が発生し、想定外のズレが起きるため注意が必要です。
5. よくあるつまずき(12/24 時制、*/15 の解釈、末日など)
❌ つまずき 1: 「24 時」表記
CRON 式に 24 は使えません。日付繰り上げの 0 を使います。
- ❌
0 24 * * * - ⭕
0 0 * * *(翌日 0 時)
❌ つまずき 2: */15 の勘違い
「15 分ごと」は分フィールドに */15 を入れるだけで OK。
- ⭕
*/15 * * * *→ 0,15,30,45 分に実行 - ❌
*/15 */1 * * *→ 不要(毎時実行される)
❌ つまずき 3: 月末の扱い
31 を指定すると、31 日がない月(2 月、4 月、6 月など)は実行されません。
- 月末に確実に実行したい → 月初(1 日) にする、または専用ロジックを組む
❌ つまずき 4: 曜日の「7」
一部の実装では 7 を日曜として許容しません。
- ⭕
0 0 * * 0(日曜 0 時) - ⚠️
0 0 * * 7(非推奨・環境依存)
❌ つまずき 5: 日と曜日の併用
日と曜日を両方指定すると「OR 条件」 になります。
0 9 1 * 1→ 毎月 1 日 9 時 または 毎週月曜 9 時
意図しない動作になりやすいため、どちらか一方を * にしましょう。
6. セキュリティ/運用
- タイムゾーンを明示し、運用環境間(JST/UTC)の差異を事前に確認する。
- 海外環境では DST 切替に注意(日本は非対応)。
7. 手を動かす:ツールで次回実行を確認
「これ、本当に合ってる?」と不安になったら、ツールで即座に確認しましょう。
📌 Cron JST Converter を使う
- CRON 式を入力(例:
0 9 * * 1-5) - タイムゾーンを選択(JST / UTC)
- 次回実行日時が即座に表示されます
試してみること:
0 9 * * *→ 毎日 9 時*/15 * * * *→ 15 分おき0 0 1 * *→ 毎月 1 日 0 時0 9 * * 1-5→ 平日 9 時
JST/UTC 切替で、タイムゾーンによる時刻の違いも確認できます。
8. 3 分クイズ
次の問いに答えてみましょう(答えは記事中にあります):
0 9 * * 1-5はいつ実行される?- JST(日本時間)の 9 時は、UTC では何時?
- 「24 時」を CRON 式で表すには?
*/15 * * * *は何分おきに実行される?- 日と曜日を両方指定するとどうなる?
答えを見る
- 平日(月〜金)の 9 時
- UTC 0 時
0 0 * * *(翌日 0 時)- 15 分おき(0,15,30,45 分)
- OR 条件になり、どちらかが一致すれば実行される
9. 関連リンク
CRON 構文は最初は難しく感じますが、基本パターン・タイムゾーン・よくあるつまずきを押さえれば、確実に設定できるようになります。
覚えておきたいポイント:
- 5 フィールド: 分・時・日・月・曜日
- JST = UTC + 9 時間(サマータイムなし)
*/n= n 間隔、a-b= 範囲、a,b,c= 複数- 24 時表記は使えない(0 時で指定)
- 日と曜日の併用は注意(OR 条件)
関連ツール:
- Cron JST Converter で次回実行を確認
参考リンク:
- crontab(5) — Linux man page
- crontab.guru — 構文チェックツール
- GCP Cloud Scheduler / AWS EventBridge / GitHub Actions のドキュメント
- プライバシーポリシー
- 利用規約
さあ、Cron JST Converter で実際の CRON 式を入力して、次回実行日時を確かめてみましょう!
関連ツール: /tools/cron-jst