15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go6Advent Calendar 2019

Day 9

コンソールの色付けにはgookit/colorが便利

Posted at

Goアドベントカレンダーその6が投稿されなかったので代理投稿です。Go界は殺伐しているので、隙を見せるとやられます。みなさんもお気をつけください。

GoでCLIツールを作るときにはいつも"github.com/fatih/color"パッケージを使っていたのですが、これが長らくメンテナンスされない宣言がされているため、移行先を探していました。で、最近使うようになったのが"github.com/gookit/color"です。

gookit/colorは多彩なモードをサポートしています。256色にも対応しています。僕は試していないですが、基本16色ならWindowsでも動作するようです。

基本色の使い方

fatih/colorと似た感じで使えます。fatih/colorの基本色の関数はPrintf相当で、gookit/colorはメソッド名が必須なのでちょっとコードは長くなりますが、みんながよく知るfmtと同じ体系のメソッドが提供されているので可読性は悪くはないでしょう。 .Printf を挟み込めば移行は難しくないです。

ちなみに、fatih/colorの方も、color.Newで作ったColor構造体はfmtと同じメソッドを持つので、こちらの書き方をしていれば移行はもっとかんたんです。

// github.com/fatih/color
color.Red("We have red")
color.Magenta("And many others ..")

// github.com/gookit/color
color.Red.Println("Simple to use color")
color.Green.Print("Simple to use color")
color.Cyan.Printf("Simple to use %s\n", "color")

前景色・背景色・スタイルの合成

ちょっとシグネチャは違いますが、似たような感じで初期化して、同じように使えます。

// github.com/fatih/color
redOnWhite := color.New(color.FgRed).Add(color.BgWhite)
redOnWhite.Println("Red text with white background.")

// github.com/gookit/color
whiteOnBlack := color.New(color.FgWhite, color.BgBlack).Println("custom color style")
whiteOnBlack.Println("White text with black background.")

テーマ

これはgookit/colorにのみにあるモードです。Redなどの代わりに、Warning/Error/Suc(Successのこと)などを使うと、より抽象的にプログラミングすることができます。

  • Info
  • Note
  • Light
  • Error
  • Danger
  • Notice
  • Success
  • Comment
  • Primary
  • Warning
  • Question
  • Secondary

こんな感じで使います。

// github.com/gookit/color
color.Success.Println("Success message")

タグモード

これもgookit/colorにのみにあるモードです。スタイルをタグで書くと、それを整形してくれます。基本色や基本のスタイル(boldとか)はそのまま文字で書けますし、テーマの名前もそのまま使えます。前景色・背景色・スタイルを自由に組み合わせるときは、fg=/bg=/op=を組み合わせて書きます。

// github.com/gookit/color
color.Print("<red>Red Text</>")
color.Print("<error>Error</>\n")
color.Print("<fg=yellow;bg=black;op=underscore;>Warning</>\n")

Print()などの代わりにClearTag()関数を使うと、タグ抜きのテキストが出力されます。ユニットテストではスタイルは無視して中身のテキストの一致だけみたい、というケースでとても便利に使えます。

color.ClearTag("<red>Red Text</>")
// Red Text

注意点も少しあります:

  • 閉じタグは開きタグの種類の限らず必ず </>
  • タグのネストはできない
  • 本文に似た形式のタグ(HTMLやXMLのタグ)があると、正常に出力されないことがある

まとめ

ということで、github.com/gookit/colorの紹介でした。

15
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?