Linuxを使い始めると、必ずといっていいほどJSON形式のデータに遭遇します。
Dockerの状態確認、WebサービスのAPI、クラウドの設定情報など、現代のLinux環境ではJSONがいたるところで登場します。
この記事では、JSONデータをLinuxのターミナルで手軽に扱えるようにするコマンド「jq」の使い方を解説します。
インストールから基本操作、Dockerとの組み合わせまで、ITが初めての方でも理解できるよう一つひとつ説明します。
実行環境: Ubuntu 24.04 LTS(WSL2・VPS)および Rocky Linux 9(VPS)で動作確認済み
この記事のポイント
・jqはJSON出力を整形・抽出できるLinuxの標準的なコマンドツール
・apt install jq または dnf install jq で1分でインストールできる
・. フィルタで整形、.キー名 で値抽出、.[] で配列展開が基本操作
・Dockerやクラウド設定の確認など、現場で毎日使うレベルで役立つ
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
JSONとは何か? jqが必要になる理由
JSON(ジェイソン)とは「JavaScript Object Notation」の略で、コンピュータ同士がデータをやり取りするときによく使われる形式です。難しい名前ですが、内容は「名前と値のセット」を{}や[]でまとめたシンプルなデータ形式です。
たとえば、Dockerでコンテナの状態を確認するときや、天気予報サービスのAPIを呼び出したときに、次のようなJSONが返ってきます。
# DockerコマンドのJSON出力(例) {"Id":"a3b7c9d1e5f2","Name":"/web","State":{"Status":"running","Running":true},"NetworkSettings":{"IPAddress":"172.17.0.2","Ports":{"80/tcp":[{"HostIp":"0.0.0.0","HostPort":"80"}]}}}
これを読みやすく整形し、必要な部分だけ取り出してくれるのが
jq コマンドです。jq を使うと、同じデータが次のように表示されます。# jqで整形した場合の表示(実行結果) { "Id": "a3b7c9d1e5f2", "Name": "/web", "State": { "Status": "running", "Running": true }, "NetworkSettings": { "IPAddress": "172.17.0.2", "Ports": { "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" } ] } } }
jqが役立つ主な場面
・Dockerコンテナの詳細情報(docker inspectの出力)を確認する
・GitHub・AWSのCLIコマンドがJSON形式で返す結果を読む
・ChatGPTやClaude APIなどのAI APIレスポンスを整形する
・設定ファイル(package.json、docker-compose.ymlなど)の内容を素早く確認する
jqのインストール方法
jq はほとんどのLinuxディストリビューションの標準パッケージリポジトリに含まれており、1コマンドでインストールできます。1. Ubuntu / Debian(WSL2を含む)
WSL2のUbuntuや、さくらVPS・ConoHaなどでUbuntuを使っている場合はapt でインストールします。# パッケージリストを更新してjqをインストール sudo apt update sudo apt install -y jq
Y と入力してEnterを押してください。2. Rocky Linux / RHEL / AlmaLinux
RHEL系のサーバーではdnf を使います。# dnfでjqをインストール sudo dnf install -y jq
3. インストールの確認
インストールが完了したら、バージョンを確認して動作を確かめます。# jqのバージョン確認 jq --version
jq-1.7.1
jqの基本操作(最初に覚える5つのパターン)
jq のコマンド形式は次の通りです。# 基本形式(1)パイプで渡す コマンド | jq 'フィルタ' # 基本形式(2)ファイルを読む jq 'フィルタ' ファイル名.json
順番に覚えていきましょう。
1. .(ドット)で全体を見やすく表示する
.(ドット1つ)は「全体を整形して表示する」という意味のフィルタです。1行にまとまっているJSONを、インデント付きで見やすく整形してくれます。
まず練習用のJSONデータを用意します。
# 練習用のJSONをechoで作る echo '{"name":"taro","age":30,"city":"Tokyo"}' | jq '.'
{ "name": "taro", "age": 30, "city": "Tokyo" }
jq '.' の基本です。2. キー名で特定の値を取り出す
.キー名 の形で、特定のキーの値だけを取り出せます。# "name" の値だけ取り出す echo '{"name":"taro","age":30,"city":"Tokyo"}' | jq '.name' # "city" の値だけ取り出す echo '{"name":"taro","age":30,"city":"Tokyo"}' | jq '.city'
"taro" "Tokyo"
JSONがネスト(入れ子)になっている場合は、
.親キー.子キー のようにドットでつなぎます。# address の中の city を取り出す echo '{"name":"taro","address":{"city":"Tokyo","zip":"100-0001"}}' | jq '.address.city'
"Tokyo"
3. .[] で配列を展開する
[...] で囲まれた「配列」形式のJSONは、.[] で各要素を展開できます。# 配列を展開して1件ずつ表示する echo '[{"name":"taro"},{"name":"hanako"},{"name":"jiro"}]' | jq '.[]'
{ "name": "taro" } { "name": "hanako" } { "name": "jiro" }
.[0](0番目、つまり最初の要素)のように指定します。# 最初(0番目)の要素だけ取り出す echo '[{"name":"taro"},{"name":"hanako"},{"name":"jiro"}]' | jq '.[0]' # 2番目の要素を取り出す echo '[{"name":"taro"},{"name":"hanako"},{"name":"jiro"}]' | jq '.[1]'
{ "name": "taro" } { "name": "hanako" }
4. | でフィルタを連結する
Linuxのパイプ(|)と同様に、jqのフィルタもパイプでつなげられます。「配列を展開して、その中のキーを取り出す」という操作を1行で書けます。
# 配列を展開して、各要素の "name" だけを取り出す echo '[{"name":"taro","age":30},{"name":"hanako","age":25}]' | jq '.[] | .name'
"taro" "hanako"
5. ファイルに保存されたJSONを処理する
ファイルとして保存されているJSONは、ファイル名を直接渡せます。# data.json というファイルを整形して表示 jq '.' data.json # data.json の "name" キーだけ取り出す jq '.name' data.json
cat data.json | jq '.' と書いても同じ結果になりますが、jq '.' data.json の方がシンプルです。実践的な使い方 ─ Dockerと組み合わせる
ここからは、実際のLinux環境でよく使う場面を紹介します。Dockerをインストール済みの環境(WSL2 with Docker、VPSなど)でお試しください。
1. docker inspect の結果を整形して確認する
docker inspect コンテナ名 はコンテナの詳細情報をJSONで返しますが、そのままでは読みにくい大量のデータです。jq '.' を組み合わせると、スクロールしながら読める形式に整形できます。# nginxコンテナの詳細情報を整形して表示 docker inspect web | jq '.'
[ { "Id": "a3b7c9d1e5f29a83b2c4d6e7f8a9b0c1d2e3f4a5", "Created": "2026-09-10T08:23:14.523891Z", "Path": "nginx", "Args": [ "-g", "daemon off;" ], "State": { "Status": "running", "Running": true, "Pid": 1234 }, ... } ]
2. コンテナのIPアドレスだけを取り出す
詳細情報の中から、特定の値(IPアドレスなど)だけを素早く抜き出す使い方です。# コンテナのIPアドレスを取り出す docker inspect web | jq '.[0].NetworkSettings.IPAddress'
"172.17.0.2"
.[0](配列の最初の要素)の中の .NetworkSettings.IPAddress を指定しています。この方法で、大量の情報の中から必要な値だけを1行で取り出せます。
3. 起動中のコンテナ名を一覧表示する
# docker psのJSON出力からコンテナ名だけを抽出 docker ps --format '{{json .}}' | jq -r '.Names'
web db redis
-r オプションは「raw output」の意味で、結果の前後の引用符(")を外してプレーンテキストで表示します。スクリプトの中で値を変数に代入したい場合は
-r を付けるのが一般的です。フィルタの組み合わせと応用
基本操作に慣れてきたら、より実用的なフィルタを覚えましょう。1. select()で条件に合う要素だけ抽出する
配列の中から「特定の条件に合う要素だけ」を取り出すにはselect() を使います。# statusが"running"のコンテナだけを取り出す docker inspect | jq '.[] | select(.State.Status == "running") | .Name'
"/web" "/db"
2. keys で JSONのキー一覧を確認する
「このJSONにはどんなキーがあるか」を確認したいときはkeys を使います。初めて見るJSONを調べるときに重宝します。
# JSONのキー一覧を表示する echo '{"name":"taro","age":30,"city":"Tokyo"}' | jq 'keys'
[ "age", "city", "name" ]
3. length で要素数を数える
length は配列の要素数や文字列の長さを返します。# 配列の要素数を数える echo '["a","b","c","d"]' | jq 'length' # 起動中コンテナの数を数える docker ps --format '{{json .}}' | jq -s 'length'
4 3
-s(スラーブ)オプションは、複数行のJSONをまとめて1つの配列として受け取るオプションです。トラブルシュート・よくあるエラーと対処法
「parse error: Invalid numeric literal」が出る
入力データがJSONとして正しくない形式のとき、このエラーが出ます。# エラーが出る例(JSONではないテキストを渡している) echo "hello world" | jq '.' # エラーメッセージ parse error (Invalid numeric literal at EOF at line 1, column 12): hello world
・入力データが本当にJSON形式かどうかを確認する
・コマンドの出力がJSONかどうかをまず
echo で確認してから jq に渡す・JSON形式の出力オプション(例:
docker inspect、--format json)を付け忘れていないか確認するnull が返ってくる(キーが見つからない)
指定したキーが存在しないとnull が返ります。# "email" というキーが存在しない場合 echo '{"name":"taro","age":30}' | jq '.email'
null
・
keys でキー一覧を確認して、正しいキー名を調べる・大文字・小文字の違い(
Name と name)や、スペルミスに注意する・配列を展開していない場合は
.[] を先に付けてから .キー名 を指定する「No such file or directory」が出る
ファイル名を直接指定したのに、ファイルが存在しない場合のエラーです。# 存在しないファイルを指定した場合 jq '.' config.json # エラーメッセージ jq: error: Could not open file config.json: No such file or directory
・
ls でファイルが存在するか確認する・現在のディレクトリ(
pwd で確認)にファイルがあるか確認する・ファイルパスのスペルミスがないか確認する
本記事のまとめ
この記事では、Linuxのjqコマンドの基本的な使い方を解説しました。| やりたいこと | jqの書き方 |
|---|---|
| JSONを見やすく整形する | コマンド | jq '.' |
| 特定のキーの値を取り出す | コマンド | jq '.キー名' |
| ネストされたキーを取り出す | コマンド | jq '.親.子' |
| 配列を展開する | コマンド | jq '.[]' |
| 配列の特定要素を取り出す | コマンド | jq '.[0]' |
| 配列の各要素からキーを抽出 | コマンド | jq '.[] | .キー名' |
| 条件に合う要素だけ取り出す | コマンド | jq '.[] | select(.キー == "値")' |
| 引用符なしで出力する | コマンド | jq -r '.キー名' |
| JSONのキー一覧を表示する | コマンド | jq 'keys' |
| 要素数を数える | コマンド | jq 'length' |
| ファイルのJSONを処理する | jq 'フィルタ' ファイル名.json |
まずは
docker inspect コンテナ名 | jq '.' を試して、整形されたJSONを眺めてみてください。「あの情報だけ取り出せないか」と思ったときに、この記事のフィルタ一覧を参考にしてみてください。
次に読む記事(Linux入門シリーズ)
・Linuxのコマンドライン入門|ターミナルの開き方から基本操作まで
・Linuxのパイプとリダイレクト入門|コマンドをつなげて処理を効率化する方法
・Linuxのテキスト処理入門|cat・less・grep・headでファイルの中身を読む方法
・LinuxでDockerをはじめる入門|コンテナとVMの違いを理解してUbuntuで最初のコンテナを動かす方法
・LinuxでOllamaを使ってAIと会話する入門|WSL2やVPSに無料でLLMをインストールする方法
実務で使うLinuxスキル 7テーマ
・tmuxコマンドでターミナルを分割・管理する方法(シェルスクリプト)
・ssh-keygenコマンドでSSH公開鍵認証を設定する方法(セキュリティ)
・Apacheのタイムアウト設定を変更・確認する方法(サーバー構築)
・straceコマンドでプロセスのシステムコールを追跡する方法(トラブルシューティング)
・ncコマンドでネットワーク接続をテストする方法(ネットワーク)
・rsyncコマンドでファイルを同期・転送する方法(ファイルシステム・ストレージ)
・Linuxでポート番号の状態を確認するコマンド(現場コラム)
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:Linuxのパイプとリダイレクト入門|コマンドをつなげて処理を効率化する方法をWSL2・VPSで解説
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます