
Laravelでコマンドを作成するにはどうすればいいんだろう…?
こんな疑問を解決します。
この記事では、Laravelのコマンド作成手順について解説し、ゴールはこんな感じです。
php artisan book:insertDataのようにコマンドを自作し、実行すると本のデータを登録できるようになる。
コマンド実行後↓



休日で空いた時間の暇つぶしを探せるアプリを公開しています。
動作環境
Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール phpmyadmin
Laravelでコマンドを作成する手順

この記事ではコマンドを自作し、コマンドを打つと任意の処理を実行させます。例えば、
Laravelにはphp artisan serveなどがありますが、自分でphp artisan insertDataみたいにコマンドを作り、そのコマンドを打てば、データを登録させる処理を走らせるってイメージですね。
Laravelでコマンドを作成する流れは以下です。
コマンドファイルを作成する
まずは最初のステップとしてコマンドファイルを作成しましょう。
今回は試しに、コマンドを打ったらデータを登録するようにするので、コマンドの名称はinsertBookDataとします。
php artisan make:command insertBookDataすると、コマンドファイルが作成されます。

コマンドファイルの初期状態は、以下です。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class insertBookData extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        return 0;
    }
}
作成したコマンドファイルを編集する
次のステップとして、先ほど作成したコマンドファイルを編集しましょう。

$signatureはコマンド名です。例えば、$signature = “test”と定義すると、php artisan testでこのファイルを呼び出せます。
$descriptionは、コマンドファイルの詳細です。デフォルトのままでもいいですが、コマンドの説明を書いておくと、ファイルで何しているかわかるので親切です。
handleで、実際にコマンドを打った時の処理を定義します。
まずは、コマンドが実行できるか簡単な例で紹介します。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class insertBookData extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'example:test';
    /**
     * 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 int
     */
    public function handle()
    {
        echo "コマンド実行成功".PHP_EOL;
    }
}
php artisan listを打ってみてください。php artisan 〇〇で使えるコマンド一覧が確認できます。
先ほど登録したコマンドがあることを確認してください。
ずらーっとコマンド一覧が出てきますが、
example:test  コマンドテストのようにあると思います。
コマンドを実行してみる
php artisan example:testターミナルで上記を打つと、handleで定義した処理が実行されるので、コマンド実行成功とでます。
〇〇:/var/www/html/app# php artisan example:test
コマンド実行成功これでコマンドを打つと、処理が実行されることが確認できたので、ここからデータの登録処理を作ります。
データを登録するコマンドファイルにする

より実践的なコマンドになるように、データを登録するコマンドにします。本(booksテーブル)のデータを登録してみます。
booksテーブルは以下のような構造です。

<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB; // 追加
use Carbon\Carbon; // 追加
class insertBookData extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'book:insertData';
    /**
     * 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 int
     */
    public function handle()
    {
     // insertでデータを挿入する
        return DB::table('books')
            ->insert([
                'user_id'     => 1,
                'category_id' => 1,
                'book_name'   => '2週間でLaravelマスター',
                'book_min_price'  => 1500,
                'book_max_price'  => 2500,
                'image_file_path' => NULL,
                'created_at'      => Carbon::now(), // 現在の日付を取得できる
            ]);
    }
}
今回は、本のデータを登録するので、コマンド名はbook:insertDataとしました。php artisan listでもbook:insertData 本のデータをインサートするが確認できます。
あとはコマンドを実行すればデータを登録できます。
php artisan book:insertData

データが登録できていることが確認できますね!
【まとめ】Laravelでコマンドの作成手順
今回はLaravelでコマンドを作成する手順を解説しました。
コマンドを自作できれば任意の時間にバッチ処理もできるので便利です。
このブログでは、他にも実務に役立つLaravelの記事を書いているので、ぜひチェックしてみてくださいね!


休日で空いた時間の暇つぶしを探せるアプリを公開しています。






				
				
				
				
			
			
			
			
			
コメント