【Laravel-admin】Laravel-admin便利な拡張機能(Extension)たち紹介3

2021年11月19日

概要

今回は、私がLaravel-adminで構築する際に基本的に追加する拡張機能を紹介します。
第3回の今日は、「scheduling」を紹介します。

【Laravel-admin】Laravel-admin便利な拡張機能(Extension)たち紹介1

Laravel-Admin構築までの環境構築は、以下の記事を参考にしてください。
【Laravel】MacにLaravelインストールしてみた(Virtalbox + Vagrant + homestead) 」
【Laravel-admin】Laravel-adminインストールしてみた

環境

MacBook Air (Retina, 13-inch, 2020)
メモリ: 16 GB
macOS: Big Sur バージョン 11.6.1

仮想環境
VirtualBox 6.1.28
Vagrant 2.2.19
Laravel/Homestead 11.5.0 ( Ubuntu 20.04.3 LTS, PHP 8.0.11 )
Laravel Framework 8.70.2
mysql  Ver 8.0.26-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
encore/laravel-admin ^1.8

scheduling拡張機能を追加

schedulingを追加・紹介していきたいと思います。
3度目ともなると、Install&Importも慣れてきたんではないでしょうか。(^^)
参考
Link: https://github.com/laravel-admin-extensions/scheduling

Install

composer require laravel-admin-ext/scheduling

Laravel AdminへImportしていきます。

php artisan admin:import scheduling

今回は、import後に管理画面のroutesで確認してみましょう。
LINK: http://laravel-admin.test/admin/helpers/routes

Urlに以下のルーティングが追加されていることが確認できます。
・admin/scheduling
・admin/scheduling/run

スケジュールの管理画面は、routesに記載がある通り、こちら
LINK: http://laravel-admin.test/admin/scheduling

バッチがまだ作成されていないから何もないですね(^^;

コマンドを作って、スケジューリングしてみる

細かいことは、別途記事にまとめます。

artisanコマンドを作ってバッチテンプレ生成。
「HelloWorldBatch」という名称で作成。(コントローラ名になります)

php artisan make:command HelloWorldBatch

コマンドを実行すると、以下の場所にコントローラが作成されます。
コマンドパス: /app/Console/Commands

編集ファイル: app/Console/Commands/HelloWorldBatch.php 
コマンド名: $signature = 'sample:hello'
コマンド説明: $description = 'sample command hello world ですよ.'
コマンド実行したら「Hello World!」と表示されるように handle() メソッドの最初に以下を追加
 echo ('Hello World!’);

コマンドソースをペタっ

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class HelloWorldBatch extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sample:hello';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'sample command hello world ですよ.';

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

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        echo ('Hello World!');
        return Command::SUCCESS;
    }
}

コマンドリストを確認してみましょう。

php artisan list

実行すると、sample:helloと指定したので、sampleグルーピングされています。
コマンドを作っていく場合は、システム単位や機能単位でグルーピングするようにするとわかりやすいと思います。

せっかくなんでHelper画面でも確認してみます。
LINK: http://laravel-admin.test/admin/helpers/terminal/artisan

同様の結果が返ってきます。
コマンド作っている最中はコマンドでちゃっちゃと確認しますがサーバにSSH接続しなくてもコマンドの確認できますね

コマンドを実行してみます。
ターミナルでも、helper画面でもどちらでも実行できます。

php artisan sample:hello

実行できることを確認できました。
本題はここから、スケジューリングしていきます。

タスクスケジューラ設定

laravelのタスクスケジューラは、基本的にcronからlaravelのコマンドスケジューラを毎秒呼び出す形に設定しておき、「Kernel.php」にてスケジューリングを行なっていきます。

まずは、cronに以下を設定していきます。

sudo crontab -e

初回のみ以下のような選択肢が出てきて、どのエディターを使うか聞いてきます。
慣れているエディタを選んでください。

私は、vimの方が良かったので、2 と入力し、vimを選択しました。

* * * * * cd [プロジェクトのパス] && php artisan schedule:run >> /dev/null 2>&1

私の環境では、以下のようになります。

* * * * * cd /home/vagrant/code/laravel-admin && php artisan schedule:run >> /dev/null 2>&1

毎秒プロジェクトパスに移動して、schedule:runを実行し標準出力はしない。
という設定です。
細かいところは、「cron コマンド」で検索っ!

設定されたか確認するコマンド。

sudo crontab -l

念の為、cronサービスを再起動します。

sudo service cron restart

これで前処理完了です。

あとは、タスクスケジューリングをしていきます。
エディタで、「app/Console/Kernel.php」を開き、スケジュール設定を追加します。

スケジュールの記載については、以下のURLを参考にしてください。
LINK: https://readouble.com/laravel/8.x/ja/scheduling.html

    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
        $schedule->command('sample:hello')->everyFiveMinutes();
    }

反映されたか確認するコマンド

$ php artisan schedule:list

スケジュール画面で見てみます。
LINK: http://laravel-admin.test/admin/scheduling

[Run]ボタンを実行すると、即時実行されます。

バッチの作成も含めてしまったので少し長くなってしまいましたが、今回はこれで終了です。お疲れ様でした。