サーバサイドプログラムを書いていると、定期的に実行させたい処理が出てくるかと思います。
3時のOYATSU で言うと、新商品のデータを毎日更新しています。
(別の話になりますが、毎回全お菓子データから発売日をもとに新商品を取得していると負荷がかかるので、新商品はキャッシュデータとして持っています。)
サーバサイドのフレームワークに Laravel を使っているので、今回は Laravel でのバッチ処理の作成方法を備忘録を兼ねて書きたいと思います。
(普通に PHP のスクリプトを実行するだけならただの PHP ファイルを cron すればいいですが、クエリビルダなど Laravel の機能を使いたいために、あえて Laravel のコマンドとして作成しています…が、サーバサイドに関しては素人なのでおかしな点あったら指摘していただけると嬉しいです。)
サーバの環境は下記になります。
PHP: 7.1.5
Laravel: 5.6.27
まず、Laravel ではおなじみの artisan でコマンド用のファイルを作成します。
% php artisan make:command HogeCommand
すると、app/Console/Commands ディレクトリに HogeCommand.php というファイルが作成されます。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class HogeCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:hogeCommand'; // ←コマンド名
/**
* The console command description.
*
* @var string
*/
protected $description = 'hogehoge'; // ←コマンドの説明
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// ここに処理内容
}
}
$signature はコマンド名になり、ここでの記述が呼び出し時に使われます。
$description は書かなくても問題ありませんが、次に説明するコマンド一覧で表示されます。
handle() 内には、実際の処理内容を書いていきます。
下記を実行すると、作成したコマンドファイルを確認することができます。
% php artisan list command
ㅤcommand:hogeCommand hogehoge
実行は下記のようにして行います。
% php artisan command:hogeCommand
あとはこれを cron などに登録すればOKです。
※この記事の内容は https://3jino-oyatsu.com/blog/56/ からお引越ししたものです