Oh MyUtils

Cron式パーサー&ビルダー - Crontab Guru代替ツール

Cron式をビジュアルに解析、説明、構築。次回実行時間の確認、人間が読める説明、crontab構文の検証をオンラインで。

よくある質問

Cron式とは何ですか?

Cron式は、5-7個のフィールドで構成され、タスク実行のスケジュールを表す文字列です。元々Unix系システムでcronジョブのスケジューリングに使用されていたこの構文は、現在ではクラウドサービス(AWS、Azure、GCP)、CI/CDパイプライン、アプリケーションフレームワークで広く使用されています。各フィールドはタスクの実行タイミングを指定します:分、時、日、月、曜日。

このCronパーサーツールの使い方は?

入力フィールドにcron式を入力してください(例:0 9 * * 1-5)。ツールが即座に解析し、人間が読める説明と次の実行予定時刻を表示します。プリセットドロップダウンを使って一般的なスケジュールを素早く選択できます。Buildタブに切り替えると、各フィールドの値を選択して視覚的に式を作成できます。

私のCron式データは安全ですか?

はい。あなたのcron式は100%安全で、ブラウザの外に出ることはありません。すべての解析と計算はJavaScriptを使用してクライアント側で実行されます。データはサーバーに送信されないため、テストが必要なあらゆるスケジューリングパターンに対して安全に使用できます。

標準cron形式と拡張cron形式の違いは何ですか?

標準Unix cronは5つのフィールドを使用します:分、時、日、月、曜日。拡張形式は先頭に秒フィールドを追加し、合計6フィールドになります。Quartz(Java)などの一部のシステムは、年も含む7フィールド形式を使用します。このツールは標準5フィールドと拡張6フィールドの両方の形式をサポートしています。

なぜ日付フィールドが2つ(日と曜日)あるのですか?

どちらかまたは両方を指定できます。両方がワイルドカード以外の値で指定されている場合、どちらかの条件が満たされたときにジョブが実行されます(両方ではなく)。例えば、'0 9 15 * 1'は'毎月15日の午前9時または毎週月曜日の午前9時'を意味します — '15日が月曜日の場合の午前9時'ではありません。

'5分ごと'のcron式はどう作りますか?

*/5 * * * *を使用してください。/5は'5番目の値ごと'を意味します。同様に、*/15 * * * *は15分ごと、0 */2 * * *は2時間ごとの0分に実行されます。

Cronはどのタイムゾーンを使用しますか?

デフォルトでは、cronはシステムのローカルタイムゾーンを使用します。クラウドサービスでは、タイムゾーンを指定できることが多いです。このツールは次の実行時刻をブラウザのローカルタイムゾーンで表示します。

コード例

// Simple cron expression parser
function parseCronExpression(expression) {
  const parts = expression.trim().split(/\s+/);
  if (parts.length !== 5) {
    throw new Error('Invalid cron expression: expected 5 fields');
  }

  const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;

  function parseField(field, min, max) {
    if (field === '*') {
      return Array.from({ length: max - min + 1 }, (_, i) => min + i);
    }
    const values = new Set();
    field.split(',').forEach(part => {
      if (part.includes('/')) {
        const [range, step] = part.split('/');
        const stepNum = parseInt(step, 10);
        let start = min, end = max;
        if (range !== '*' && range.includes('-')) {
          [start, end] = range.split('-').map(Number);
        }
        for (let i = start; i <= end; i += stepNum) values.add(i);
      } else if (part.includes('-')) {
        const [start, end] = part.split('-').map(Number);
        for (let i = start; i <= end; i++) values.add(i);
      } else {
        values.add(parseInt(part, 10));
      }
    });
    return Array.from(values).sort((a, b) => a - b);
  }

  return {
    minute: parseField(minute, 0, 59),
    hour: parseField(hour, 0, 23),
    dayOfMonth: parseField(dayOfMonth, 1, 31),
    month: parseField(month, 1, 12),
    dayOfWeek: parseField(dayOfWeek, 0, 6),
  };
}

// Example usage
const expr = '0 9 * * 1-5';
console.log('Parsed:', parseCronExpression(expr));

関連ツール