こんにちは〜たきゃはしです〜。
Laravel Advent Calendar 2014 - Qiita
8日目ですよ〜!
Laravel5になってコマンドの登録方法が変わったこと、それからスケジュールという新しく追加された機能について紹介していきたいと思います。現在(2014/12/08)まだLaravel5は開発中のため機能が変更される可能性もございます。予めご了承ください。
Laravel5(開発版)のインストール
~/Sites/test/php/laravel5 composer create-project laravel/laravel laravel5 dev-develop --prefer-dist
laravel5 というディレクトリに展開します。
コマンド生成
~/Sites/test/php/laravel5 php artisan make:console ClockCommand --command="clock"
Console command created successfully.
コマンド編集
app/Console/Commands/ClockCommand.php
public function fire()
{
echo date('Y-m-d H:i:s'); // 追加
}
※ 自動生成される getArguments() メソッドはコマンドの引数を取る必要があったので削除しました。
コマンド登録
app/Console/Kernel.php
protected $commands = [
'App\Console\Commands\InspireCommand',
'App\Console\Commands\ClockCommand' // 追加
];
コマンド実行
~/Sites/test/php/laravel5 artisan clock
2014-12-08 02:31:57%
日時を出力するだけのコマンドですが登録することができました。
Laravel4よりも簡単に追加できるようになっています。
続いて新しく追加されたスケジュール機能(schedule:run)について紹介していきます。
機能を使用するために下記のような1行をcronジョブに追加しておきます。
唯一のジョブ登録
~/Sites/test/php/laravel5 crontab -e
*/1 * * * * php ~/Sites/test/php/laravel5/artisan schedule:run
次に先程作成したclockコマンドをスケジュールに登録します。
スケジュール登録
app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')
->hourly();
// 追加
$schedule->command('clock')
->cron('*/5 * * * * *')
->sendOutputTo('~/tmp/clock.log');
}
スケジュールの登録については、Kernel.phpで定義されている schesule(Schedule $schedule) を実装するだけでOKです。
また上記で実行している cron('/2 * * * * ') というのは everyFiveMinutes() で置き換えることもできます。
他にも便利なメソッドがたくさんありますので、詳しくは Illuminate\Console\Scheduling\Event をご覧ください。
参考
- http://mattstauffer.co/blog/laravel-5.0-event-scheduling
- https://github.com/laravel/framework/blob/master/src/Illuminate/Console/Scheduling/Event.php#L491
まとめ
スケジュール機能の嬉しいところは、今までcronというスコープ外に置いていた様々なジョブをアプリケーションの一部として管理できることだと思います。またジョブの確認についてもcronだとユーザーごとにバラけていたりしますが、スケジュール機能ならソースを読むだけでジョブを一望できるため便利だなぁと思います。
L5では新機能や改善点、特に構造的に自由度が上がっている点(は一長一短ではあると思います)が楽しみだなぁと思っています。とにかく正式なリリースが待ち遠しいです!!
9日は shin1x1 さんです。よろしくお願いします。