cron式の書き方を完全解説 — 毎日・毎時・毎週のパターンを網羅【2026年版】
cronの書き方をゼロから解説。毎日・毎時・毎週月曜・月末などよく使うパターンを表で網羅。crontab設定手順からGitHub Actions・Cloud Schedulerでの使い方まで実践的に紹介します。
cron式とは? — タスク自動実行のスケジュールを定義する記法
「毎日深夜3時にバックアップを実行したいけど、cron式の書き方がよく分からない…」 そんな悩みを解決します。この記事を読めば、どんなスケジュールでも自信を持ってcron式を書けるようになります。
cron(クロン)は、Unix系OSに標準搭載されているタスクスケジューラです。Dockerコンテナ内でのcron設定については「Docker Compose入門」も参考になります。cron式はそのスケジュールを「5つのフィールド」で表現する記法で、サーバー管理だけでなく、GitHub Actions や Cloud Scheduler など、さまざまなサービスで使われています。
cron式の基本構文
┌───────────── 分(0-59)
│ ┌───────────── 時(0-23)
│ │ ┌───────────── 日(1-31)
│ │ │ ┌───────────── 月(1-12)
│ │ │ │ ┌───────────── 曜日(0-7, 0と7は日曜)
│ │ │ │ │
* * * * * コマンド
各フィールドの値の範囲
| フィールド | 範囲 | 特殊文字 |
|---|---|---|
| 分 | 0〜59 | * , - / |
| 時 | 0〜23 | * , - / |
| 日 | 1〜31 | * , - / |
| 月 | 1〜12 | * , - / |
| 曜日 | 0〜7(0, 7 = 日曜) | * , - / |
特殊文字の意味と使い方
cron式では4種類の特殊文字を使ってスケジュールを柔軟に指定できます。
アスタリスク(*)— すべての値
そのフィールドのすべての値にマッチします。
# 毎分実行
* * * * * /path/to/script.sh
カンマ(,)— 複数の値を指定
# 毎日 9時と18時に実行
0 9,18 * * * /path/to/script.sh
ハイフン(-)— 範囲を指定
# 平日(月〜金)の9時に実行
0 9 * * 1-5 /path/to/script.sh
スラッシュ(/)— 間隔を指定
# 5分ごとに実行
*/5 * * * * /path/to/script.sh
# 2時間ごとに実行
0 */2 * * * /path/to/script.sh
よく使うcronパターン一覧
実務で頻繁に使うcron式をまとめました。コピペしてすぐ使えます。
基本パターン
| スケジュール | cron式 | 説明 |
|---|---|---|
| 毎分 | * * * * * | テスト用、本番では非推奨 |
| 毎時0分 | 0 * * * * | 1時間ごとに実行 |
| 毎日0時 | 0 0 * * * | 日次バッチ処理 |
| 毎日3時 | 0 3 * * * | 深夜バックアップ |
| 毎日9時と21時 | 0 9,21 * * * | 1日2回実行 |
曜日パターン
| スケジュール | cron式 | 説明 |
|---|---|---|
| 毎週月曜9時 | 0 9 * * 1 | 週次レポート |
| 毎週金曜18時 | 0 18 * * 5 | 週末前の通知 |
| 平日9時 | 0 9 * * 1-5 | 営業日の日次タスク |
| 土日10時 | 0 10 * * 0,6 | 休日のみ実行 |
月次・年次パターン
| スケジュール | cron式 | 説明 |
|---|---|---|
| 毎月1日0時 | 0 0 1 * * | 月次バッチ |
| 毎月15日12時 | 0 12 15 * * | 給与計算など |
| 毎月最終日 | 0 0 28-31 * * ※ | 後述の注意あり |
| 毎年1月1日0時 | 0 0 1 1 * | 年次処理 |
| 四半期初日 | 0 0 1 1,4,7,10 * | 四半期処理 |
間隔パターン
| スケジュール | cron式 | 説明 |
|---|---|---|
| 5分ごと | */5 * * * * | ヘルスチェック |
| 10分ごと | */10 * * * * | データ同期 |
| 15分ごと | */15 * * * * | キャッシュ更新 |
| 30分ごと | */30 * * * * | メール送信キュー |
| 2時間ごと | 0 */2 * * * | ログ収集 |
| 6時間ごと | 0 */6 * * * | SSL証明書チェック |
⚠️ 注意:「月末」の指定 標準のcron式には「月末」を直接指定する方法がありません。
28-31で指定すると、2月は28日(閏年は29日)に実行されますが、31日がない月でも31日を指定した行は単にスキップされます。正確な月末処理が必要な場合は、スクリプト内で日付チェックを行いましょう。
crontab の基本操作
crontabコマンド一覧
# 現在のcrontabを表示
crontab -l
# crontabを編集
crontab -e
# crontabを削除(注意!全件削除)
crontab -r
# 別ユーザーのcrontabを表示(root権限が必要)
sudo crontab -u username -l
crontabファイルの書き方
# crontab の例
# 環境変数の設定
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com
# 毎日3時にバックアップ
0 3 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
# 毎時0分にヘルスチェック
0 * * * * /home/user/scripts/healthcheck.sh >> /var/log/health.log 2>&1
# 平日9時にレポート生成
0 9 * * 1-5 /home/user/scripts/report.sh
crontabの書き方のポイント
- 出力のリダイレクト:
>> /var/log/xxx.log 2>&1でログを残す - MAILTO: メール通知先を設定(空にすると通知なし)
- PATH: cron環境ではPATHが限定されるため、明示的に指定する
- フルパス: コマンドやスクリプトはフルパスで記述する
GitHub Actions での cron スケジュール
GitHub Actions では schedule トリガーでcron式を使えます。GitHub Actionsの基本的な使い方は「GitHub Actions入門ガイド」で解説しています。
基本的な設定例
# .github/workflows/scheduled-task.yml
name: Scheduled Task
on:
schedule:
# 毎日UTC 0時 = JST 9時に実行
- cron: '0 0 * * *'
jobs:
run-task:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run script
run: |
echo "Scheduled task running at $(date)"
./scripts/daily-task.sh
GitHub Actions でのcron注意点
| 注意点 | 詳細 |
|---|---|
| タイムゾーン | UTC固定。JSTはUTC+9なので、JST 9時 = UTC 0時 |
| 実行遅延 | 負荷状況により最大15分程度の遅延が発生する場合がある |
| 最短間隔 | 5分ごとが最短(*/5 * * * *) |
| 非アクティブリポジトリ | 60日間アクティビティがないと自動停止される |
JSTとUTCの変換表
# JSTからUTCへの変換(JST - 9時間 = UTC)
# JST 0:00 → UTC 15:00 (前日)
# JST 3:00 → UTC 18:00 (前日)
# JST 9:00 → UTC 0:00
# JST 12:00 → UTC 3:00
# JST 18:00 → UTC 9:00
# JST 21:00 → UTC 12:00
# よく使うJST時刻でのGitHub Actions cron設定
on:
schedule:
# JST 毎日9時
- cron: '0 0 * * *'
# JST 毎日0時(深夜)
- cron: '0 15 * * *'
# JST 平日9時
- cron: '0 0 * * 1-5'
Google Cloud Scheduler での cron
Google Cloud Scheduler は、タイムゾーンを直接指定できるのが大きなメリットです。
基本的な使い方
# Cloud Schedulerジョブの作成
gcloud scheduler jobs create http my-daily-job \
--schedule="0 9 * * *" \
--time-zone="Asia/Tokyo" \
--uri="https://my-api.example.com/daily-task" \
--http-method=POST \
--location=asia-northeast1
Cloud Scheduler の特徴
- タイムゾーン指定可能:
Asia/TokyoなどIANAタイムゾーンで指定 - リトライ設定: 失敗時の再試行を細かく設定可能
- HTTP / Pub/Sub / App Engine: 複数のターゲットタイプに対応
- 最短間隔: 1分ごとが最短
# Pub/Subトピックへの発行
gcloud scheduler jobs create pubsub my-pubsub-job \
--schedule="*/10 * * * *" \
--time-zone="Asia/Tokyo" \
--topic=my-topic \
--message-body='{"action": "sync"}' \
--location=asia-northeast1
AWS EventBridge (CloudWatch Events) での cron
AWSでは EventBridge(旧 CloudWatch Events)でcron式を使いますが、書式が少し異なる点に注意が必要です。
AWS cron式の違い
AWS の cron式は 6フィールド(年を含む)で、曜日の指定方法も異なります。
┌───────────── 分(0-59)
│ ┌───────────── 時(0-23)
│ │ ┌───────────── 日(1-31)
│ │ │ ┌───────────── 月(1-12)
│ │ │ │ ┌───────────── 曜日(SUN-SAT または 1-7)
│ │ │ │ │ ┌───────────── 年(省略可)
│ │ │ │ │ │
* * * * * *
標準cronとAWS cronの比較
| 項目 | 標準cron | AWS cron |
|---|---|---|
| フィールド数 | 5 | 6(年を含む) |
| 曜日 | 0-7(0,7=日曜) | SUN-SAT または 1-7(1=日曜) |
? の使用 | 不可 | 日または曜日で必須 |
L の使用 | 不可 | 月末日を指定可能 |
# AWS EventBridgeでの例
# 毎日JST 9時(UTC 0時)
cron(0 0 * * ? *)
# 平日JST 9時
cron(0 0 ? * MON-FRI *)
# 毎月最終日のJST 0時
cron(0 15 L * ? *)
cron式のデバッグとトラブルシューティング
よくあるトラブルと対処法
| トラブル | 原因 | 対処法 |
|---|---|---|
| ジョブが実行されない | PATHが通っていない | crontab内でPATHを明示する |
| 実行されるが結果がおかしい | 環境変数が異なる | スクリプト内で明示的にexportする |
| メールが大量に来る | 出力をリダイレクトしていない | >> /dev/null 2>&1 を追加 |
| 意図しない時刻に実行される | タイムゾーンの認識違い | TZ 環境変数を確認 |
デバッグ用のログ確認
# cronのシステムログを確認(Ubuntu/Debian)
grep CRON /var/log/syslog
# CentOS/RHEL の場合
grep CRON /var/log/cron
# macOS の場合
log show --predicate 'process == "cron"' --last 1h
スクリプトの動作確認テスプ
# cron環境を再現してテスト
env -i HOME=$HOME SHELL=/bin/bash PATH=/usr/bin:/bin /path/to/script.sh
# 実行権限の確認
ls -la /path/to/script.sh
chmod +x /path/to/script.sh
ToolCraft Lab の Cron ジェネレーター
cron式を手で書くのが不安な方は、当サイトの Cron ジェネレーター をご活用ください。
主な機能
- ビジュアルUI: 「毎日」「毎時」「毎週」などをクリックで選ぶだけ
- リアルタイムプレビュー: 次の実行日時を5件表示
- マルチフォーマット対応: 標準cron、GitHub Actions、AWS EventBridge の書式を自動変換
- コピーボタン: ワンクリックでクリップボードにコピー
ぜひ Cronジェネレーター をお試しください。
まとめ — cron式は5つのフィールドを覚えれば怖くない
cron式の基本は「分・時・日・月・曜日」の5フィールドです。この記事で紹介したパターン表をブックマークしておけば、ほとんどのスケジュール設定に対応できます。
| 覚えておくべきポイント |
|---|
基本は5フィールド: 分 時 日 月 曜日 |
* はすべて、/ は間隔、, は複数、- は範囲 |
| GitHub Actions は UTC 固定(JST - 9時間) |
| AWS EventBridge は6フィールドで書式が異なる |
| 月末指定はスクリプト内で判定するのが確実 |
より複雑なワークフロースケジューリングが必要な場合は「n8n自動化ガイド」で紹介しているn8nも選択肢になります。cron式の作成に迷ったら、当サイトの Cronジェネレーター で簡単に生成できます。ビジュアルUIで直感的に操作でき、各プラットフォーム向けの書式に自動変換されるので、コピペするだけで使えます。