#この記事について
laravel開発においてのバッチファイルの開発からユニットテストまでの備忘録としての記事になります。
#環境
PHP 8.0.1
Laravel 8.40.0
#目次
- バッチファイル作成
- コマンドファイルが作成されたら、プロパティのsignatureとdescriptionを名称を設定する
- コマンドファイルのhandle箇所に処理を入れる。
- コマンドのテストファイルを作成する。
- テストケースを作成しテストの実行を行う。
- スケジューラーの設定を行う。
##1. バッチファイル作成
-
コマンドファイル作成コマンド
$ php artisan make:command SampleCommand
作成されるディレクトリ:app/Console/Commands/SampleCommand.php
##2. コマンドファイルが作成されたら、プロパティのsignatureとdescriptionを名称を設定する。
-
signatureはコマンドを実行する際の名称となります。
「sample:create」と設定した場合、コマンドは 「php artisan sample:create」で実行できます。$ php artisan sample:create
-
descriptionはコマンドの名称を決定します。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class SampleCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'sample:create';
/**
* The console command description.
*
* @var string
*/
protected $description = 'サンプルコマンド';
※「php artisan list」でコマンドの一覧を確認できます。
route
route:cache Create a route cache file for faster route registration
route:clear Remove the route cache file
route:list List all registered routes
salt
salt:generate Set the hash salt for trait SearchEncrypted
sample
sample:create サンプルコマンド
##3. コマンドファイルのhandle箇所に処理を入れる。
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$titles = ['タイトル1', 'タイトル2'];
foreach($titles as $val) {
$article = new Article();
$article->title = $val;
$article->save();
}
return 0;
}
##4. コマンドのテストファイルを作成する。
-
コマンドのテストファイルを作成する。
$ php artisan make:test Commands/SampleCommandTest
作成されるディレクトリ: tests/Feature/Commands/SampleCommandTest.php
##5. テストケースを作成しテストの実行を行う。
- バッチの実行は以下のようにコマンド名をテストケース内でArtisan::callを使用し指定する。
<?php
namespace Tests\Feature\Commands;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Artisan;
use Tests\TestCase;
class SampleCommandTest extends TestCase
{
use RefreshDatabase;
public function test_command()
{
Artisan::call('sample:create');
$response->assertStatus(200);
}
}
-
テストファイルの実行
$ ./vendor/bin/phpunit tests/Feature/Commands/SampleCommandTest.php
##6. スケジューラーの設定を行う。
設定を行うファイル: app/Console/Kernel.php
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule): void
{
$schedule->command('sample:create')->hourly(); // 1時間毎に設定
}
-
スケジューラーの確認を行う。
$ php artisan schedule:list +----------------------------------------------+-----------+-------------+----------------------------+ | Command | Interval | Description | Next Due | +----------------------------------------------+-----------+-------------+----------------------------+ | '/usr/local/bin/php' 'artisan' sample:create | 0 * * * * | | 2021-08-16 19:00:00 +09:00 | +----------------------------------------------+-----------+-------------+----------------------------+