Bash JSON ビューア — jless、JQ_COLORS & ターミナルガイド
無料の JSON Pretty Print をブラウザで直接使用 — インストール不要。
JSON Pretty Print をオンラインで試す →スクリプト実行ではなくインタラクティブな探索のための bash JSON ビューアが必要なとき、標準の jq . パイプでは力不足です——出力はターミナルの上へ流れ去り、300行のAPIレスポンスを遡る術がありません。このガイドでは ターミナルでJSONをインタラクティブに表示するために設計されたツールを紹介します。 jless(vimキーナビゲーション付き折りたたみツリー)、 JQ_COLORS カスタムカラーテーマ、 jq -C | less -R カラー付きページング、日常的に使えるシェルエイリアス、そして fx のNode.js代替です。 スクリプト、CI/CD、バリデーションのワークフローについては、姉妹ガイドの BashでJSONをフォーマットする をご覧ください。インストール不要のブラウザビューアとしては、 JSON Pretty Print ツールがすぐに使えます。サンプルはBash 5.x(macOS Homebrew経由、Ubuntu 22.04+)でテスト済み、Bash 3.2+(macOSシステムシェル)との互換性もあります。
- •
jless— ターミナル最強のインタラクティブJSONビューア:折りたたみツリー、vimキー、インクリメンタル検索 - •
jq -C . | less -R— jq以外の追加インストール不要のカラー付きスクロール可能ページャ - •
JQ_COLORS— すべてのJSON型に対してjqのANSIカラースキームをカスタマイズする環境変数 - •
fx— マウスサポートとJavaScriptフィルタ式を備えたインタラクティブなNode.js JSONビューア - •
alias jv='jless'— 一言コマンドにするとインタラクティブな確認が自然な習慣になる
インタラクティブとスクリプト的なJSON表示の違い
小さなペイロードのフォーマット済み出力が必要なとき、あるいは結果を別のコマンドに渡すときは、JSONを jq . にパイプするのが正しい選択です。しかし200フィールドのAPIレスポンスを探索する必要があるときは、これは適切ではありません——出力はターミナルウィンドウを流れ去り、フィルタを付けてコマンドを再実行せずにはナビゲートも、セクションの折りたたみも、特定フィールドの検索もできません。インタラクティブなJSONビューアは、同じフォーマット済みカラー表示出力を、あなたがナビゲーションをコントロールできる永続的なページャ内でレンダリングします。データは同じ、違いはインターフェースです。
# jq . — 大きなレスポンスは出力が流れ去る curl -s https://api.github.com/users/torvalds | jq . # 300行以上が流れ去る——すぐにコンテキストを失う
# jless — インタラクティブなページャが開き、何も流れ去らない curl -s https://api.github.com/users/torvalds | jless # ドキュメント全体が表示され、折りたたみ可能、j/k/h/lで検索可能
jq を使いましょう。 BashでJSONをフォーマットする ガイドではそういったスクリプトパターンを扱っています。jless — インタラクティブJSONビューア
jless はターミナル専用に設計されたJSONビューアです。普通のjqパイプとは異なり、ドキュメントを永続的な折りたたみツリーとしてレンダリングします。すべてのオブジェクトと配列は l と h で個別に展開・折りたたみができ、ナビゲーションはvimスタイルのキー、インクリメンタル検索で任意のキーや値を即座に見つけられます。入力をストリーミングで増分処理するため、サイズに関わらず大きなファイルやAPIレスポンスを1秒以内に開けます——jqは表示前にドキュメント全体をバッファリングするのとは対照的です。APIレスポンスが一目で把握できないほど大きいとき、私はまずjlessを手に取ります。
インストール
# macOS brew install jless # Linux — GitHub Releases からビルド済みバイナリを取得 curl -sL https://github.com/PaulJuliusMartinez/jless/releases/latest/download/jless-x86_64-unknown-linux-gnu.tar.gz \ | tar xz sudo mv jless /usr/local/bin/ # バージョン確認 jless --version
基本的な使い方
# ローカルファイルを開く——インタラクティブなツリービューアが即座に起動 jless api-response.json # JSONストリームを直接 jless にパイプ curl -s https://api.github.com/users/torvalds | jless # すべてのノードをトップレベルに折りたたんだ状態で開く(大きなドキュメントの出発点として便利) jless --mode line api-response.json # 特定の配列要素を取り出して単独で表示 jq '.[0]' deployments.json | jless
実践的なナビゲーションと検索
# jless 内で: # # j / ↓ 下に移動 # k / ↑ 上に移動 # l / → ノードを展開(またはEnter) # h / ← ノードを折りたたむ # H 現在のノードと兄弟をすべて折りたたむ → 全体俯瞰 # L すべてを再帰的に展開 # # / 前方検索を開始——キー名を入力してEnter # n / N 次 / 前の検索結果 # # g / gg 先頭に移動 # G 末尾に移動 # q 終了
jlessキーボードショートカット一覧
すべてのショートカットはjlessを開いた直後から使えます——設定は不要です。ナビゲーションモデルはvimと意図的に同一なので、既存の操作感がそのまま活かせます。
jq -C | less -R — 追加ツール不要のカラー付きページング
jlessがインストールされておらず、JSONレスポンスをスクロール可能なカラー表示で確認したい場合、 jq -C . | less -R は十分な代替手段です。-C フラグはstdoutがパイプであっても強制的にANSIカラーコードを出力し(通常はjqが除去します)、 -R はlessにそのコードを文字として印刷するのではなくレンダリングするよう伝えます。結果は完全にカラー表示されスクロール可能なドキュメントですが、jlessのようなインタラクティブなツリー構造はありません。less内のナビゲーションは矢印キーやvimスタイルの j/k、 / でlessの組み込みテキスト検索が使えます。
# 基本のカラー付きページャ jq -C . response.json | less -R # curlレスポンスから——-sはプログレスバーがJSONストリームを汚染しないようにする curl -s https://api.github.com/repos/jqlang/jq | jq -C . | less -R # キーをソートして見やすくしてからページング jq -CS . config.json | less -R # -C = 強制カラー、-S = キーソート(2つのフラグを組み合わせ) # エイリアスを追加して毎回フルパイプを入力しなくて済むようにする alias jqv='jq -C . | less -R' # 使用例:cat response.json | jqv # または:curl -s https://api.example.com/status | jqv
jq -C | less -R はlessが表示できるようになる前に、フォーマット済み出力全体をバッファリングします。200MBのファイルでは数秒待つことになり、かなりのメモリも消費します——これは普通の jq . と同じ制限です。大きなファイルには、増分ストリーミング処理ができる jless を使いましょう。JQ_COLORS — カスタムカラーテーマ
JQ_COLORS はjqのデフォルトANSIカラースキームを上書きする環境変数です。コロン区切りの7つのANSI属性とカラーコードの文字列を受け取り、この固定順序でJSON型それぞれに対応します:null : false : true : 数値 : 文字列 : 配列 : オブジェクト。各コードの形式は 属性;カラー で、属性は 0(通常)、 1(太字)、 2(薄く)または 4(下線)、カラーは標準ANSIカラー番号(30–37 = 標準色、90–97 = 明色)です。
# JQ_COLORS 構築のためのANSIカラー参考: # 属性: 0=通常 1=太字 2=薄く 4=下線 # カラー:30=黒 31=赤 32=緑 33=黄 # 34=青 35=マゼンタ 36=シアン 37=白 # 明色: 90=明黒 91=明赤 92=明緑 93=明黄 # 94=明青 95=明マゼンタ 96=明シアン 97=明白 # # 順序:null : false : true : 数値 : 文字列 : 配列 : オブジェクト # ダークターミナル向けハイコントラストテーマ(推奨) export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # null=暗グレー, false=明赤, true=明緑, # numbers=明黄, strings=緑, arrays=太字シアン, objects=太字シアン # Solarizedスタイルのテーマ export JQ_COLORS="2;37:0;35:0;35:0;36:0;33:1;34:1;34" # null=薄白, false=マゼンタ, true=マゼンタ, # numbers=シアン, strings=黄, arrays=太字青, objects=太字青 # ミニマル(キーのみ太字、他はすべて通常) export JQ_COLORS="0;90:0;39:0;39:0;39:0;39:1;39:1;39"
# 選んだテーマを ~/.bashrc または ~/.zshrc に追加してすべての jq 呼び出しに適用
echo 'export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"' >> ~/.bashrc
source ~/.bashrc
# テーマをテスト
echo '{"active":true,"errors":null,"count":42,"tags":["api","v2"],"meta":{"version":"1.0"}}' | jq .JQ_COLORS にはコロン区切りで正確に7つの値が必要です。文字列のセグメント数が足りない場合、jqはエラーメッセージなしに変数全体を無視してコンパイル済みのデフォルト値に戻ります——設定ミスの診断が難しくなります。シェルプロファイルに追加する前に、必ず短いJSONペイロードで新しいカラー文字列をテストしてください。日常のJSON確認に使えるシェルエイリアス
インタラクティブなJSON確認のコマンドはデフォルトで長くなりがちです。 ~/.bashrc または ~/.zshrc に少数のエイリアスを設定すると、jlessとカラー付きページングが一言コマンドになり、どんなワークフローにも自然に溶け込みます。以下のエイリアスは組み合わせて使えます—— jv と jvp はどちらもパイプ入力または第一引数としてのファイル名を受け付けます。
# ~/.bashrc または ~/.zshrc に追加
# jv — インタラクティブビューア(jlessがあればそれを、なければカラー付きページャ)
jv() {
if command -v jless &>/dev/null; then
jless "$@"
else
jq -C . "$@" | less -R
fi
}
# jvp — キーをアルファベット順にソートして表示(レスポンス比較に便利)
alias jvp='jq -CS . | less -R'
# jvc — クリップボードから表示(macOS)
alias jvc='pbpaste | jless'
# jvf — 表示してフィルタ:jvf '.users[0]' response.json
jvf() {
local filter="$1"; shift
jq -C "$filter" "$@" | less -R
}
# ターミナルを再起動せずにリロード
source ~/.bashrc# 上記エイリアスを追加した後の使用例 # 任意のファイルやパイプ済みレスポンスを表示 jv deployment-config.json curl -s https://api.github.com/users/torvalds | jv # ソートして表示(アルファベット順で確認しやすい) cat feature-flags.json | jvp # サブドキュメントをインタラクティブに掘り下げる jvf '.database' infra/app-config.json jvf '.users[] | select(.role == "admin")' users.json
bat — シンタックスハイライト付きJSONファイル表示
bat はシンタックスハイライト、行番号、組み込みページャを備えた cat の代替品です。ディスク上のJSONファイルに対して、テキストエディタを開かずにエディタ風のすっきりした読書体験を提供します。jlessとは異なり、batはファイルを静的テキストとしてレンダリングします——折りたたみ、検索、スクロール以外のナビゲーションはありません。中程度のサイズの静的ファイル(設定ファイル、フィクスチャ、テストペイロード)でシンタックスカラーと行番号が欲しいが、インタラクティブなツリーナビゲーションは不要なときに力を発揮します。
# macOS brew install bat # Debian / Ubuntu(バイナリはbatcatという名前の場合あり) apt-get install -y bat # alias bat=batcat # Ubuntuで必要な場合は ~/.bashrc に追加 # シンタックスハイライトと行番号でJSONファイルを表示 bat config/feature-flags.json # ページャ無効——ターミナルに直接出力(スクリプトで便利) bat --paging=never api-response.json # jqと組み合わせ:jqでフォーマット、batで表示(batのJSONハイライトを維持) jq '.' response.json | bat --language=json --paging=never
bat を使いましょう(例:テスト失敗がフィクスチャファイルの47行目を参照している場合)。curlからのAPIレスポンスや動的なJSONには、jlessの方が素早く開けて実用的なナビゲーションができます。ブラウザで確認して同僚と共有したい場合は、直接 JSON Pretty Print ツールに貼り付けましょう——ターミナル不要です。fx — インタラクティブなNode.js JSONエクスプローラ
fx はNode.js上に構築されたインタラクティブなJSONビューアです。jlessに似たインターフェース——折りたたみツリー、キーボードナビゲーション、検索——を持ちながら、jlessにない2つの機能が追加されています:マウスサポート(クリックでノードを展開/折りたたみ)と、ボトムバーにJavaScript式を入力してドキュメントをリアルタイムフィルタリングする機能です。すでにNode.jsを運用しているチームにとって、fxは別のバイナリをインストールせずに使えるので自然な選択です。Nodeのない純粋なターミナル環境には、jlessの方がシンプルです。
# npmでグローバルインストール npm install -g fx # またはインストールせずに実行(npxがパッケージをキャッシュ) curl -s https://api.github.com/users/torvalds | npx fx # 基本的なインタラクティブ使用 fx api-response.json curl -s https://api.github.com/repos/jqlang/jq | fx # fx内で:矢印キーでナビゲート、Enterで展開/折りたたみ、/で検索 # ボトムバーでリアルタイムフィルタリングのためのJavaScript式を受け付ける: # .name → "name"フィールドのみ表示 # .repos.slice(0,5) → 最初の5つのリポジトリ
# fxは非インタラクティブなフォーマッタとしても動作(jq .に似ているがJS構文)
# JavaScriptの式を引数として渡す——インタラクティブモードなし
echo '{"users":[{"id":1,"name":"Sarah Chen"},{"id":2,"name":"Marcus Osei"}]}' \
| fx '.users[0].name'
# Sarah Chen
# mapをチェーンして配列変換
cat deployments.json | fx '.items.map(d => ({id: d.deploy_id, status: d.state}))'よくあるミス
これら4つのミスは、開発者がターミナルJSONビューアを使い始めるときに繰り返し起こります——原因を理解すれば、どれにも明確な解決策があります。
問題: jq . はすべての出力を一度にstdoutに出力します。ターミナルの高さを超えるレスポンスは、最後の画面以外がすべて消えてしまいます——先頭まで戻ることも、フィルタ付きで再実行せずに特定フィールドに移動することもできません。
解決: インタラクティブなナビゲーションにはjlessにパイプするか、フォールバックとして jq -C . | less -R を使います。どちらもサイズに関わらずドキュメント全体へのアクセスを維持します。
# 300行のAPIレスポンス——上位280行が即座に流れ去る curl -s https://api.github.com/users/torvalds | jq . # 出力の下部しか見えない——上に戻れない
# jlessでドキュメント全体に常にアクセス可能——何も失われない curl -s https://api.github.com/users/torvalds | jless # j/kでスクロール、h/lで折りたたみ/展開、/で検索
問題: JQ_COLORSにはコロン区切りで正確に7つの値が必要です。文字列が6つまたは8つの値を持つ場合、jqは変数全体を無視してコンパイル済みのデフォルト値に戻ります——警告もエラーも出ず、単に間違った色が表示されます。
解決: コロンを数えましょう:有効なJQ_COLORS文字列にはコロンが正確に6つ、値が7つあります。変数をechoしてtrでパイプしてカウントします。
# 値が6つ——jqはデフォルト値を使い、理由を示す表示なし
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96"
echo '{"ok":true}' | jq . # 色が変わらない——エラーなし# 正確に7つの値——6つのコロン export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96" # シェルプロファイルに追加する前に数を確認 echo "$JQ_COLORS" | tr -cd ':' | wc -c # 6が出力されなければならない
問題: jlessとfxはインタラクティブなインターフェースをstdoutではなくターミナル(TTY)にレンダリングします。grep、teeやその他のコマンドにパイプすると、乱雑なANSIエスケープコードや空の出力が生じます——ビューアのインタラクティブな出力は他のプログラムが消費することを想定していません。
解決: データをプログラム的に抽出するには、明示的なフィルタを持つjqを使います。jlessとfxは、人間が出力を読む場合のパイプラインの最終ステップとしてのみ使います。
# jlessの出力は人間の目のため——パイプすると文字化けする jless response.json | grep "request_id" # 出力:ANSIエスケープコードとカーソルシーケンス、きれいなテキストではない
# jqをプログラム的な抽出に使う——クリーンで組み合わせやすい jq -r '.request_id' response.json | grep "req_" # jlessはターミナルのエンドポイントとしてのみ使う——その後に何も続けない jless response.json
問題: -C はANSIカラーコードを出力ストリームに強制します。そのストリームが生モードでないターミナルに直接印刷されるか、ANSIを解釈しないツールにパイプされると、エスケープシーケンスが ^[[1;34m のような文字として表示されて出力を汚染します。
解決: 常に jq -C と less -R を組み合わせて使います。-R フラグはlessを生入力モードにし、ANSIシーケンスをテキストとして印刷するのではなく色としてレンダリングするよう指示します。
# -C に -R なし:エスケープシーケンスが生テキストとして表示 jq -C . response.json | less # 出力:^[[1;34m"status"^[[0m: ^[[0;32m"ok"^[[0m ...
# -C と -R を組み合わせ:ANSIコードが実際の色としてレンダリング jq -C . response.json | less -R # 出力:カラー表示されたJSON、きれいで読みやすい
jless vs jq vs bat vs fx — インタラクティブビューア比較
4つのツールすべてカラー表示のJSONをレンダリングできますが、インタラクティブな機能は大きく異なります。折りたたみナビゲーション、検索、マウスサポートが必要かどうか——そしてNode.jsが環境にあるかどうかに基づいて選びましょう。
ほとんどの場合:jlessを一度インストールしてデフォルトのインタラクティブビューアとして使います。追加バイナリをインストールできない環境のフォールバックとして jq -C . | less -R を持っておきます。チームがNode.jsファーストでマウスナビゲーションやライブJavaScriptフィルタリングを重視するなら、fxを追加しましょう。
よくある質問
ターミナルでJSONファイル内の特定のキーを検索するには?
jless では / を押してインクリメンタル検索プロンプトを開き、キー名を入力して Enter を押します。n で次の一致箇所に、N で前の一致箇所に移動できます。検索はデフォルトで大文字と小文字を区別します。jq -C | less -R では / が less の組み込み検索を起動しますが、ANSIカラーコードを含む生テキストが対象となるため、構造化JSONの検索には jless の方が確実です。
# jless でファイルを開き、/ で検索 jless api-response.json # jless 内で:/ を入力 → "request_id" → Enter → n で次の一致箇所へ # jq の代替:標準出力にマッチするキーをすべて抽出して表示 jq '.. | objects | with_entries(select(.key == "request_id"))' api-response.json
キーボードショートカットで深くネストされたJSON構造をナビゲートするには?
jless は vim のナビゲーションを踏襲しています。j/k で上下移動、h でノードを折りたたみ、l で展開します。H を押すと現在のノードとすべての兄弟ノードを一度に折りたたむことができます——特定のブランチを掘り下げる前に全体を俯瞰するのに便利です。L はすべてを再帰的に展開します。すべてをトップレベルに折りたたんだ後、l で確認したいパスだけを展開しましょう。
# jless でレスポンスを開く curl -s https://api.github.com/repos/jqlang/jq | jless # jless 内で: # H → すべてのトップレベルキーを折りたたむ # j/k → 目的のキーに移動 # l → そのブランチだけを展開 # gg → ルートに戻る # G → 最後の要素に移動
ダークターミナルでjqのカラー出力を見やすくするには?
JQ_COLORS 環境変数にJSONの各型に対応したANSI属性とカラーコードを設定します。7つの位置は順番にnull、false、true、数値、文字列、配列、オブジェクトに対応します。export 文を ~/.bashrc または ~/.zshrc に記述すると、すべての jq 呼び出しに適用されます。ダーク背景では太字の明るい色が最もよく見えます。
# ダークターミナル向けハイコントラストテーマ——~/.bashrc または ~/.zshrc に追加
export JQ_COLORS="1;30:0;91:0;92:0;93:0;32:1;96:1;96"
# null=グレー, false=明るい赤, true=明るい緑,
# numbers=明るい黄, strings=緑, arrays/objects=明るい水色
# シェルをリロードせずにすぐテスト
echo '{"active":true,"errors":0,"tags":["api","v2"]}' | jq .JSONを表示するとき、jless と jq . の違いは何ですか?
jq . はすべての出力を一度にターミナルの上へ流してしまい、戻る方法がありません——小さなレスポンスには適していますが、50行を超えるものには実用的ではありません。jless はドキュメント全体をインタラクティブなページャでレンダリングし、コンテキストを失わずにスクロール、検索、ノードの折りたたみ、キーボードショートカットによるナビゲーションができます。小さなペイロードをざっと確認するときは jq . を、探索が必要なときは jless を使いましょう。
# 小さなペイロード——jq . で十分
echo '{"status":"ok","version":"2.4.1"}' | jq .
# 大きなまたはネストされたレスポンス——jless の方が適切
curl -s https://api.github.com/repos/jqlang/jq | jless
# → インタラクティブなツリー表示、出力が流れ去らないターミナルでcurlレスポンスのJSONをインタラクティブに表示するには?
curl を直接 jless にパイプします。curl の進捗バーが出力に混入しないよう、常に -s(サイレント)オプションを付けてください。jless は折りたたみ可能なツリーとしてフルレスポンスをレンダリングしたインタラクティブビューアを開きます。jless がインストールされていない場合は、jq -C . | less -R でカラー表示のページャとして代用できます。
# jless でインタラクティブに探索 curl -s https://api.github.com/users/torvalds | jless # カラー付きページャの代替(折りたたみなし、カラー付きでスクロール可能) curl -s https://api.github.com/users/torvalds | jq -C . | less -R
ターミナルで複数のJSONファイルを並べて表示できますか?
jless は一度に1つのファイルしか開けません。並べて比較するには、ターミナルマルチプレクサを使います。tmux split-window -h で垂直分割を開き、それぞれのペインで異なるファイルを jless で表示します。2つのドキュメントを構造的に比較したい場合は、ブラウザベースの JSON Diff ツールも利用できます。
# tmux で並べて表示:水平分割してそれぞれのペインで jless を実行 tmux split-window -h # 左ペイン: jless response-v1.json # 右ペイン: jless response-v2.json # またはjqで正規化した出力にdiffを使ってテキスト差分を取る diff <(jq -S . response-v1.json) <(jq -S . response-v2.json)
関連ツール
JSON Pretty Print ツールでは、jlessと同じ折りたたみ可能なカラー表示をブラウザ上で直接利用できます——インストール不要、ターミナル不要。
Cora is a platform engineer who builds developer tooling and internal platforms, using Bash as the glue that connects components written in different languages and runtimes. She writes about cross-platform shell scripting, Bash utility functions, environment management, configuration templating, and the practical shell techniques that platform engineers use to build self-service tooling for development teams.
Nadia is a site reliability engineer who lives in the terminal. She writes Bash scripts that process logs, transform data, and orchestrate infrastructure across fleets of servers. She is a heavy user of jq, awk, and sed and writes about shell one-liners, text processing pipelines, data serialisation from the command line, and the practical Bash patterns that SREs reach for when speed matters more than elegance.