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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 時間ベースのスケジューリング
- robfig/cronライブラリ
- 間隔処理用のTicker
- ジョブのグレースフルシャットダウン