Cronジェネレータ

ステップバイステップのビルダーでCron式を視覚的に生成

クイックプリセット

日(月内)

曜日

Cron式

0 9 * * *

minute hour day(month) month day(week)

Cron式ジェネレータとは?

Cron式ジェネレータは、Cronスケジュール文字列を手書きすることなく、ビジュアルインターフェースを通じて構築するツールです。Cron式は5つのフィールド(分、時、日、月、曜日)で構成される文字列で、繰り返しタスクの実行タイミングを定義します。この形式は1979年のUnix cronデーモンに由来し、現在はcrontab、Kubernetes CronJob、GitHub Actions、AWS EventBridge、Google Cloud Scheduler、および多数のジョブスケジューリングライブラリで広く使われています。

Cron式を記憶に頼って書くことはバグの主な原因のひとつです。5つのフィールドは直感的でない方法で相互作用します。例えば、分フィールドの*/15は0、15、30、45に実行されますが、5/15は分5から始まり5、20、35、50を生成します。day-of-monthとday-of-weekの両方にワイルドカード以外の値を指定すると、AND条件ではなくOR条件になります。これは経験豊富なエンジニアも驚く挙動です。ビジュアルジェネレータはこの曖昧さを排除し、選択したスケジュールに対応する正しい構文を自動的に生成します。

Cron式ジェネレータはCronパーサーとは異なります。パーサーは既存の式を受け取り、人間が読める説明に変換します。ジェネレータはその逆方向に動作します。必要なスケジュールを指定すると、ツールが対応するCron文字列を出力します。新しいスケジュールジョブを作成する際はジェネレータを、既存のジョブを監査・デバッグする際はパーサーを使用してください。

このCronジェネレータを使う理由

Cron式を手動で作成するにはフィールドの順序、値の範囲、演算子のルールを記憶する必要があります。フィールドをひとつ間違えると、毎日実行するはずのジョブが毎分実行されてしまいます。このジェネレータはスケジュールをビジュアルで選択し、ワンクリックで結果をコピーできます。

🖱️
ビジュアルスケジュールビルダー
ドロップダウンとトグルで分、時、日、月、曜日の値を選択します。各フィールドを変更するとCron式がリアルタイムで更新されます。構文を記憶する必要はありません。
🔒
プライバシー優先の処理
すべての生成処理はブラウザ内で実行されます。スケジュールデータはサーバーに送信されません。Cron式とジョブ設定はデバイス上に留まります。
プレビュー付き即時出力
構築しながら生成されたCron式と次回実行予定時刻のプレビューを確認できます。設定ファイルにコピーする前にスケジュールが正しいかを検証できます。
📋
アカウント不要
ページを開いてすぐに構築を開始できます。ログイン、APIキー、インストールは不要です。モバイルを含むモダンブラウザを搭載した任意のデバイスで動作します。

Cronジェネレータの使用例

フロントエンド開発者
管理パネルやスケジューリングUIのCron式を構築します。データベースにCron文字列を保存するユーザー向けスケジュールピッカーに対応する正しい構文を生成します。
バックエンドエンジニア
Celery、Sidekiq、BullなどのタスクキューのCron式を作成します。スケジュール文字列を生成し、次回実行を確認してからジョブ設定に貼り付けます。
DevOps / SRE
Kubernetes CronJob、CI/CDパイプライン、インフラ自動化のCronスケジュールを生成します。バックアップウィンドウ、証明書更新、ログローテーションの式を構文ミスなく作成します。
QAエンジニア
結合テスト用に特定の間隔でトリガーするテスト用Cron式を作成します。スケジューラの動作を検証するため、予測可能な実行時刻を生成するスケジュールを構築します。
データエンジニア
ETLパイプラインのトリガーとデータ同期スケジュールのCron式を構築します。抽出、変換、ロードの各ステージで重複しない正確なタイミングのスケジュールを生成します。
学習者
ビジュアルビルダーで実験しながらCron構文を学習します。個々のフィールドを変更して式と次回実行時刻がどう変化するかを確認し、ワイルドカード、範囲、ステップ値への直感を養います。

よく使われるCronスケジュールのプリセット

以下の表は最もよく使われるスケジュールのCron式の一覧です。本番環境のほとんどのジョブはこれらのパターンに当てはまります。実際のタイミングに合わせて個々のフィールドを変更してください。

スケジュール代表的な用途
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

Cron式の構成要素

すべてのCron式は左から右に読む5つのフィールドで構成されます。各フィールドは特定の値と演算子を受け付けます。これらのルールを理解すれば、本番環境で必要なあらゆるスケジュールを記述できます。

5フィールドCron式のレイアウト:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

4つの演算子が各フィールド内での値のマッチング方法を制御します。組み合わせも可能です。例えば、day-of-weekフィールドの1-5/2は月曜・水曜・金曜を意味します(範囲1-5、ステップ2)。

演算子構文結果
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

コード例

Node.js、Python、Go、bashでCronスケジュールを作成・登録する方法:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

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

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

よくある質問

Cron式の正しいフィールド順序は何ですか?
標準の5フィールド順序は、分(0-59)、時(0-23)、日(1-31)、月(1-12)、曜日(0-6、0が日曜)です。この順序はPOSIXで定義されており、crontab、Kubernetes、GitHub Actions、ほとんどのCronライブラリで使用されています。Quartz Schedulerなど一部のツールは先頭に秒フィールドを追加して6フィールドにしていますが、5フィールドのレイアウトが標準的なデフォルトです。
「N分ごと」のCron式を生成するにはどうすればよいですか?
分フィールドでステップ演算子を使用します:*/N。5分ごとの場合は*/5 * * * *、15分ごとの場合は*/15 * * * *と記述します。ステップ演算子はフィールドの範囲を均等に分割します。なお、*/7は時間をまたいで7分ごとに実行されるわけではなく、0、7、14、21、28、35、42、49、56分に実行され、次の時間の0分にリセットされます。
毎月末日に実行されるCron式を生成できますか?
標準のPOSIX cronには「月末日」演算子がありません。crontabやKubernetes CronJobでは0 0 L * *と記述することはできません。回避策としては28〜31日にスケジュールしてシェルチェック([ $(date +%d -d tomorrow) -eq 01 ])を追加する方法や、Lモディファイアをサポートするように拡張されたQuartzなどのcron実装を使用する方法があります。AWS EventBridgeのレート式も末日をネイティブに指定できます。
Cronジェネレータとcronパーサーの違いは何ですか?
Cronジェネレータはスケジュール要件(例:「平日の午前9時」)を受け取り、正しいCron式(0 9 * * 1-5)を出力します。Cronパーサーはその逆で、既存の式を受け取り人間が読める説明を生成します。新しいスケジュールを作成する際はジェネレータを、既存のスケジュールを確認・デバッグする際はパーサーを使用してください。
Cronジョブの重複実行を避けるにはどうすればよいですか?
Cron自体は重複実行を防止しません。毎分実行されるジョブが90秒かかる場合、2つのインスタンスが重複します。防止するには、ロックファイル(bashのflock)、分散ロック(Redis、etcd)、またはスケジューラ組み込みの並行制御ポリシーを使用してください。Kubernetes CronJobにはForbidまたはReplaceに設定できるconcurrencyPolicyフィールドがあります。Celeryなどのアプリケーションレベルのスケジューラではソロプールまたはタスクレベルのロックを使用してください。
Cronで週の最初の曜日は0と1のどちらですか?
POSIX cronでは0が日曜、6が土曜です。ほとんどの実装では0と7の両方が日曜を表します。Quartz Schedulerは異なる規約を採用しており、1が日曜、7が土曜です。使用するシステムが曜日名(SUN、MON、TUE)をサポートしている場合は、プラットフォーム間の混乱を避けるためにそちらを使用してください。
特定のタイムゾーンでCron式を生成するにはどうすればよいですか?
従来のcrontabはシステムのローカルタイムゾーンを使用します。一部のシステムではcrontabファイルにTZ変数(TZ=America/New_York)を設定できます。Kubernetes CronJobはバージョン1.25以降で.spec.timeZoneフィールドをサポートしています。AWS EventBridgeとGoogle Cloud Schedulerではスケジュールごとにタイムゾーンを指定できます。Cron式と一緒に想定タイムゾーンを必ず設定ファイルに記録してください。