2020年9月9日水曜日

Ruby の Paint を使ってコンソール表示をカラフルにする

概要

Paint は ANSI カラーコードを使った文字列を簡単に生成することができるライブラリです
コンソール表示をカラフルにしてロギングなどを見やすくすることができます
今回は簡単な使い方を紹介します

環境

  • macOS 10.15.6
  • Ruby 2.7.1p83
    • Paint 2.2.0

インストール

  • bundle init
  • vim Gemfile
gem "paint"
  • bundle install

赤色にする

まずは単純に文字を赤色にしてみます

require 'paint'

painted_str = Paint['hoge', :red]
puts painted_str

Paint.[] というクラスメソッドを使うだけで指定の文字を ANSI カラーコード付きの文字に変換することができます
返り値が String クラスのオブジェクトなので単純に puts すれば色付き文字が表示されます

背景色を設定する

引数を 1 つ増やすだけで OK です
文字色を赤、背景をシアンにする場合は以下のようにします

require 'paint'

puts Paint['hoge', :red, :cyan]

色を反転する

文字色と背景色を反転するには :inverse を指定します

require 'paint'

puts Paint['hoge', :red, :cyan, :inverse]

HTML カラーコードを使う

デフォルトの設定であれば HTML のカラーコードをを指定することもできます

require 'paint'

puts Paint['hoge', "#dc143c"]

:inverse もそのまま使えます

puts Paint['hoge', "#dc143c", :inverse]

モードを設定する

Paint にはモードがありデフォルトは 16777215 色使えます
モードを確認するには Paint.mode を参照します
また設定する場合は 256 or 16 or 8 or 0 を設定するだけです

require 'paint'

puts Paint.mode
Paint.mode = 16
puts Paint['hoge', "#dc143c"] # 強制的に赤色になる

環境によってはフルカラー使えない環境もあるので一度使える色の種類を確認すると良いと思います

おまけ: logger をカスタムして使う

例えば Ruby 標準の logger を Paint でカスタムして使うこともできます
コンソールにだけ表示する分にはこれだけで見やすくなると思います

require 'paint'
require 'logger'

class PaintedLogger < Logger
  def info(str)
    super(Paint[str, :red])
  end
end

plogger = PaintedLogger.new(STDOUT)
plogger.info("hoge")

最後に

Ruby の Paint を使って簡単に ANSI カラーコードを使う方法を紹介しました
今回は紹介していませんが :bright (太字)、Paint.random (ランダムカラー)、Paint.unpaint (カラーコードの削除) など他にも便利な機能が多くあります
コンソールに表示するロガーは Paint してファイルに出力するログはプレーンテキストにするなどすると使い勝手も良くなるかなと思います

ANSI カラーコードを直接記載するとごちゃごちゃになるので Ruby が使える環境であれば /etc/motd などでカラフルなログインメッセージを表示したりするのに使えると思います

0 件のコメント:

コメントを投稿