ターミナル上で 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
については公式マニュアルを読めば十分ですが、色などの細かい一覧を探すにはターミナルに関する資料を見る必要があります。
環境変数 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番台:太字や下線などの装飾
-
30
〜37
:前景色(8色) -
90
〜97
:前景色(8色、明るくしたもの) -
38;5;n
:前景色(上の16色 + RGB 216色 + グレー24色) -
38;2;r;g;b
:前景色(24bitカラー) -
39
:前景色(デフォルト)