フレームワーク

Laravelでコンソールアプリケーションを作成する方法

フレームワーク

コンソールアプリケーションとは

コンソールアプリケーション(コマンドラインアプリケーション)とは、「コマンドで動くアプリケーション」のことです。
私たちがよく目にするWebやスマホのアプリは、マウスでクリックしたり指でタッチしたりすることで動きます。
一方で、コンソールアプリケーションはコマンドつまりキーボードからの入力のみで動くアプリケーションになります。

どういう時に使うの?

よく使う場面としては、定期実行するプログラムです。月に一回だけ必ず実行したい時など、人が画面から実行していては、忘れることなどもあり、非効率です。
独自のコマンドを作成し、サーバに定期的にコマンドを実行する設定(cron等)をしておけば、実行のし忘れなんてことはなくなります。

作成方法

コンソールアプリケーションを作成するにはLaravelプロジェクトを作成する必要があります。
まず、Laravelプロジェクトを作成してから以下の作業をしましょう。

クラスの作成

Laravelプロジェクトを作成したらCommandクラスを継承したクラスを作成します。
Commandクラスを継承したクラスの作成は「php artisan make:command クラス名」でできます。
作成したLaravelプロジェクトでコマンドを実行します。

$ php artisan make:command SampleClass

コマンドが正常に実行されていれば以下のようなクラスがapp/Console/Commandsの下に作成されているはずです。

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class SampleClass 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 mixed
     */
    public function handle()
    {
        //
    }
}

artisanコマンドとして登録する

artisanコマンドとはLaravel専用のコマンドのことです。
作成したクラスをartisanコマンドとして登録することで、コマンドでクラスの中の処理を実行することができます。
artisanコマンドとして登録するにはapp/Console/Kernel.phpの$commands配列に作成したクラスを追加します。

<?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 = [
        Commands\SampleClass::class
    ];

   // 以下略

}

handleメソッドに処理を書く

作成したクラスのhandleメソッドの中に行いたい処理を書きます。
例えば、以下のような処理を書いてみましょう。

public function handle()
{
  $this->info("こんにちは");
}

$this->info()はコマンドクラスに用意された標準出力用のメソッドです。
では、以下のコマンドで実行してみましょう。

$ php artisan command:name

こんにちは

handleメソッドの中の処理を実行する場合、「php artisan signatureの値」でできます。
signatureの値は変更することもできます。

オプションを指定する

signatureにオプションを指定することもできます。
signatureの値を以下のように書き換えてみましょう。

protected $signature = 'command:name {--sample}';

handleメソッドは以下のように書き換えます。

public function handle()
{
    $sample = $this->option("sample");
    $this->info($sample);
}

オプションを指定して実行します。

$ php artisan command:name --sample

1

まとめ

引数を使ったり処理を変えることでさらにアプリの幅が広がります。
自分でカスタマイズしてさまざまなアプリを作ってみてください。

タイトルとURLをコピーしました