0Pricing
Go Academy · レッスン

robfig/cronライブラリ

cron構文でスケジュールします

「robfig/cronライブラリ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

GoのCron式

robfig/cronライブラリを使うと、時刻の計算を自作する代わりに、一般的なcron構文でジョブをスケジュールできます。go get github.com/robfig/cron/v3でインストールします。

import "github.com/robfig/cron/v3"

Cron構文のおさらい

標準的なcron式には5つのフィールドがあります。

  • 分(0-59)
  • 時(0-23)
  • 日(1-31)
  • 月(1-12)
  • 曜日(0-6)

例:0 9 * * 1-5 = 平日の午前9時

スケジューラの作成

cron.New()はスケジューラを返します。ジョブを追加してから起動します。

c := cron.New()
c.Start()
defer c.Stop()

ジョブの追加

AddFuncは、スケジュールに従って実行する関数を登録します。エントリIDを返し、指定が無効な場合はエラーも返します。

id, err := c.AddFunc("30 * * * *", func() {
    fmt.Println("runs at minute 30")
})
if err != nil {
    log.Fatal(err)
}
_ = id

秒フィールド

robfig/cron v3では、デフォルトで5フィールドの指定(秒なし)を使用します。秒を含む6フィールドの指定を有効にするには、秒オプションを指定してcronを構築します。

c := cron.New(cron.WithSeconds())
c.AddFunc("*/5 * * * * *", func() { fmt.Println("every 5s") })

定義済みのスケジュール

便利なマクロが用意されています:

  • @hourly
  • @daily
  • @weekly
  • @every 1h30m
c.AddFunc("@every 1h30m", func() { fmt.Println("every 90 min") })
c.AddFunc("@daily", func() { fmt.Println("midnight") })

ジョブの削除

返されたEntryIDを使うと、ジョブを動的に削除できます。

id, _ := c.AddFunc("@hourly", task)
// later:
c.Remove(id)

ジョブはゴルーチンで実行されます

スケジュールされた各ジョブは、それぞれ独自のゴルーチンで実行されます。ジョブの実行が次のトリガーと重複する可能性がある場合は、並行実行に対する対策を行うか、重複する実行をスキップするラッパーを使用してください。

タイムゾーン

デフォルトでは、スケジュールにマシンのローカル時刻が使用されます。場所を渡して明示的に指定すると、夏時間による予期しない動作を避けられます。

loc, _ := time.LoadLocation("America/New_York")
c := cron.New(cron.WithLocation(loc))

実行せずに解析する

パーサーを使って仕様を検証したり、次回の実行時刻を計算したりできます。テストや、ユーザーへの次回実行時刻の表示に役立ちます。

sched, _ := cron.ParseStandard("0 9 * * 1-5")
next := sched.Next(time.Now())
fmt.Println("next run:", next)

実行可能: 次のCron実行時刻を計算(類似例)

robfig/cronは外部ライブラリです。この標準ライブラリのコード例では、「毎分、分の境界で実行する」という最も単純なcronルールを、次に一致する時刻を計算することでモデル化しています。

package main

import (
    "fmt"
    "time"
)

func nextRun(from time.Time) time.Time {
    return from.Truncate(time.Minute).Add(time.Minute)
}

func main() {
    now := time.Date(2026, 1, 1, 8, 15, 30, 0, time.UTC)
    fmt.Println("now:", now.Format("15:04:05"))
    fmt.Println("next:", nextRun(now).Format("15:04:05"))
}

理解度チェック

robfig/cronライブラリについての理解度を確認しましょう。

まとめ

robfig/cronライブラリについて学びました:

  • cron.New() + AddFunc(spec, fn) + Start()
  • デフォルトでは5フィールドの仕様で、WithSecondsを使うと秒フィールドが追加されます
  • @dailyや@everyなどのマクロを使うと、よく使うスケジュールを簡単に定義できます
  • Remove、場所、ParseStandardを使って制御やテストを行います

よくある質問

「robfig/cronライブラリ」レッスンは無料ですか?

はい。「robfig/cronライブラリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「robfig/cronライブラリ」で何を学びますか?

cron構文でスケジュールします ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「robfig/cronライブラリ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 時間ベースのスケジューリング
  2. robfig/cronライブラリ
  3. 間隔処理用のTicker
  4. ジョブのグレースフルシャットダウン
← Go Academyに戻る