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

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

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

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

#!/usr/bin/env 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(// フォーマッターにエラー時は 赤文字、黒地、太文字 とセット
        new Symfony\Component\Console\Formatter\OutputFormatterStyle('red', 'black',[

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

/** 変更ここまで */

| 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);


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

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



   浜松イノベーションキューブ 315