猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Laravel Artisan で標準出力する時に info メソッドを使うと色が鬱陶しい

はじめに

私は議事録をAIでいい感じにするツールである「ワンミニッツ」を開発しています。

one-minutes.com

そこで Laravel の Artisan を使ってコマンドを実装していたのですが、 Artisan Command の info メソッドをつかって標準出力すると文字が全部緑色になり見づらいという問題がありました。

「ログを出す時は基本 info レベルで出す」という先入観があったので、ずっと info メソッドを使っていたのですが、結論としては line メソッドを使えば色なしの出力ができます。

Laravel Artisan の標準出力メソッドたち

結論としては「色を付けたくない場合は line メソッドを使え」になるのですが、line メソッドは他のメソッドと引数が違いますし、メソッド自体もたくさんあるので、プロジェクト内でルールを設けて統一感をもって利用していくのがいいです。

以下、各メソッドの仕様と、私が策定したルールをまとめます。

メソッド 仕様・ルール例
line 他のメソッドと違って第2引数に $style がある: line($string, $style=null, $verbosity=null)
基本はこのメソッドを使って標準出力を出すようにする。
info info($string, $verbosity=null)
緑色で出力される。
正常系のログで特に強調したい場合に利用する
comment warn と全く同じ色になってしまいややこしいので、基本的には使わない
question question というメソッド名になっておりなにかを尋ねそうであるが、そういう仕様はなく、このメソッド自体にはログを出す機能しかないので注意。
基本は使わない。コマンド実行者になにか入力を求めたい場合かつ強調したい場合に利用する。
warn 黄色で出力される。主に異常系で利用し、基本的な処理自体には問題が無いので、リカバリをしたり処理を停止するほどではないが、検知しておきたい場合に利用する。
error 文字の背景が赤で出力される。
主に異常系で利用し、実行に問題があり、再実行や何らかの対応が必要な場合に利用する。
alert 黄色で、出力がアスタリスク * で囲われて出力される。
これだけ色じゃないので分かりづらく、基本的には warn や error を使えば十分なため利用しない。

ルールについては一例であり、プロジェクトごとに自由に策定したらいいと思いますが、使うメソッドは絞ってシンプルにしたほうがいいと思います。

verbosity 引数について

また、ワンミニッツでは $verbosity 引数を使っていませんが、プロジェクトによっては使っているところもあると思います。

出力されるログの量を調整したい場合に verbosity 引数は便利です。「1件処理する場合はログを詳細に出力したいが、100件処理する場合はログが出すぎないようにしたい」のようなユースケースで使えます。

verbosity を使っている場合、line メソッドも他のメソッドも同じスタイルで利用できるように、verbosity 引数はかならず Named Argument の形式で指定するとよさそうです。Named Argument は PHP 8 から利用できます。

<?php

// Named Argument を使う場合
$this->line('ログメッセージ', verbosity: 'vvv');
$this->info('ログメッセージ', verbosity: 'v');

// Named Argument を使わない場合
// line とそれ以外で引数(シグネチャ)が異なるので気持ち悪い
$this->line('ログメッセージ', null, 'vvv');
$this->info('ログメッセージ', 'v');

(個人的には info は色がつかないようにするか、色をつけずに出力できるメソッドを他にも用意しておいてほしかったですが...)

Laravel のドキュメント

あわせて読んでください(非公式の日本語訳)

https://readouble.com/laravel/12.x/ja/artisan.html