初期状態(単色の出力)
Composer
とか
artisan
コンソールからLaravelのartisanコマンドを実行したとき
みたいな単色で見にくい画面になっていませんか?
きっかけ
普段と違う環境で作業をしているとき、composer outdated
を実行したら…
なんか色がついてる!!ってなったのがきっかけでした。
方法1 "--ansi"を付与する
オプションを確認
上のComposerやartisanを実行したときのオプションを見てみると、
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.2.0 2016-07-19 01:28:52
Usage:
command [options] [arguments]
Options:
~中略~
--ansi Force ANSI output
このansiのオプションを有効にしてあげると、色付きで出力されます。
ansiって何って方は、こちらの記事が参考になるかもしれません。
Composer
artisan
方法2 posix_isatty関数を有効にする
謎は未解決のまま
"--ansi"オプションで色を付けることには成功しましたが、最初に色がついたときは、オプションなんて使っていません。
もちろんbashでalias artisan='php artisan --ansi'
のようなエイリアスがついていた訳もありません。
Google先生に聞いてみたのですが、聞き方が悪いのか的確な回答を得られず…
ソースを読んでみればいいじゃない!
というわけで、Laravelのソースを読み辿っていった結果、下記の部分にたどり着きました。
protected function hasColorSupport()
{
if (DIRECTORY_SEPARATOR === '\\') {
return
0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD)
|| false !== getenv('ANSICON')
|| 'ON' === getenv('ConEmuANSI')
|| 'xterm' === getenv('TERM');
}
return function_exists('posix_isatty') && @posix_isatty($this->stream);
}
https://github.com/symfony/console/blob/master/Output/StreamOutput.php
CentOSを使っているのでif文の中は関係なく、最後の1行に着目し調査したところ、posix_isatty関数がないことに気づきました。
php-processのインストール
posix_isatty関数を有効にするにはyumでphp-processをインストールすれば良いとのこと
sudo yum install -y --enablerepo=remi-php70 php-process
--enablerepo=remi-php70
の部分は自分の環境に置き換えてください
インストール後、再度composerとartisanを実行すると…
Composer
artisan
これで、"--ansi"オプションを付けずとも、色付きの表示になりました。