【Laravel】Artisanコマンドのコンソール表示を見やすくする

 ArtisanはLaravelに含まれているコマンドラインインターフェイスです。LaravelにはArtisanで用いるためのコマンドを簡単に書けるようなフレームがそろっており、コンソール画面に表示する文字列の修飾もあります。次のドキュメントの出力の書き出し項によると次の様に書けます。
 Artisanコンソール 6.x Laravel

        $this->info('this is info');
        $this->warn('this is warn');
        $this->error('this is error');
        $this->comment('this is comment');
        $this->question('this is question');

 実行すると次の様になります。

 便利なのですが重要な種別であるERRORが見難いです。環境によって違うのでしょうが自分の環境ではややピンクの背景に灰色文字でとても辛いです。こういった時、自分でコメントの修飾をしたくなります。
 Artisanは実はSymfonyのコンソールのラッパーで、詳しい実装や作りは次のドキュメントにあります。
How to Color and Style the Console Output (Symfony Docs)
 これを元にして、コメントの修飾を作ると例えば次の様にできます。

    protected function myError(string $msg)
    {
// ドキュメントに従ってタグ付け
        $this->line("<fg=red;options=bold,underscore>${msg}</>");
    }

    public function handle()
    {
        $this->info('this is info');
        $this->warn('this is warn');
        $this->error('this is error');
        $this->comment('this is comment');
        $this->question('this is question');
// 追加
        $this->myError('this is my error');
    }


 この修飾が最良かというと微妙な気がしますが、元よりは見やすいと思います。
 実装は次のソースコードでこちらを元にするとドキュメントに書かれていること以上の工夫ができます。
symfony/OutputFormatterStyle.php at 5.0 · symfony/symfony
 あまり深堀してませんがコードの一部やPHPの素な実装までさかのぼるとANSIエスケープシーケンス込みの標準出力を用いているようです。
ANSIエスケープシーケンス チートシート – Qiita

// 多分最終的にこの様な感じ。下は赤色で$msgの中身をコンソール画面に表示します
echo "\033[0;31m$msg\033[0m\n";
>株式会社シーポイントラボ

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

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

CTR IMG