1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel バッチ作成手順

Last updated at Posted at 2021-08-31

#この記事について
laravel開発においてのバッチファイルの開発からユニットテストまでの備忘録としての記事になります。

#環境
PHP 8.0.1
Laravel 8.40.0

#目次

  1. バッチファイル作成
  2. コマンドファイルが作成されたら、プロパティのsignatureとdescriptionを名称を設定する
  3. コマンドファイルのhandle箇所に処理を入れる。
  4. コマンドのテストファイルを作成する。
  5. テストケースを作成しテストの実行を行う。
  6. スケジューラーの設定を行う。

##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 |
    +----------------------------------------------+-----------+-------------+----------------------------+
    
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?