1
0

jqコマンドの出力時の色をカスタマイズしてみる

Last updated at Posted at 2023-12-24

ターミナル上で JSON を見やすくする際に jq コマンドを使っているのですが、ハイライトの色を調整できないか気になりました。

調べたところ、バージョン 1.7 (2023年9月リリース)から環境変数 JQ_COLORS で色をカスタマイズできることがわかりました。

というわけで実際に試してみました。( jq 自体の設定方法より、色の指定方法を探すほうが苦労しました)

試したバージョン

  • jq 1.7.1
  • GNOME Terminal 3.28.2

暗い背景のターミナル用に、明るい色を選んでみました。

$ export JQ_COLORS="33:93:93:96:92:97:1;97:4;97"

$ jq <<< '{"key":[null,false,true,123,"abc"]}'

結果は以下のスクリーンショットの通りです。

jq_colors.png

設定方法

JQ_COLORS については公式マニュアルを読めば十分ですが、色などの細かい一覧を探すにはターミナルに関する資料を見る必要があります。

環境変数 JQ_COLORS での設定はコロン区切りで8つあり、順に JSON の各要素に対する設定となっています。先ほど例に挙げた設定は以下のようになっています。

要素 設定例 装飾
null 33 -
false 93 - 黄(明)
true 93 - 黄(明)
数値 96 - 水(明)
文字列 92 - 緑(明)
配列 97 - 白(明)
オブジェクト 1;97 太字 白(明)
キー 4;97 下線 白(明)

設定しているセミコロン区切りの数値は、ターミナルで文字を装飾する際にエスケープシーケンスで指定するものと同じです。例えばシェルのプロンプトに色が付いているなら、環境変数 PS1 を見ると \033[NN;NNm という形で同様の指定が見つかります。

$ echo "'$PS1'"
'\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
        ^^^^^               ^^           ^^^^^            ^^
      bold;green            reset      bold;blue          reset

数値でどのような設定ができるかは、例えば https://en.wikipedia.org/wiki/ANSI_escape_code#SGR に一覧があります。

以下は自身がよく使いそうな設定のメモです。(ほぼ色の指定方法)

  • 00番台:太字や下線などの装飾
  • 3037 :前景色(8色)
  • 9097 :前景色(8色、明るくしたもの)
  • 38;5;n :前景色(上の16色 + RGB 216色 + グレー24色)
  • 38;2;r;g;b :前景色(24bitカラー)
  • 39 :前景色(デフォルト)

参考

1
0
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
1
0