RunToolz iconRunToolz
Welcome to RunToolz!
Cron自動化DevOps

Cron式:推測なしで何でもスケジュール

あの謎めいたスケジュール文字列をついに解説。一発で動くCron式の書き方。

RunToolz Team2026年1月25日5 min read

0 0 * * * — これは何を意味するのでしょう?

AWS Lambda、GitHub Actions、あるいは何らかのタスクスケジューラーを使ったことがあれば、Cron式を見たことがあるはずです。5つか6つの謎めいたフィールドが、どうにかしてジョブをスケジュールします。

見た目ほど複雑ではありません。

5つのフィールド

┌───────────── 分(0 - 59)
│ ┌───────────── 時(0 - 23)
│ │ ┌───────────── 日(1 - 31)
│ │ │ ┌───────────── 月(1 - 12)
│ │ │ │ ┌───────────── 曜日(0 - 6、日曜 = 0)
│ │ │ │ │
* * * * *

各フィールドはジョブが実行される時を制限します。* は「毎」を意味します。数字は「その値のみ」を意味します。

実際に試してみませんか?Cron式を解析

例を読み解く

0 0 * * * — 分0、時0、任意の日、任意の月、任意の曜日 = 毎日深夜0時

30 8 * * 1-5 — 午前8:30、月曜から金曜 = 平日の朝

0 */2 * * * — 2時間ごと = 午前2時、4時、6時...

0 9 1 * * — 毎月1日の午前9時 = 月次レポート時間

特殊文字

* — すべての値(毎分、毎時など)

, — 複数の値。1,15 は1日と15日を意味します。

- — 範囲。1-5 は1から5を意味します。

/ — ステップ。*/15 は15ごとを意味します。分フィールドの */15 = 15分ごと。

よくあるパターン

5分ごと: */5 * * * *

毎時30分: 30 * * * *

毎日午前3時: 0 3 * * *

毎週日曜深夜0時: 0 0 * * 0

毎月1日の午前9時: 0 9 1 * *

平日午後6時: 0 18 * * 1-5

落とし穴

曜日 vs 日付。 両方を設定すると、ほとんどのシステムはOR結合します。0 0 1 * 1 は1日と毎週月曜の両方で実行されます。1日で月曜の時だけではありません。

タイムゾーンが重要。 ほとんどのCronシステムはサーバー時刻かUTCを使います。どちらを扱っているか把握しましょう。

6フィールド vs 5フィールド。 一部のシステムは最初に秒フィールドを追加します。0 0 0 * * * は秒フィールドありで深夜0時になります。

日曜 = 0 または 7。 システムによります。通常、日曜には両方とも機能します。

デプロイ前のテスト

0 0 */2 * * が2日ごとなのか2時間ごとなのか推測しないでください。Cronパーサーを使いましょう。

いくつかの予想されるトリガー時刻を確認します。意図と一致することを確認しましょう。

重要なジョブには、モニタリングを設定しましょう。Cron式が1フィールドずれていると、日次ジョブが毎時実行されたり——あるいは毎時ジョブが毎年実行されたりします。

Cronの代替

英語構文。 一部のスケジューラーは 0 15 * * * の代わりに「every day at 3pm」を受け付けます。明確ですが移植性は低いです。

Rate式。 AWSはCron式と並んで rate(5 minutes) を使います。シンプルな間隔には簡単です。

Systemdタイマー。 Cronの代わりとなるLinux版で、ログと依存関係管理が改善されています。


Cron式は密集していますが学習可能です。5つのフィールド、それぞれがジョブの実行時を制限します。式をテストし、タイムゾーンに注意すれば、何でも確実にスケジュールできます。