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式の一覧です。本番環境のほとんどのジョブはこれらのパターンに当てはまります。実際のタイミングに合わせて個々のフィールドを変更してください。
| スケジュール | 式 | 代表的な用途 |
|---|---|---|
| Every minute | * * * * * | Health checks, queue polling |
| Every 5 minutes | */5 * * * * | Metrics collection, cache refresh |
| Every 15 minutes | */15 * * * * | API sync, dashboard updates |
| Every hour | 0 * * * * | Log rotation, report generation |
| Every 6 hours | 0 */6 * * * | Database backups, digest emails |
| Daily at midnight | 0 0 * * * | Nightly batch jobs, cleanup scripts |
| Daily at 9 AM | 0 9 * * * | Daily reports, notification digests |
| Weekdays at 9 AM | 0 9 * * 1-5 | Business-hours tasks, standup reminders |
| Every Monday at midnight | 0 0 * * 1 | Weekly reports, dependency updates |
| First of every month | 0 0 1 * * | Billing runs, monthly aggregation |
| Every Sunday at 2:30 AM | 30 2 * * 0 | Full backups during low-traffic window |
| January 1st at midnight | 0 0 1 1 * | Annual reports, license renewals |
Cron式の構成要素
すべてのCron式は左から右に読む5つのフィールドで構成されます。各フィールドは特定の値と演算子を受け付けます。これらのルールを理解すれば、本番環境で必要なあらゆるスケジュールを記述できます。
4つの演算子が各フィールド内での値のマッチング方法を制御します。組み合わせも可能です。例えば、day-of-weekフィールドの1-5/2は月曜・水曜・金曜を意味します(範囲1-5、ステップ2)。
| 演算子 | 構文 | 例 | 結果 |
|---|---|---|---|
| Wildcard | * | * (minute) | Every minute |
| List | a,b,c | 1,15 (day) | 1st and 15th |
| Range | a-b | 9-17 (hour) | 9 AM through 5 PM |
| Step | */n | */10 (minute) | Every 10 minutes |
| Range+Step | a-b/n | 10-30/5 (min) | 10, 15, 20, 25, 30 |
コード例
Node.js、Python、Go、bashでCronスケジュールを作成・登録する方法:
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"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 timestamppackage 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()
}# 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