DevToolBox

Cron Expression Basics - cron式の書き方と読み方

最終更新日: 2026-07-12公開日: 2026-07-12執筆: DevToolBox編集部

0 3 * * * のような文字列を見て、いつ実行されるのか即座に読めるでしょうか。cron expression(cron式)は5つのフィールドと数種類の特殊文字だけで あらゆるスケジュールを表現できる非常にコンパクトな書式ですが、日フィールドと曜日フィールドの 関係など直感に反する仕様もあります。この記事ではcron式の基本文法から、よく使うパターン早見表、 6フィールド版との違いまでを整理します。

A cron expression packs an entire recurring schedule into five space-separated fields. This guide walks through what each field means, how the special characters (* , - /) combine, a lookup table of common patterns, and the gotchas around day-of-month vs. day-of-week and 6-field (seconds-included) variants like Quartz.

TL;DR

Cron Parser

cron式を貼り付けるだけで自然言語の説明と次回実行予定を一覧表示。書いたスケジュールが意図通りか、実行前にブラウザ内で即座に検証できます。

今すぐ試す →

1. 5フィールドの意味 / What each field means

cron式は左から「分」「時」「日」「月」「曜日」の順で固定されています。フィールドの順番を 間違えると意図しない時刻で実行されてしまうため、まずこの並びを覚えるのが最短ルートです。

位置フィールド取りうる値備考
1分 (minute)0-59-
2時 (hour)0-2324時間表記
3日 (day of month)1-31月末日は月により変動
4月 (month)1-12JAN-DEC等の略称対応系もある
5曜日 (day of week)0-6 (0=日曜) or 7=日曜実装により0/7両方が日曜を指すことがある
0 3 * * *
│ │ │ │ │
│ │ │ │ └─ 曜日(何曜日でもよい)
│ │ │ └─── 月(何月でもよい)
│ │ └───── 日(何日でもよい)
│ └─────── 時 = 3時
└───────── 分 = 0分
→ 毎日 3:00 に実行

2. 特殊文字の使い方 / Special characters

記号意味
*そのフィールドの全ての値(任意)* * * * * = 毎分
,複数の値をリスト指定0 9,18 * * * = 9時と18時
-範囲を指定0 9-17 * * * = 9〜17時の毎時0分
/ステップ(間隔)を指定*/15 * * * * = 15分ごと
- + /範囲内をステップで指定0 9-17/2 * * * = 9,11,13,15,17時

* means "every value," , lists specific values, -defines an inclusive range, and / applies a step. They can be combined, e.g.10-30/5 means 10, 15, 20, 25, 30 within that field.

3. よく使うパターン早見表 / Common pattern lookup table

cron式意味
* * * * *毎分
*/5 * * * *5分ごと
0 * * * *毎時0分
0 3 * * *毎日3:00
0 9 * * 1-5平日(月〜金)9:00
0 0 * * 0毎週日曜0:00
0 0 1 * *毎月1日0:00
0 0 1 1 *毎年1月1日0:00
0 0 L * *月末0:00(L対応の実装のみ)

4. 日フィールドと曜日フィールドの罠 / The day-of-month vs. day-of-week trap

標準cronの仕様で最もハマりやすいのがここです。日(第3フィールド)と曜日(第5フィールド)の 両方を * 以外で指定すると、AND ではなく OR で評価されます。

0 0 15 * 1
→ 「毎月15日」 OR 「毎週月曜日」の 0:00 に実行される
   (「15日かつ月曜日」ではない)

「第3金曜日だけ実行したい」のような AND 条件が必要な場合、標準cronの構文だけでは表現できません。 ジョブ側で曜日と日付を追加チェックするか、L/# などの拡張構文(Quartzなど 一部実装のみ対応)を使う必要があります。

5. タイムゾーンの注意点 / Timezone caveats

Linux/macOSの crontab は原則としてシステムのローカルタイムゾーンで 評価されます(一部のcron実装は crontab 内で TZ= 変数を指定可能)。一方、GitHub Actionsのcronトリガーは常にUTC基準で評価されるため、日本時間で 「毎朝9時」を実行したい場合は 0 0 * * *(UTC 0時 = JST 9時)のようにオフセットを 手動で計算する必要があります。

System crontab typically evaluates in local time, but hosted schedulers like GitHub Actions always use UTC — a frequent source of "my job ran 9 hours off" bugs.

6. 6フィールド(秒付き)cron式との違い / 6-field cron (with seconds)

標準crontabは5フィールドですが、Java の Quartz Scheduler や Spring の @Scheduledは先頭に秒フィールドを追加した6フィールド形式を使います。

形式フィールド構成代表的な利用箇所
標準(5フィールド)分 時 日 月 曜日crontab, GitHub Actions, node-cron(デフォルト)
Quartz(6〜7フィールド)秒 分 時 日 月 曜日 [年]Java Quartz, Spring @Scheduled(cron=...)

同じ見た目のcron式でも、パーサーが5フィールド前提か6フィールド前提かでフィールドのズレが起き、 意図しない時刻で実行される事故につながります。ライブラリのドキュメントで前提フィールド数を 必ず確認してください。

まとめ / Summary

cron式は「分 時 日 月 曜日」の5フィールドと * , - / の4種類の記号だけで あらゆる定期実行を表現できます。落とし穴は日と曜日のOR評価、タイムゾーンの前提、 5/6フィールドの混同の3点です。書いたcron式が意図通りか不安な場合は、実行前にパーサーで 次回実行時刻を確認する習慣をつけましょう。

A cron expression is five fields (minute, hour, day-of-month, month, day-of-week) combined with four operators. The three classic traps are: day-of-month and day-of-week are OR'd together (not AND'd), hosted schedulers often run in UTC regardless of your local timezone, and Quartz-style 6-field cron (with seconds) is not interchangeable with standard 5-field crontab syntax. Always verify the next run times before deploying a new schedule.

Cron Parser

入力したcron式の意味を日本語で説明し、次回実行予定を複数件表示します。デプロイ前の最終確認にどうぞ。

今すぐ試す →

よくある質問 / FAQ

cron式の5つのフィールドは何を表す?
左から順に「分(0-59)」「時(0-23)」「日(1-31)」「月(1-12)」「曜日(0-6、0=日曜)」です。例えば「0 3 * * *」は毎日3時0分を意味します。
*/5 はどういう意味?
「/」はステップ値を表し、*/5 はそのフィールドの範囲を5刻みで指定します。分フィールドで*/5なら0,5,10,15…55分ごとに実行されます。10-30/5のように範囲と組み合わせることも可能です。
日フィールドと曜日フィールドを両方指定するとどうなる?
標準cronでは日(第3フィールド)と曜日(第5フィールド)の両方に * 以外を指定すると、条件はAND(両方満たす)ではなくOR(どちらか満たす)で評価されます。例えば「0 0 15 * 1」は毎月15日と毎週月曜日の両方で実行されるため、意図しない頻発の原因になりやすい部分です。
Does cron run in local time or UTC?
Standard crontab runs in the system's local timezone (or the TZ variable set in the crontab file, on systems that support it). Cloud schedulers differ: GitHub Actions cron and many CI/CD platforms always evaluate schedules in UTC regardless of your local time, which is a common source of off-by-N-hours bugs.
6フィールドのcron式と5フィールドの違いは?
標準crontabは5フィールド(分 時 日 月 曜日)ですが、Quartz(Java)やSpring、一部のライブラリは先頭に「秒」フィールドを追加した6フィールド形式を使います。同じ書式に見えても、5フィールド前提のパーサーに6フィールド式を渡すとエラーになったり誤解釈されるため、使用しているツール・ライブラリの仕様を必ず確認してください。

関連ツール / Related tools

関連ガイド / Related guides