コンソール出力に色付けする

ANSIエスケープコードを利用すると、コンソール出力に色付けすることができます。

print("\u001b[31m")
print("hogehoge")
print("\u001b[00m")

1行目のprint文によって色付けするためのコードを出力し、以後コンソールに出力される文字の色は指定された色になります。 3行目のprint文は出力の色を戻すためのものです。ここで出力しているのは赤ですが、他にも色々ないろがあります。詳細は参考ページのリンクを参照してください。

さて、色を変えた後に元の色に戻すのが面倒ですが、こういうときこそLoan Patternです。

def coloring[A](ansi: String)(body: => A) = try { print(ansi); body } finally { print("\u001b[00m") }

こんな感じにすることで、例えば以下のようなやり方でカラーリングした出力をする部分をブロックで囲うことができます。

coloring("\u001b[31m") {
  println("hogehoge")
  println("fugafuga")
}

参考