Laravel

LaravelでArtisanコマンドを自作する方法

こんにちは!ともです(@_tomo_engineer)!

今回はLaravelでよく利用するArtisanコマンドに自作のコマンドを登録する方法についてです。

目次

  • Artisanコマンドとは
  • カスタムコマンドの作成
  • カスタムコマンドの登録

Artisanコマンドとは

Artisanについて、ドキュメントは以下の様に書かれています。

ArtisanはLaravelに含まれているコマンドラインインターフェイスです。アプリケーション開発全体で役に立つ、数多くのコマンドを提供しています。

Laravel日本語ドキュメント:Artisanコンソール5.5

ArtisanはLaravelのコマンドラインインターフェース(CI)です。

php artisan make:migrate

これはLaravelを利用していると頻繁に利用するコマンドの1つであり、php artisan 以降が登録されている機能になりますので、上記はmake:migrateコマンドを実行しています。

この様なCIを自作するにはどの様にすれば良いのでしょうか。

すでに登録済みのArtisanコマンドは

php artisan list

listコマンドで確認する事ができます。

この様にArtisanコマンドを確認する事ができました。

ここに新たなコマンドを追加する方法を以降でご説明致します。

カスタムコマンドの作成方法

コマンドを生成するコマンドもLaravelは提供しており、次のコマンドで作成する事ができます。

php artisan make:command CSVCommand

このコマンドによりCSVCommandという名前のファイルをApp\Console\Commands下にCSVCommand.phpが生成されます。

CSVCommand.phpに設定を記述することにより、カスタムコマンドを作成する事ができます。

  • CSVCommand.php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class CSVCommand extends Command
{
    // コマンド名
    protected $signature = 'command:name';

    // コマンドの説明
    protected $description = 'Command description';

    // コンストラクタ
    public function __construct()
    {
        parent::__construct();
    }

    // 実行内容
    public function handle()
    {
        //
    }
}

コメントを振りましたが、プロパティとメソッドの説明は以下です。

$signature コマンド名
$description コマンドに関する説明
handle() コマンドの実行内容

コマンド名とコマンドに関する説明

CSVCommand.phpを作成した状態で、

php artisan list

をしてみましょう。

CSVCommand.phpの$signature, $descriptionで設定した内容が反映されています。

では、このプロパティを修正してみます。

   // コマンド名
    protected $signature = 'csv:user';

    // コマンドの説明
    protected $description = ' CSV import';

Usersテーブルにcsvファイルからデータをインポートするコマンドを作成するとこうでしょうか。この状態でArtisanコマンドのリストを表示してみます。

command => csv にコマンド名が変更されています。

コマンドの実行内容

コマンドの実行内容はhandleメソッドに記述します。

この状態で

// 実行内容
    public function handle()
    {
        dd('pass handle');
    }

handleメソッドに上記のdd()を追加しました。この状態で

php artisan csv:user

を実行してみます。

実行したい内容を実行できている事がわかります。

あとはCSV出力の内容をhandleメソッドに記述するだけですね。今回は省略致します。

カスタムコマンドの登録

カスタムコマンドの登録はapp\Console\Kernel.phpで設定します。

  • app\Console\Kernel.php
// コマンドをアプリケーションに登録する
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

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

Commandディレクトリ下をロードしている事が分かります。

php artisan make:command

では、Commandsディレクトリ下に設定ファイルを生成されます。よって自動的にロードされる訳であり登録作業は不要です。

// クラス名を登録
    protected $commands = [
        Commands\CSVCommand::class
    ];

$commandsプロパティに配列で与えることによりアプリケーションにコマンドを登録することも可能です。

まとめ

Artisanコマンドに自作のコマンドを追加する方法を紹介しました。

自作のコマンドを作成する事で開発の効率を上げる事ができます。コマンドから簡単に行いたい作業がある場合はArtisanコマンドに登録しておくと便利ですね。