【Laravel】既存 artisan コマンドのエラーメッセージを見やすくする

 Laravel は PHP のフレームワークでコンソール上のコマンドを簡易に作成するための仕組みも備えています。コンソールコマンドを作る仕組みは Artisan といい、Laravel 組み込みのコマンドもこの Artisan でつくられています。
Artisanコンソール 6.x Laravel
 Artisan は便利なのですが、次の様にコンソールによってはエラー表示が非常に見づらくなります。

 新たに自分でコマンドを作る際には以前紹介したように error メソッドを上書きすれば良いのですが、既存のコマンドはこの方法ではどうにもなりません。この記事ではこれを解決します。
 【Laravel】Artisanコマンドのコンソール表示を見やすくする – 株式会社シーポイントラボ | 浜松のシステム・RTK-GNSS開発

 解決のために Laravel が用意したプロジェクトルートにある artisan というファイルを変更します。これは拡張子なしのファイルですが、中身は PHP のコードそのものです。これを次の様に書き換えます。

クリックでソースコードを展開
#!/usr/bin/env php
<?php

define('LARAVEL_START', microtime(true));

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/

require __DIR__.'/vendor/autoload.php';

$app = require_once __DIR__.'/bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/

$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);

/** ここから変更開始 */

$output = new Symfony\Component\Console\Output\ConsoleOutput;
$output->getFormatter()// コンソールアウトプットクラスから文字列のフォーマッターインスタンスを取得
    ->setStyle(// フォーマッターにエラー時は 赤文字、黒地、太文字 とセット
        'error',
        new Symfony\Component\Console\Formatter\OutputFormatterStyle('red', 'black',[
            'bold'
        ])
    );

// Laravel のコンソールのカーネルにスタイルを変えたコンソールアウトプットインスタンスを渡す
$status = $kernel->handle(
    $input = new Symfony\Component\Console\Input\ArgvInput,
    $output
);

/** 変更ここまで */

/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running, we will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/

$kernel->terminate($input, $status);

exit($status);

 Symfony で用意されたコンソール出力クラスにエラーの場合ではこの色で表記する、と記述します。これで次画像の様に見やすくなります。

 ここでは黒地に太い赤文字としましたが、他の色も当然使えます。これは Symfony の Console コンポーネントの出力に関するドキュメントが詳しいです。
How to Color and Style the Console Output (Symfony Docs)

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG