Crontab ジェネレーター & cron 式ビルダー
ブラウザ上で cron 式を生成・検証・デコードできます。ローカルタイムまたは UTC での次回実行プレビュー、POSIX 5 フィールド構文、プリセット、自然言語による説明に対応。無料・プライベート・登録不要。
自然言語による説明
—
次回 5 回の実行予定
cron 式とは?
cron 式とは、繰り返しスケジュールを定義する 5 フィールドの文字列です。左から順に分(0-59)、時(0-23)、日(1-31)、月(1-12)、曜日(0-6、0 と 7 はどちらも日曜日)が並びます。各フィールドは単一の値、リスト(`1,3,5`)、範囲(`1-5`)、ワイルドカード(`*` = 任意の値)、ステップ(`*/15` = 15 ごと)を受け付けます。5 つのフィールドの組み合わせで、スケジュール対象のコマンドが実行される時刻が厳密に決まります — 例えば `0 9 * * 1-5` は「分 0、時 9、任意の日、任意の月、曜日は月曜から金曜」と読めて、自然言語にすると「平日 9:00」となります。
cron は 1979 年の Unix Version 7 で生まれ、5 フィールド文法は 40 年以上ほぼ変わっていません — 元の構文がいかによく設計されていたかの証左です。今日では cron 式は Unix の crontab ファイルにとどまらず、Kubernetes CronJobs、GitHub Actions ワークフロー、AWS EventBridge ルール、GitLab CI のスケジュールパイプライン、Cloudflare Workers Cron Triggers、各クラウドのサーバーレスプラットフォームのすべてが同じ 5 フィールド文法を受け付けます。cron を一度学べば、現代のあらゆるインフラ環境でジョブをスケジュールできるということです。
POSIX 標準は 5 つの演算子を定義しています: `*`(任意の値)、`,`(値のリスト)、`-`(範囲)、`/`(ステップ)、そして月名(JAN-DEC)と曜日名(SUN-SAT)の名前付きトークン。多くの実装ではさらに 5 つの一般的なショートカットを展開します: `@yearly`(`0 0 1 1 *`)、`@monthly`(`0 0 1 * *`)、`@weekly`(`0 0 * * 0`)、`@daily`(`0 0 * * *`)、`@hourly`(`0 * * * *`)。Quartz スケジューラ(Java ライブラリ)はこれに任意の秒フィールドと追加演算子(`?`、`L`、`W`、`#`)を加えています — Java/Spring 環境では便利ですが、標準 cron への移植性はありません。本ツールが POSIX 5 フィールド標準に従うのは、それが主流の方式であり、あなたの Linux サーバー、GitHub Actions ランナー、Kubernetes クラスタが実際に理解する文法だからです。
POSIX cron の特殊な挙動として注意すべきものが 1 つあります: 日と曜日の両方が制限されている場合(いずれも `*` でない場合)、どちらか一方にマッチすればスケジュールが実行されます — AND ではなく OR セマンティクスです。つまり `0 0 1 * 5` は毎月 1 日と毎週金曜日の両方で実行され、1 日に当たる金曜日だけではありません。これは cron で最も多いハマりどころで、本ツールの次回実行プレビューが実際に発火する日時を表示することで一目瞭然になります。デプロイ前に確認しましょう。
パースと次回実行計算はすべて JavaScript によってブラウザ内で完結します — 式、スケジュール、その他のデータが一切サーバーへ送信されることはありません。本ツールはあらゆる標準 POSIX cron 式を即座にパースし、自然言語の説明と 5 回分の実行プレビューを完全プライベートで提供します。
cron 式は他の開発者向けツールと密接に関連しています。cron ジョブのデバッグでは想定実行時刻と Unix タイムスタンプを照合することが多く、複雑なスケジュールは JSON 設定として文書化されることが多く、その検証にはJSON フォーマッターが役立ちます。OR セマンティクス、タイムゾーンの落とし穴、Linux/Kubernetes/GitHub Actions での例を含む cron バリアントの詳細ガイドは、当サイトの cron スケジュールリファレンスをご覧ください。
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) 主な特長
ライブ POSIX 5 フィールドパーサー
POSIX cron に準拠した厳格なパーサー: 分(0-59)、時(0-23)、日(1-31)、月(1-12 または JAN-DEC)、曜日(0-6 または SUN-SAT、7 も日曜日として受け付け)。標準演算子(`*` `,` `-` `/`)とマクロ(`@yearly` `@monthly` `@weekly` `@daily` `@hourly`)にすべて対応します。
次回 5 回の実行プレビュー
現在のローカル時刻を基準に次回 5 回の実行時刻を計算します。Local と UTC をワンクリックで切り替え可能 — 別リージョンのサーバーに crontab をデプロイする前にタイムゾーンの罠を見抜く、最も確実な方法です。
自然言語による説明
有効な式にはすべて人間に読みやすい説明が付きます: 「15 分ごと」「平日 9:00」「1 月と 7 月の毎月 1 日 02:30」など。コードレビューやチーム引き継ぎが楽になります — `*/5 9-17 * * 1-5` の意味を推測する必要はもうありません。
フィールド単位のエラーメッセージ
無効な式には即座に赤いフィードバックが表示され、問題のあるフィールドが強調されて具体的なエラーが出ます: 「Error in minute: value out of range [0, 59]: "60"」。3 日後にレポートが動いていなかったと気付くような、サイレントな crontab 失敗はもう起こりません。
よく使うスケジュール用のプリセットチップ
実用的な 11 種のワンクリックプリセットを用意しました: 毎分、5/15 分ごと、1 時間ごと、毎日 0:00 と 9:00、平日 9:00、毎週日曜/月曜、毎月 1 日、毎年。タップ、微調整、リリースの 3 ステップです。
フィールドごとのビルダー入力
5 フィールドの順序を覚える必要はありません — Minute、Hour、Day of month、Month、Day of week とラベルのついた 5 つの小さな入力欄で、1 か所ずつ編集でき値の欠落や順序ミスを防げます。上部の完全な式は自動的に再構築されます。
POSIX OR セマンティクスを正しく処理
日と曜日の両方が制限された場合、OR ルールが適用されます — `0 0 1 * 5` は毎月 1 日と毎週金曜日の両方で実行されます。次回実行プレビューがデプロイ前にこれを可視化し、週末の予期せぬページ通知を防ぎます。
100% ブラウザ完結のプライバシー
cron 式はインフラのタイミングや社内スケジューリングパターンを露出することが多いものですが、ブラウザの外に出ることはありません。サーバーへのデータ送信もロギングも分析もありません。ブラウザの Network タブで確認可能です。本番スケジュールや社内システムでも安全です。
Quartz 対応のエラーメッセージ
`?` `L` `W` `#` を含む Quartz 式を貼り付けた場合、パーサーは「Quartz operators not supported — use POSIX syntax」と説明します。サイレントな失敗をデバッグする代わりに、cron 向けに書き直すべきだと一目で分かります。Quartz スケジュールは Linux cron では動作しません。
cron バリアントとスケジューラ
Vixie cron(Linux デフォルト)
5 フィールド POSIXほとんどの Linux ディストリビューションのデフォルト。厳格な POSIX に明示的タイムゾーン用の `CRON_TZ=` 拡張を加えたもの。日 / 曜日の OR セマンティクスが適用されます。本ツールの主要ターゲットです。
BSD cron
5 フィールド POSIXmacOS や BSD 系のデフォルト。POSIX 互換で、vixie cron との実装差はわずか。ほとんどの式は同じように動作します。
systemd timer(OnCalendar)
カレンダー仕様、cron ではないsystemd ベースの Linux における cron の代替。`OnCalendar: 2026-*-* 09:00:00` 構文を使います — 非繰り返しスケジュールでは読みやすいですが、cron 式との相互運用性はありません。
Quartz Scheduler(Java/Spring)
6 または 7 フィールド秒フィールド(必須)と年フィールド(任意)を追加し、演算子 `?`、`L`、`W`、`#` を備えています。Java アプリには便利ですが、Linux cron には移植できません。
AWS EventBridge
`?` を使う 6 フィールド Quartz 形式片方だけが制限されている場合、`*` ではなく `?`(Quartz 規約)を日または曜日に使う必要があります。式は Linux cron にそのまま移植できません。
Kubernetes CronJob
5 フィールド POSIX + timeZone フィールドPOSIX 5 フィールドのスケジュールに `spec.timeZone` フィールド(1.27 以降)を追加。kubelet のホストタイムゾーンに依存するよりずっとクリーン。式は Linux cron からそのまま移植可能。
GitHub Actions
5 フィールド POSIX常に UTC で実行されます。タイミングはベストエフォート — 高負荷時にはスキップされる可能性があります。15 分未満の間隔は避けましょう。式は Linux cron からそのまま移植可能。
cron 式の例
15 分ごと
*/15 * * * *
ステップ演算子: 分フィールドの `*/15` は「分 0 から始めて 15 分ごと」を意味し、毎日毎時の :00、:15、:30、:45 に実行されます。API のポーリング、キャッシュ更新、ハートビートチェックで最も一般的な間隔です。
平日の 9:00
0 9 * * 1-5
曜日フィールドの範囲 `1-5` は月曜から金曜を意味します(1=月、5=金)。きっかり 09:00 に実行されます — 業務時間レポート、夜間データに依存するバッチジョブ、デイリースタンドアップの通知などに便利です。
毎月 1 日の真夜中
0 0 1 * *
日フィールドが `1`、下位フィールドはすべて 0。月次請求、ログローテーション、月末締めなどで一般的です。日と曜日が両方制限されるのは「どちらも `*` でない」ときだけ — ここでは曜日が `*` なので日フィールドのみが効きます。
平日の 9:00〜17:00 の間、5 分ごと
*/5 9-17 * * 1-5
別々のフィールドでステップ(`*/5`)と範囲(`9-17`)を組み合わせた例です。業務時間限定のモニタリングやキュー処理に有用。合計: 12 回/時 × 9 時間 × 5 日 = 1 週間あたり 540 回。
四半期実行: 1/4/7/10 月の 1 日 0:00
0 0 1 JAN,APR,JUL,OCT *
カンマ区切りで月名を列挙しています。決算、コードフリーズレビュー、コンプライアンス監査などの四半期スケジュールに。名前と数字の混在(`1,APR,7,10`)も同じ意味でパースされますが、可読性のためにどちらか片方に統一しましょう。
POSIX の OR 罠: 毎月 1 日 OR 毎週金曜日
0 0 1 * 5
日(`1`)と曜日(`5`)の両方が制限されている場合、POSIX cron はどちらか一方にマッチすれば実行します。したがってこの式は毎月 1 日と毎週金曜日の両方で発火 — 1 日が金曜日のときだけではありません。これは cron で最も頻発するハマりどころで、次回実行プレビューが一目で気付かせてくれます。
毎日 02:30(低トラフィック帯)
30 2 * * *
時と分は具体値、他はワイルドカードという形です。02:00〜04:00 UTC の枠は、主要な業務リージョンの稼働時間と重ならないため、夜間バッチの事実上の定番です。UTC タイムゾーン切り替えと組み合わせ、想定通りの時刻に発火するかを確認しましょう。
マクロ相当: @daily
@daily
`@daily` ショートカット(`@midnight` も同義)は `0 0 * * *` に展開され、毎日真夜中に実行されます。その他のマクロ: `@yearly` = `0 0 1 1 *`、`@monthly` = `0 0 1 * *`、`@weekly` = `0 0 * * 0`、`@hourly` = `0 * * * *`。マクロは簡潔ですが、5 フィールド形式の方がスケジューラ間の互換性が高くなります(マクロをサポートしないスケジューラもあるため)。
cron 式の組み立て方
- 1
cron 式を入力または貼り付け
上部の入力欄に 5 フィールドの cron 式を入力します(例: `*/15 * * * *`)。入力に応じてツールがパースと検証を行います — 有効なら緑のチェック、無効ならフィールド名付きの赤いエラーが表示されます。`@daily` や `@hourly` などのマクロも受け付けます。
- 2
または 5 つのフィールド入力を調整
フィールドの順序を覚える必要はありません — ラベル付きの入力欄で Minute、Hour、Day-of-month、Month、Day-of-week を個別に編集できます。上部の完全な式は自動的に更新されます。ワイルドカードには `*`、ステップには `*/N`、範囲には `a-b`、リストには `1,3,5` を使いましょう。
- 3
プリセットで一気に土台作成
任意のプリセットチップ(15 分ごと、平日 9:00 など)をタップして一般的なスケジュールを読み込み、フィールドを微調整して要件に合わせます。本番で実際に使うパターンを 11 種類のプリセットがカバーします。
- 4
次回実行プレビューで確認
今後 5 回の実行日時を確認しましょう — Local と UTC を切り替えてスケジュールが意図通りに発火するか確かめます。これが POSIX の日 / 曜日 OR の罠を本番で噛まれる前に見抜く、最も確実な方法です。
- 5
コピーしてスケジューラに貼り付け
Copy をクリックして式を取得します。crontab、systemd timer、GitHub Actions の `cron:`、AWS EventBridge、Kubernetes CronJob の `schedule`、その他 cron 互換スケジューラに貼り付けましょう。対象スケジューラのタイムゾーン確認も忘れずに — 詳しくは下の Best Practices セクションを参照してください。
cron でよくあるミス
POSIX OR の罠: 両方の日フィールドを制限
日と曜日の両方が制限されている場合、POSIX cron はどちらか一方にマッチすればジョブを実行します — 両方ではありません。したがって `0 0 1 * 5` は毎月 1 日と毎週金曜日の両方で発火し、1 日に当たる金曜日だけではありません。単一条件にしたい場合は、2 つの日フィールドのどちらかに `*` を使うか、AND チェックを行うラッパースクリプトを書きましょう。
# 意図: 「毎月の第 1 金曜日」 0 0 1-7 * 5 # 実際: 毎月 1〜7 日 OR 毎週金曜日に発火 — 両方の条件
# 本物の AND セマンティクスはラッパーで 0 0 * * 5 [ $(date +\%d) -le 7 ] && /your-script # あるいは片方の条件を捨てて緩いスケジュールを許容する
開発環境と本番環境のタイムゾーンずれ
Linux サーバーの cron スケジュールは、書き手のローカルタイムゾーンではなくシステムタイムゾーンを使います。UTC 設定のサーバー上で 9:00 の cron は、US East では 4:00 に発火します。スケジュールは常に対象サーバーのタイムゾーン — できれば UTC — で設計し、crontab の先頭で `CRON_TZ=...` を使ってタイムゾーンを明示的に固定しましょう。
# US East の開発者が書いて UTC サーバーにデプロイ 0 9 * * * /your-report.sh # UTC 9:00 = US East 4:00 に発火 — 開発者の意図とは違う
# タイムゾーンを固定するか、UTC で明示的に記述 CRON_TZ=America/New_York 0 9 * * * /your-report.sh
ステップ演算子の混同: '*/15' と '15'
分の `*/15` は「0 から始めて 15 分ごと」(つまり 0、15、30、45)を意味します。単なる `15` は「分 15 のみ」 — 毎時 1 回の実行です。初学者は「15 分ごと」のつもりで `15` と書いてしまいがちですが、本ツールの自然言語の説明を見ればデプロイ前にミスが明らかになります。
# 意図: 15 分ごと 15 * * * * # 実際: 毎時 1 回、分 15 のみ(意図より 4 回/時 少ない)
# 正解 */15 * * * * # 15 分ごと: 毎時の分 0、15、30、45
POSIX スケジューラ上での 6 フィールド式
Quartz/Spring/node-cron は先頭位置に任意の秒フィールドをサポートします。Linux crontab、GitHub Actions、AWS EventBridge(ほぼ)、Kubernetes CronJob はサポートしていません — 5 フィールドを期待します。6 フィールド式を貼り付けるとスケジュールがサイレントに壊れます: 秒が分、分が時、というように解釈されます。
# Linux crontab にコピーされた Quartz の 6 フィールド 0 0 9 * * 1-5 # Linux の解釈: 分=0、時=0、日=9、月=*、曜日=1-5 # = 平日にマッチする月の 9 日 0:00 — カオス
# POSIX 5 フィールド、秒を落とす 0 9 * * 1-5 # = 平日 9:00
月に対して範囲外の日
cron は日を実際の月に対して検証しません。`0 0 31 2 *`(2 月 31 日)はパースが通りますが、2 月は最大 29 日までしかないため決してマッチしません。初学者はパーサーがこれを検出してくれると考えますが、しません。本ツールの次回実行プレビューは、式が構文的には有効でも論理的に不可能な場合に「今後 4 年間に実行予定はありません」と表示します。
# 2 月 30 日や 31 日 — 永遠に動かない 0 0 30 2 * 0 0 31 2 * # パースは通るがスケジュールは発火しない
# 「2 月の最後の平日」パターンはスクリプトで 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /your-script
Quartz 構文を POSIX と混同
AWS のドキュメント、Spring のチュートリアル、Stack Overflow の多くの回答は `?`、`L`、`W`、`#` を含む Quartz の cron 式を載せています。これらは Linux crontab では動きません。曜日スロットに `?` を含む 6 フィールド式をコピーすると、Linux のパーサーはそれを拒否します(あるいはもっと悪いことに、サイレントに誤解釈します)。本ツールは Quartz 演算子を検出して違いを説明します。
# Quartz: 「月の最後の金曜日」 — POSIX では無効 0 0 ? * 6L *
# POSIX で「最後の金曜日」はラッパースクリプト方式 0 0 25-31 * 5 /your-script # 任意の月の 25〜31 日の金曜日に実行
代表的なユースケース
- Linux crontab ジョブ
- `/etc/crontab`、`/etc/cron.d/*`、ユーザー個別の `crontab -e` ファイル用エントリを構築・検証できます。保存前に次回実行プレビューで、サーバー設定のタイムゾーンにおける正しい時刻にスケジュールが収まることを確認しましょう。
- Kubernetes CronJob のスケジュール
- Kubernetes CronJob の `spec.schedule` フィールドを生成します。Kubernetes 1.27 以降は `spec.timeZone` もサポート — UTC 切り替えで UTC ベースにスケジュールを設計し、`timeZone` を明示的に設定してワーカーノードのローカル時間に左右されないようにしましょう。
- GitHub Actions のスケジュールワークフロー
- `on.schedule` 配下の `cron:` エントリを構築します。GitHub Actions は常に UTC で動作 — プレビューを UTC に切り替えてスケジュールを確認しましょう。15 分未満の間隔は避けてください。GitHub のスケジューラは負荷時に短間隔ジョブをスキップします。
- AWS EventBridge のルール
- EventBridge のスケジュールルール向けに cron 式を構成します。注意点: AWS は曜日に `?` を使う Quartz スタイルの 6 フィールド構文を採用 — 本ツールが出力する POSIX 5 フィールドに対し、先頭に秒(`0`)を付け、2 つの日フィールドのいずれかの `*` を `?` に置き換えて変換する必要があります。
- GitLab CI のスケジュールパイプライン
- GitLab のスケジュール CI パイプライン用の cron 式を検証できます。GitLab は本ツールが出力するのと同じ POSIX 5 フィールド構文と UI 日付ピッカーを使いますが、cron 形式の方が非標準な間隔を細かく制御できます。
- Cloudflare Workers の Cron Triggers
- `wrangler.toml` 内の `[triggers.crons]` エントリを構築します。Cloudflare は POSIX 5 フィールド構文を採用。最小間隔は 1 分、ワーカーは UTC で実行されます。プレビューで想定時間内にトリガーが発火することを確認しましょう。
- Node.js node-cron のスケジュール
- `node-cron` ライブラリ向けに式を構築します。5 フィールド POSIX と先頭の任意秒フィールドの両方に対応しています。1 分未満の精度が特に必要でなければ 5 フィールドにとどめましょう — 6 フィールド式は Linux crontab に移植できません。
- コードレビューとドキュメント
- PR や Runbook の cron 式を貼り付けるだけで意味が即座に分かります — `30 7 * * 1-5` の解釈に頭を悩ませたり、リファレンスカードを取り出したりする必要はもうありません。自然言語による説明はインラインコメントや README にも最適です。
cron 構文リファレンス
- フィールド順: M H D M W
- 分(0-59)、時(0-23)、日(1-31)、月(1-12)、曜日(0-6、7 も日曜日)。語呂合わせ: 「My Hat Doesn't Match Wendy's」。曜日フィールドは数値(0-6)と名前(SUN-SAT、大文字小文字を区別しない)の両方を受け付けます。
- 演算子
- `*` = 任意の値、`,` = リスト区切り(`1,3,5`)、`-` = 範囲(`1-5`)、`/` = ステップ(`*/15`、`5/10`)、名前: 月の JAN-DEC、曜日の SUN-SAT(大文字小文字を区別しない)。
- マクロ(エイリアス)
- `@yearly` = `0 0 1 1 *`、`@annually` = `0 0 1 1 *`、`@monthly` = `0 0 1 * *`、`@weekly` = `0 0 * * 0`、`@daily` = `0 0 * * *`、`@midnight` = `0 0 * * *`、`@hourly` = `0 * * * *`。`@reboot` は特殊な非スケジュール(起動時のみ実行)であり、本ツールでは説明付きのエラーで拒否されます。
- POSIX 日のセマンティクス(OR ルール)
- 日と曜日の両方が制限されている場合(いずれも `*` でない場合)、どちらか一方にマッチすればスケジュールが実行されます — OR セマンティクスです。片方だけが制限されている場合は、そのフィールドが決定権を持ちます。両方とも `*` の場合はすべての日にマッチします。この OR ルールは vixie cron、BSD cron、大半の POSIX 実装に適用されます。Quartz は AND と OR を区別するために `?` を使います。
- 6 フィールドモード(Quartz-Lite)
- 入力に 6 つの空白区切りトークンがある場合、ツールは最初を秒フィールド(0-59)として扱います。Quartz、Spring `@Scheduled(cron=...)`、node-cron で便利です。Linux crontab や POSIX スケジューラには移植できません — それらは秒を分として扱い、すべてを 1 つずつズラして解釈します。
- ステップ演算子のアンカリング
- `*/N` はフィールドの最小値にアンカリングされます: 分の `*/15` は `0,15,30,45` であり、「今から 15 ごと」ではありません。非ワイルドカードのベースを使う場合: 分の `5/15` は `5,20,35,50`。フィールド範囲を割り切れないステップ値は折り返し付近でスキップしますが、これはバグではなく正しい挙動です。
- バリデーション境界
- 分 ∈ [0,59]、時 ∈ [0,23]、日 ∈ [1,31]、月 ∈ [1,12]、曜日 ∈ [0,7]。範囲外の値はフィールド単位のエラーになります。日は月との整合性は検証されません(`0 0 31 2 *` はパースが通るものの、2 月には 31 日がないため決して発火しません — 次回実行プレビューは「今後 4 年間に実行予定はありません」と表示します)。
- Quartz 演算子は拒否
- POSIX cron は Quartz の `?`(特定値なし)、`L`(last)、`W`(最も近い平日)、`#`(n 番目の曜日)をサポートしていません。本ツールは無効な POSIX としてサイレントにパースするのではなく、「Quartz operators not supported」と明確にメッセージで拒否します。Quartz スケジュールには Quartz 対応ツールか Spring スケジューラを使ってください。
- 次回実行検索の年上限
- 次回実行の計算は最大 4 年先まで検索します。それより低頻度(例: 「2 月 29 日」パターン)の式は「今後 4 年間に実行予定はありません」と表示されます。不可能なパターンでの無限ループを避けるため意図的な仕様です。
cron スケジュールのベストプラクティス
- サーバーは UTC で運用し、表示時にローカルへ変換
- サーバーを UTC に設定し(`/etc/timezone` または `TZ=UTC`)、cron 式もすべて UTC で記述しましょう。ダッシュボードやレポートで表示するときだけローカル時間に変換します。これにより、夏時間切り替え時にローカル時間のスケジュールが二重発火・スキップするような、典型的なタイムゾーンバグを一掃できます。本ツールの UTC 切り替えを使い、最初から UTC でスケジュールを設計しましょう。
- POSIX の日 / 曜日 OR の罠を避ける
- OR セマンティクスを望まない限り、日と曜日の両方を制限しないでください。「1 月の毎週月曜日」が欲しいなら `0 0 * 1 1`(日は `*`)と書き、「毎月 1 日」が欲しいなら `0 0 1 * *`(曜日は `*`)と書きます。POSIX の OR ルールでは `0 0 1 * 1` は毎月 1 日と毎週月曜日の両方で実行されるため、ほぼ確実に意図と異なります。デプロイ前に次回実行プレビューを確認すればこの誤りを検出できます。
- スケジュールのタイムゾーンを明示的に固定
- モダンなスケジューラはスケジュール定義内でタイムゾーンを固定できます: crontab 先頭の `CRON_TZ=America/New_York`(vixie cron 3.0 以降)、Kubernetes CronJobs 1.27 以降の `spec.timeZone: "America/New_York"`、AWS EventBridge Scheduler の `ScheduleExpressionTimezone` を含むスケジュール式など。サーバーのデフォルトに頼らずタイムゾーンを明示的に固定しましょう — サーバーのタイムゾーンはインフラ移行時に予告なく変わることがあります。
- 負荷を :00 ではなく複数の分に分散
- 重要度の低いジョブで `0 * * * *`(毎時 0 分)を多用するのは避けましょう — 規模が大きくなると、ちょうど :00 にスケジュールされた多数のジョブで負荷スパイクが発生します。各ジョブにランダムな分オフセット(`23 * * * *`、`41 * * * *`)を割り当てて負荷を分散します。日次ジョブも同様で、多くのジョブが 3:00 に集中する場合、`0 3 * * *` よりも `30 3 * * *` の方がデータベースに優しい設計です。
- ジョブを冪等にする
- cron にはリトライも重複防止も取りこぼしリカバリもありません。ジョブは何度実行しても安全(冪等)で、自己チェック可能であるべきです。「9 時にレポート送信」ではなく「今日のレポートが未送信なら送信する」と設計しましょう — ダウンタイム、誤った二重スケジュール、並行実行のいずれからも自己回復します。冪等性はスケジューラではなくジョブの性質であり、最も重要な信頼性プラクティスです。
- 重要なスケジュールにはハートビートを追加
- cron のサイレント失敗は最大の弱点です — スケジュールが発火しなくても誰も気付きません。重要なジョブには、実行終了時にハートビートサービス(Healthchecks.io、Cronitor、Dead Man's Snitch など)へ ping させ、想定の ping が届かないときにアラートしてもらいましょう。これでジョブの失敗もスケジュール自体の不発も検出できます。無料枠で個人や小規模チームの大半のニーズをカバーできます。
- リリース前に次回実行プレビューで検証
- 新しい cron スケジュールをデプロイする前に、本ツールのプレビューで今後 5 回の実行日時を確認しましょう。Local と UTC を切り替えます。意図通りの時刻に発火するか — 5 分早すぎないか、間違った日でないか、大事にしていた週末をスキップしていないかを確認します。プレビューは最も安価な本番テストです。
よくある質問
このツールは何ができますか?
cron 式とは何ですか?
入力データはどこかにアップロードされますか?
POSIX cron と Quartz の違いは?
なぜ '0 0 1 * 5' は毎週金曜日 AND 毎月 1 日に実行されるのですか?
30 秒ごとにジョブを実行するには?
cron はどのタイムゾーンを使いますか?
'*/15' は実際どのように展開されますか?
秒フィールド付きの 6 フィールド式は使えますか?
cron で表現できる最大間隔は?
ダウンタイム後に取りこぼした実行はどう扱う?
GitHub Actions の cron が時間通りに動かないのはなぜ?
関連ツール
すべてのツールを見る →Unixタイムスタンプ & エポック変換 — マルチ精度
日付/時刻ツール
無料オンラインUnixタイムスタンプ変換ツール。秒・ミリ秒・マイクロ秒を自動検出し、UTC・ローカル時刻・ISO 8601・相対時間に即座に変換。リアルタイムEpochクロック搭載。登録不要、100%ブラウザ処理でプライバシーも安心。
進数変換ツール — 2進数・16進数・10進数・8進数
単位変換
無料オンライン進数変換ツール。2進数、8進数、10進数、16進数および任意の基数(2-36)間で数値を瞬時に変換。BigInt対応で桁数制限なし。登録不要・サーバー送信なし、すべての処理がブラウザ内で完結。コピーボタンやコードリテラル出力で開発作業を効率化。
Base64エンコーダー&デコーダー
エンコーディングとフォーマット
Base64のデコード・エンコードが無料でオンラインで行えます。リアルタイム変換、UTF-8・絵文字対応。100%ブラウザ上で動作しデータは外部に送信されません。登録不要。
CSV to JSON 変換ツール
エンコーディングとフォーマット
CSVをブラウザ内で即座にJSONに変換。RFC 4180・型推論・ヘッダー行・大整数安全対応。100%プライベート、アップロード不要。
JPEG・PNG・WebP をオンラインで圧縮 — 無料・一括対応
単位変換
無料オンライン画像圧縮ツール。JPEG、PNG、WebP 画像をブラウザ上で最大 80% 縮小。サーバーへのアップロード不要で完全プライベート。最大 20 枚の一括圧縮、品質調整、圧縮前後の比較機能を搭載。登録不要ですぐに使えます。
JSON Diff(差分)
エンコーディングとフォーマット
2つのJSONファイルをブラウザで即座に比較・差分確認。サイドバイサイドのハイライト表示、RFC 6902 JSON Patch出力、タイムスタンプやIDなどのノイズフィールドを無視。100%プライベート、アップロード不要。