Cron式の書き方 完全ガイド — よく使うパターンと便利ツール


Cron(クーロン)は、UNIXベースのシステムで定期的にタスクを実行するための仕組みです。Webサーバーのメンテナンス、データベースバックアップ、レポート生成など、さまざまな自動化に使われています。

しかし、Cron式の書き方は独特で、初見では理解しにくいのが難点です。

0 3 * * 1

このような謎の文字列を見て、「何これ?」と思った経験がある人も多いでしょう。

この記事では、Cron式の基礎から実践まで、すべてを解説します。

Cron式とは?

Cron式(Cron Expression)は、タスクの実行スケジュールを指定するための表記法です。

基本フォーマット(5フィールド)

* * * * *
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 曜日 (0-7)(0と7は日曜日)
│ │ │ └─── 月 (1-12)
│ │ └───── 日 (1-31)
│ └─────── 時 (0-23)
└───────── 分 (0-59)

システムによっては6フィールド(秒を含む)

* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ └─ 曜日 (0-7)
│ │ │ │ └─── 月 (1-12)
│ │ │ └───── 日 (1-31)
│ │ └─────── 時 (0-23)
│ └───────── 分 (0-59)
└─────────── 秒 (0-59)

各フィールドには、数値や特殊文字を使って条件を指定します。


Cron式の基本構文

1. アスタリスク(*): すべての値

「すべて」を意味します。

* * * * *

毎分実行(1分ごと)

0 * * * *

毎時0分に実行(1時間ごと)

2. 数値: 特定の値

特定の時刻や日付を指定します。

30 14 * * *

毎日14時30分に実行

0 0 1 * *

毎月1日の0時0分に実行

3. カンマ(,): 複数の値

複数の値を列挙します。

0 9,12,18 * * *

毎日9時、12時、18時に実行

0 0 * * 1,3,5

毎週月曜、水曜、金曜の0時に実行

4. ハイフン(-): 範囲

値の範囲を指定します。

0 9-17 * * *

9時から17時まで、毎時0分に実行(営業時間中、1時間ごと)

0 0 * * 1-5

月曜から金曜の0時に実行(平日)

5. スラッシュ(/): 間隔

指定した間隔で実行します。

*/5 * * * *

5分ごとに実行

0 */2 * * *

2時間ごとに実行(0時、2時、4時…)

*/15 9-17 * * *

9時から17時まで、15分ごとに実行


よく使うCron式パターン一覧

以下は、実務でよく使うパターンの一覧です。コピペして使えます。

Cron式説明実行タイミング例
* * * * *毎分毎分
*/5 * * * *5分ごと0:00, 0:05, 0:10…
0 * * * *毎時(0分)1:00, 2:00, 3:00…
0 */2 * * *2時間ごと0:00, 2:00, 4:00…
0 9 * * *毎日9時毎日 9:00
30 14 * * *毎日14時30分毎日 14:30
0 0 * * *毎日0時(深夜)毎日 0:00
0 0 * * 0毎週日曜0時日曜 0:00
0 0 * * 1毎週月曜0時月曜 0:00
0 0 * * 1-5平日0時月〜金 0:00
0 0 1 * *毎月1日0時1日 0:00
0 0 1 1 *毎年1月1日0時1/1 0:00
0 9-17 * * *9時〜17時の毎時0分9:00, 10:00…17:00
*/15 9-17 * * 1-5平日9時〜17時、15分ごと月〜金 9:00, 9:15…
0 3 * * 0毎週日曜3時日曜 3:00
0 0,12 * * *毎日0時と12時0:00, 12:00

実践的なCron式の例

実際の業務でよく使うパターンを紹介します。

バックアップ系

毎日深夜3時にDBバックアップ

0 3 * * *

深夜のアクセスが少ない時間帯に実行するのが一般的です。

毎週日曜の深夜2時にフルバックアップ

0 2 * * 0

週次のフルバックアップを日曜に実行。

毎時15分に差分バックアップ

15 * * * *

レポート生成系

営業日の朝9時にレポート生成

0 9 * * 1-5

平日(月〜金)の朝、営業開始時に実行。

毎月1日の朝8時に月次レポート

0 8 1 * *

月初にレポートを自動生成。

データ処理系

5分ごとにログ集計

*/5 * * * *

リアルタイムに近い頻度でログを処理。

営業時間内(9-18時)、30分ごとにデータ同期

*/30 9-18 * * 1-5

平日の営業時間内のみ実行。

メンテナンス系

毎日深夜4時にキャッシュクリア

0 4 * * *

毎週月曜の深夜1時にログローテーション

0 1 * * 1

監視系

1分ごとにヘルスチェック

* * * * *

サービスの死活監視。

10分ごとにディスク容量チェック

*/10 * * * *

Cron式のテスト方法

Cron式を書いたら、必ず動作確認をしましょう。

方法1: 次回実行時刻を確認

実際にCronに登録する前に、次回実行時刻を確認できます。

オンラインツール(DevToolBox Cron Parser)

DevToolBoxのCron式パーサーを使えば、以下が確認できます。

  • 次回実行時刻
  • 今後10回の実行スケジュール
  • 人間が読める形式での説明

使い方

  1. DevToolBoxにアクセス
  2. Cron式パーサーを選択
  3. Cron式を入力
  4. 次回実行時刻を確認

0 9 * * 1-5

と入力すると、

次回実行: 2026年2月6日(木)9:00
説明: 毎週月曜〜金曜の9時0分に実行

のように表示されます。

方法2: ローカルでテスト

実際にcrontabに登録してテストします。

一時的に実行間隔を短くする

# テスト用(1分後に実行)
* * * * * /path/to/script.sh

# 実際の設定
0 3 * * * /path/to/script.sh

テスト時は毎分実行にして、動作を確認後、本来のスケジュールに戻します。

方法3: crontabの確認

# 現在のcrontabを表示
crontab -l

# crontabを編集
crontab -e

Cron式の注意点

1. タイムゾーン

Cronはサーバーのタイムゾーンで動作します。

確認方法

date

AWS CloudWatch Eventsの場合

  • デフォルトはUTC
  • タイムゾーンを考慮した時刻指定が必要

# 日本時間9時 = UTC 0時(+9時間)
0 0 * * * # UTC

2. 曜日と日の同時指定

曜日フィールドと日フィールドを同時に指定すると、OR条件になります。

0 0 1 * 0

→ 「毎月1日」または「毎週日曜」(AND条件ではない)

どちらか一方のみを指定するのが無難です。

3. 実行ログの確認

Cronジョブが正しく実行されたか確認しましょう。

# cronログを確認(システムによって異なる)
tail -f /var/log/cron
tail -f /var/log/syslog | grep CRON

4. パスの問題

Cronから実行されるスクリプトは、環境変数が限定的です。

絶対パスを使う

# NG
node script.js

# OK
/usr/bin/node /home/user/script.js

環境変数を明示的に設定

0 3 * * * export PATH=/usr/bin:$PATH && /home/user/script.sh

5. エラーの扱い

デフォルトでは、Cronジョブの出力はメールで送信されます(設定されていれば)。

標準出力・エラー出力をファイルに保存

0 3 * * * /path/to/script.sh >> /var/log/script.log 2>&1

出力を破棄

0 3 * * * /path/to/script.sh > /dev/null 2>&1

システム別のCron式の違い

Cronの実装はシステムによって微妙に異なります。

Linux/Unix crontab(標準)

フォーマット: 5フィールド

* * * * *

拡張構文

@yearly   # 0 0 1 1 *(毎年1月1日)
@monthly  # 0 0 1 * *(毎月1日)
@weekly   # 0 0 * * 0(毎週日曜)
@daily    # 0 0 * * *(毎日)
@hourly   # 0 * * * *(毎時)
@reboot   # システム起動時

AWS CloudWatch Events

フォーマット: 6フィールド(秒を含む)

0 * * * * *

注意点

  • UTCで動作
  • ?(どれでもいい)が使える
  • 曜日は1-7(1=日曜)

Kubernetes CronJob

フォーマット: 5フィールド(Linux標準)

* * * * *

注意点

  • タイムゾーンはクラスタ設定に依存
  • 同時実行の制御が可能(concurrencyPolicy)

GitHub Actions

フォーマット: 5フィールド

* * * * *

注意点

  • UTCで動作
  • 最短実行間隔は5分

on:
  schedule:
    - cron: '0 9 * * 1-5'  # 平日9時(UTC)

Cron式の便利ツール

1. DevToolBox Cron Parser(おすすめ)

URL: https://devtoolbox.co

機能

  • 次回実行時刻の計算
  • 今後の実行スケジュール表示
  • 人間が読める形式での説明
  • オフライン動作(ブラウザ内で完結)

特徴

  • 登録不要
  • 無料
  • セキュア(データがサーバーに送信されない)

Cron式を書いたら、DevToolBoxで確認する習慣をつけると、設定ミスを防げます。

2. crontab.guru

URL: https://crontab.guru/

シンプルで分かりやすいCron式のリファレンスサイト。

機能

  • 次回実行時刻の表示
  • 人間が読める形式での説明

3. man crontab

ターミナルで確認できる公式ドキュメント。

man crontab
man 5 crontab

よくある質問

Q1: 「毎日9時」と「毎日9時0分」は同じ?

A: 同じです。

0 9 * * *

これが「毎日9時0分」です。

Q2: 「2時間ごと」の開始時刻は?

A: 0時から始まります。

0 */2 * * *

→ 0:00, 2:00, 4:00, 6:00…

10時から2時間ごとにしたい場合は、カンマで列挙します。

0 10,12,14,16,18,20,22 * * *

Q3: 月末を指定できる?

A: 標準のCron式では難しいです。

代替案

  • 毎月1日に「前月末の処理」を実行
  • スクリプト内で月末判定
# 月末かどうか判定
if [ "$(date -d tomorrow +%d)" = "01" ]; then
  # 月末の処理
fi

Q4: 夏時間(DST)の影響は?

A: サーバーのタイムゾーン設定に依存します。

  • UTC: 影響なし
  • ローカルタイム: 1時間ずれる可能性

重要なジョブはUTCで設定するのが無難です。

Q5: 秒単位のスケジュールは?

A: システムによります。

  • 標準crontab: 非対応(最小単位は分)
  • AWS CloudWatch Events: 対応(6フィールド)
  • Kubernetes: 非対応

秒単位で実行したい場合、別の仕組み(systemdタイマー、Node.jsのnode-cronなど)を使います。


まとめ

Cron式は一度覚えてしまえば、あらゆる自動化で使える強力なツールです。

覚えておくべきポイント

  1. 基本フォーマット: 分 時 日 月 曜日
  2. 特殊文字: *(すべて)、,(複数)、-(範囲)、/(間隔)
  3. よく使うパターン: この記事の一覧表を参照
  4. テストは必須: DevToolBoxやcrontab.guruで確認
  5. タイムゾーンに注意: UTCかローカルタイムか確認

おすすめの学習ステップ

  1. 基本パターンを試す: 0 9 * * *など、シンプルなものから
  2. ツールで確認: DevToolBoxで次回実行時刻を確認
  3. 実際に動かす: crontabに登録して動作確認
  4. 徐々に複雑化: 範囲、間隔を組み合わせる

Cron式は、サーバー管理、CI/CD、データ処理など、あらゆる場面で使われます。この記事を参考に、自動化の第一歩を踏み出してください。

便利ツール

Cron式を書いたら、必ずツールで確認する習慣をつけましょう。設定ミスによる「深夜に実行されるはずが動いていない」といったトラブルを防げます。