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回の実行スケジュール
- 人間が読める形式での説明
使い方
- DevToolBoxにアクセス
- Cron式パーサーを選択
- Cron式を入力
- 次回実行時刻を確認
例
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(おすすめ)
機能
- 次回実行時刻の計算
- 今後の実行スケジュール表示
- 人間が読める形式での説明
- オフライン動作(ブラウザ内で完結)
特徴
- 登録不要
- 無料
- セキュア(データがサーバーに送信されない)
Cron式を書いたら、DevToolBoxで確認する習慣をつけると、設定ミスを防げます。
2. 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式は一度覚えてしまえば、あらゆる自動化で使える強力なツールです。
覚えておくべきポイント
- 基本フォーマット:
分 時 日 月 曜日 - 特殊文字:
*(すべて)、,(複数)、-(範囲)、/(間隔) - よく使うパターン: この記事の一覧表を参照
- テストは必須: DevToolBoxやcrontab.guruで確認
- タイムゾーンに注意: UTCかローカルタイムか確認
おすすめの学習ステップ
- 基本パターンを試す:
0 9 * * *など、シンプルなものから - ツールで確認: DevToolBoxで次回実行時刻を確認
- 実際に動かす: crontabに登録して動作確認
- 徐々に複雑化: 範囲、間隔を組み合わせる
Cron式は、サーバー管理、CI/CD、データ処理など、あらゆる場面で使われます。この記事を参考に、自動化の第一歩を踏み出してください。
便利ツール
- DevToolBox Cron Parser — 次回実行時刻を瞬時に確認
Cron式を書いたら、必ずツールで確認する習慣をつけましょう。設定ミスによる「深夜に実行されるはずが動いていない」といったトラブルを防げます。