Cronパーサー

Cron式を人間が読める説明に解析し、次回実行時刻をプレビュー表示

サンプルを試す

Cron式

minute hour day(month) month day(week)

人間が読める説明

At 9:00 AM, Mon, Tue, Wed, Thu, Fri

フィールド詳細

Minute

0

0–59

Hour

9

0–23

Day (month)

*

1–31

Month

*

1–12

Day (week)

1-5

0–6

次の10回の実行予定

12026-03-26 09:00:00
22026-03-27 09:00:00
32026-03-30 09:00:00
42026-03-31 09:00:00
52026-04-01 09:00:00
62026-04-02 09:00:00
72026-04-03 09:00:00
82026-04-06 09:00:00
92026-04-07 09:00:00
102026-04-08 09:00:00

Cron式の解析とは?

Cron式とは、繰り返しスケジュールを定義する5つのフィールドをスペースで区切った文字列です。この形式は、1979年にKen ThompsonがVersion 7 Unix向けに初めて開発したUnix cronデーモンに由来します。各フィールドは時間単位(分、時、日、月、曜日)を表します。Cron式を解析するとは、この簡潔な表記を人間が読める説明と具体的な実行予定時刻のリストに変換することです。

標準5フィールド形式は、LinuxおよびmacOSのcrontab、GitHub ActionsやGitLab CIなどのCI/CDプラットフォーム、AWS(EventBridge)・Google Cloud Scheduler・Azure Functionsのクラウドスケジューラ、あらゆる主要プログラミング言語のジョブスケジューリングライブラリで使用されています。秒フィールドや年フィールドを追加した6フィールドや7フィールドの拡張形式を採用するシステムもありますが、POSIXで定義された5フィールドのレイアウトがすべての実装の基盤となっています。

Cron式を手動で解析するとエラーが発生しやすくなります。フィールド間の相互作用が非直感的なスケジュールを生み出すことがあります。例えば、0 9 1-7 * 1は「第1週の毎月曜日」を意味するのではなく、「毎月1日から7日、またはすべての月曜日」を意味します。Cronパーサーは各フィールドを展開し、組み合わせルールを適用することで、このような曖昧さを排除し、ジョブが実際に実行されるタイムスタンプを正確に示します。

このCronパーサーを使う理由

設定ファイルに記載された30 */6 1,15 * *のようなCron式を読んで、いつ実行されるかを正確に把握するには、5つのフィールドにわたる計算が必要です。このパーサーはその作業を即座に行います。

即時解析
Cron式を入力または貼り付けると、人間が読める説明と次の10回の実行予定時刻がすぐに表示されます。送信ボタンも再読み込みも不要です。
🔒
プライバシー優先の処理
すべての解析はブラウザ内でローカルに実行されます。Cron式やスケジュールデータがデバイスの外に出ることはありません。
📋
フィールドごとの詳細表示
5つの各フィールドが個別に解析・表示され、解決済みの値が確認できます。どのフィールドがスケジュールを制御しているかを一目で確認できます。
🔄
アカウント不要
ページを開いてすぐに解析を開始できます。ログイン、APIキー、インストールは不要で、モダンブラウザを搭載した任意のデバイスで動作します。

Cronパーサーの使用例

フロントエンド開発者
バックエンドに送信する前に、管理ダッシュボードやスケジューリングUIのCron式を検証します。フォームで生成されたCron文字列が、ユーザーがドロップダウンで選択したスケジュールと一致しているかを確認します。
バックエンドエンジニア
予期しない時刻に実行されるスケジュールジョブをデバッグします。タスクキューの設定(Celery、Sidekiq、Quartz)からCron式を貼り付け、次回の実行時刻が期待通りかどうかを確認します。
DevOps / SRE
CI/CDパイプライン、Kubernetes CronJob、クラウドスケジューラの設定にあるCronスケジュールを監査します。デプロイ前に、バックアップジョブ、証明書の更新、クリーンアップスクリプトが正しい時刻に設定されていることを確認します。
QAエンジニア
テスト環境のスケジュールタスクが本番スケジュールと一致しているかを検証します。本番環境で実行漏れが発生する前に、月や曜日フィールドのオフバイワンエラーを検出します。
データエンジニア
ETLパイプラインやデータ同期ジョブのCronトリガーを確認します。抽出ウィンドウが重複せず、後続の依存ジョブに十分なリードタイムがあることを確認します。
学習者
さまざまな式を試してリアルタイムで結果を確認しながら、Cron構文を学習します。ワイルドカード、範囲、ステップ値の相互作用について直感的に理解を深めます。

Cron式の構文リファレンス

標準のCron式はスペース区切りの5つのフィールドで構成されます。各フィールドには整数、ワイルドカード、範囲、リスト、ステップ値を指定できます。以下の表に各フィールドの許容範囲と演算子を示します。

フィールド範囲演算子説明
Minute0–59* , - /Minute within the hour
Hour0–23* , - /Hour of the day (24-hour)
Day (month)1–31* , - /Day of the month
Month1–12* , - /Month of the year (or JAN–DEC)
Day (week)0–6* , - /Day of the week (0 = Sunday, or SUN–SAT)

各フィールド内での値のマッチング方法を制御する4つの特殊文字があります:

文字名前動作
*WildcardMatches every possible value in the field. * in the minute field means "every minute."
,ListSeparates individual values. 1,15 in the day field means "the 1st and 15th."
-RangeDefines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday."
/StepDefines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50."

一般的なスケジュールのニーズに対応するCron式の例を以下に示します:

スケジュール
* * * * *Every minute
0 * * * *Every hour (at minute 0)
*/15 * * * *Every 15 minutes
0 9 * * *Every day at 9:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
30 2 * * 0Every Sunday at 2:30 AM
0 0 1 * *First day of every month at midnight
0 0 * * 1Every Monday at midnight
0 0 1 1 *January 1st at midnight (yearly)
0 */6 * * *Every 6 hours
5,35 * * * *At minute 5 and 35 of every hour
0 9-17 * * 1-5Every hour from 9 AM to 5 PM, weekdays

コード例

主要な言語でCron式を解析し次回実行時刻を計算する方法:

JavaScript (Node.js)
import cronstrue from 'cronstrue';

// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// → "At 09:00 AM, Monday through Friday"

cronstrue.toString('*/15 * * * *');
// → "Every 15 minutes"

// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';

const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// → next Sunday at 02:30 UTC

// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
  console.log(interval.next().toString());
}
Python
from crontab import CronTab
from croniter import croniter
from datetime import datetime

# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# → seconds until next run

# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
    print(cron_iter.get_next(datetime))
# → next 5 weekday 09:00 timestamps

# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# → True (minute 30 is divisible by 15)
Go
package main

import (
    "fmt"
    "time"
    "github.com/robfig/cron/v3"
)

func main() {
    // Parse a standard 5-field cron expression
    parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
    schedule, err := parser.Parse("0 9 * * 1-5")
    if err != nil {
        panic(err)
    }

    // Calculate the next 5 run times
    now := time.Now()
    for i := 0; i < 5; i++ {
        now = schedule.Next(now)
        fmt.Println(now)
    }
    // → next 5 weekday 09:00 timestamps
}
Bash (crontab)
# List current user's cron jobs
crontab -l

# Edit cron jobs interactively
crontab -e

# Add a job: run backup.sh every day at 2:30 AM
# (append to crontab via pipe)
(crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab -

# Check syntax with a dry-run parse (requires cronie or busybox)
# The system will reject invalid expressions when saving

# View cron logs on systemd-based Linux
journalctl -u cron --since "1 hour ago"

よくある質問

5フィールドと6フィールドのCron式の違いは何ですか?
標準(POSIX)のCron形式には分・時・日・月・曜日の5フィールドがあります。Quartz SchedulerやSpringなどのツールは先頭に秒フィールドを追加して6フィールドにします。AWS EventBridgeは末尾に年フィールドを追加した6フィールドを使用します。このパーサーはcrontab、GitHub Actions、Kubernetes CronJob、ほとんどのスケジューリングライブラリと互換性のある標準5フィールド形式に対応しています。
cronはday-of-monthとday-of-weekを同時に指定するとどう動作しますか?
両フィールドが制限されている(*でない)場合、cronはOR論理を使用します。つまり、どちらかの条件が真であればジョブが実行されます。例えば、0 9 15 * 1は「毎月15日の午前9時、または毎月曜日の午前9時」を意味します。これはよくある混乱の原因です。両フィールドが*の場合、ジョブは毎日実行されます。
cronはどのタイムゾーンを使用しますか?
従来のcrontabはシステムのローカルタイムゾーンで動作します。Kubernetes CronJobはデフォルトでkube-controller-managerのタイムゾーン(通常はUTC)を使用しますが、Kubernetes 1.25以降ではオプションの.spec.timeZoneフィールドに対応しています。AWS EventBridgeとGoogle Cloud Schedulerではスケジュールごとにタイムゾーンを指定できます。cronジョブをデプロイする前に、スケジューラが使用するタイムゾーンを必ず確認してください。
cronで30秒ごとにジョブを実行できますか?
標準の5フィールドcronはサブミニッタスケジューリングに対応していません。最小間隔は1分(*/1または*)です。30秒ごとに実行するには、秒フィールドを持つ6フィールドcron(Quartz、Spring)、30秒スリープして再実行するラッパースクリプト、またはOnCalendarを使用したsystemdタイマーなど別のスケジューリング機構が必要です。
day-of-weekフィールドで0と7は同じですか?
ほとんどのcron実装では、0と7はどちらも日曜日を表します。この慣習は元々のUnix cronに由来します。ただし、Quartzなど一部のシステムでは日曜日に1、土曜日に7を使用します。POSIXでは範囲を0–6(0が日曜日)と定義しています。スケジューラが曜日の名前(SUN、MON)を受け付ける場合は、曖昧さを避けるためにそちらを使用してください。
存在しない日付をday-of-monthに指定するとどうなりますか?
31日(0 0 31 * *)にジョブをスケジュールすると、31日未満の月には実行されません。cronは翌月に繰り越しません。2月は常にスキップされ、4月・6月・9月・11月もスキップされます。毎月末日に実行するには、一部のcron実装がLモディファイア(0 0 L * *)に対応していますが、標準のPOSIX cronはサポートしていません。
デプロイ前にCron式をテストするにはどうすればよいですか?
このようなオンラインパーサーを使用して次回の実行時刻を確認し、スケジュールが意図と一致していることを検証してください。本番環境での検証には、ほとんどのcronライブラリが次回実行計算関数を提供しています。Node.jsのcron-parser、PythonのcroniterGoのrobfig/cronなどをテストスイートで使用して、デプロイ前に次のN回の実行時刻をアサートしてください。