0
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 1 year has passed since last update.

バッチを作成!

Posted at

バッチを作ろう

バッチってなんですか!コマンドだよ!
コマンドってなんですか?ポチッてしたらできるやつだよ!

① バッチの処理内容を記述するファイルを作成。
(app/Console/Commands/にファイルが作成される)

$ php artisan make:command コマンドの名前
ex) $ php artisan make:command UpdateAge

② 作成したバッチファイルを編集。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class UpdateAge extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:①コマンドを書く';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '②コマンドの説明を書く';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        ここに処理をかく

        ④↓書いた処理が終わったらログがでるようにする。(ログが確認できて安心
        \Log::info('age was updated.');
    }
}

①コマンドを書く
コマンドを実行するときに使います。
スネークケースで書いてます。
ex) update_age

②コマンドの説明を書く
誰がみてもわかりやすいように書くと、後々楽です。
ex) '現在の年齢に更新する'

③ここに処理をかく
ポチッとした後、されて欲しい処理を書きます。

④↓書いた処理が終わったらログがでるようにする。
これは厳密には無くて良いんですが、コマンドがちゃんと実行されているか確認できるので便利です。
設定にもよりますが、backend/storage/logs/にログが記述されます。

できたコマンドを確認

$ php artisan list
Laravel Framework x.x.x
    :
    :
    :
 command
  command:update_age  現在の年齢に更新する

これで$ php artisan command:update_ageでコマンド実行できることが確認できました。

外部からコマンドが使えるように

コマンドが増えていくと、いちいち一つずつコマンド実行するのは面倒です。
そこで$ php artisan schedule:runで登録しているコマンド全てが実行されます。

登録は、プロジェクト内の下記だけ!

backend/app/Console/Kernel.php
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \App\Console\Commands\UpdateAge::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // ->dailyAt('2:00')で、毎日2時にコマンド実行されます。
        // 詳しくはこちら https://readouble.com/laravel/8.x/ja/scheduling.html
        $schedule->command('command:update_age')->dailyAt('2:00');
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

0
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
0
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?