Laravelのバッチ実装

Laravelを利用した開発におけるcron実行のバッチは、
スケジューラにコマンドを何時に実行する、というのをプログラムで追加していきます。
crontabに書くよりも圧倒的に管理しやすく分かりやすいというメリットがあります。

// 7時から22時の間、毎時で処理
$schedule->command('reminders:send')
                    ->hourly()
                    ->between('7:00', '22:00');
 
// アメリカのタイムゾーンで8時から17時の平日に毎時で処理
$schedule->command('foo')
          ->weekdays()
          ->hourly()
          ->timezone('America/Chicago')
          ->between('8:00', '17:00');

分かりやすいですね。

hourlyについて

ちょっと気になったので調べました。hourlyって毎時の何分に動くのか?

public function hourly()
    {
        return $this->cron('0 * * * * *');
    }

潜ってみると一目瞭然、毎時0分の設定のエイリアスでした。

で、じゃあ毎時xx分に動かすのってどうやるの?

Laravel5.3から ->hourlyAt(17);というメソッドが追加されてました。
これで毎時17分に実行されます。ちょっと実行時間をずらしたい時など重宝しそうですね。

dailyについて

dailyについても見たところ、
daily()は毎日0時0分のエイリアス( $this->cron('0 0 * * * *'); )でした。
dailyAt()は5.1以降で実装されているのですが、

 public function dailyAt($time)
    {
        $segments = explode(':', $time);
 
        return $this->spliceIntoPosition(2, (int) $segments[0])
                    ->spliceIntoPosition(1, count($segments) == 2 ? (int) $segments[1] : '0');
    }

時と分しか設定するものが無いんだから24時間表記で hh:ii にしろ、
コロンがない場合は時間に入力するぞ、とのことです。
‘8pm’ とか入力したくてもこれはいかんということですね。

以上、誰にも需要のない小ネタでした。

元記事はこちら

Laravelのスケジューラの小ネタ