本文へスキップ

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–590, 15, */5
0–239, 0, 9-18
1–311, 15, *
1–121, 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 時に実行されてしまった

✅ 対策

  1. サーバーのタイムゾーンを確認:
          date
    timedatectl  # Linux
    
        
  2. UTC → JST に換算:
    • 日本時間 9 時 = UTC 0 時 → 0 0 * * *
  3. クラウドサービスの設定確認:
    • 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 を使う

  1. CRON 式を入力(例: 0 9 * * 1-5
  2. タイムゾーンを選択(JST / UTC)
  3. 次回実行日時が即座に表示されます

試してみること:

  • 0 9 * * * → 毎日 9 時
  • */15 * * * * → 15 分おき
  • 0 0 1 * * → 毎月 1 日 0 時
  • 0 9 * * 1-5 → 平日 9 時

JST/UTC 切替で、タイムゾーンによる時刻の違いも確認できます。


8. 3 分クイズ

次の問いに答えてみましょう(答えは記事中にあります):

  1. 0 9 * * 1-5 はいつ実行される?
  2. JST(日本時間)の 9 時は、UTC では何時?
  3. 「24 時」を CRON 式で表すには?
  4. */15 * * * * は何分おきに実行される?
  5. 日と曜日を両方指定するとどうなる?
答えを見る
  1. 平日(月〜金)の 9 時
  2. UTC 0 時
  3. 0 0 * * *(翌日 0 時)
  4. 15 分おき(0,15,30,45 分)
  5. OR 条件になり、どちらかが一致すれば実行される

9. 関連リンク

CRON 構文は最初は難しく感じますが、基本パターン・タイムゾーン・よくあるつまずきを押さえれば、確実に設定できるようになります。

覚えておきたいポイント:

  • 5 フィールド: 分・時・日・月・曜日
  • JST = UTC + 9 時間(サマータイムなし)
  • */n = n 間隔、a-b = 範囲、a,b,c = 複数
  • 24 時表記は使えない(0 時で指定)
  • 日と曜日の併用は注意(OR 条件)

関連ツール:

参考リンク:



さあ、Cron JST Converter で実際の CRON 式を入力して、次回実行日時を確かめてみましょう!

関連ツール: /tools/cron-jst