1. APIのレスポンスをきれいに表示する(curlとjq)

curl で取得したJSONデータは、1行にまとまっていて読みにくいことがよくあります。そこで、jq コマンドをパイプ(|)でつなぐのが定番の組み合わせです。

JSONを整形して表示する

curl -s https://api.example.com/data | jq .

-s は、ダウンロードの進捗ゲージなどの余計な出力を表示しないためのオプションです。取得したレスポンスを jq . に渡すことで、インデントされた読みやすいJSONとして画面に出力されます。

エラーメッセージは確認したい場合、進捗表示だけを消す -sS の組み合わせも便利です。

curl -sS https://api.example.com/data | jq .
jqが必要ですjq がインストールされていない環境ではコマンドが見つからないというエラーになります。UbuntuやDebian系では sudo apt install jq でインストールできます。

2. curlで自分のIPアドレスを確認する

外部のWebサービスから見えている自分のグローバルIPv4アドレスは、curl で ipify のAPIへアクセスすると確認できます。

curl -s https://api.ipify.org
echo

APIから返されるIPアドレスには改行が付かないため、続けて echo を実行して表示を改行しています。1コマンドで改行まで含めたい場合は、次のようにも書けます。

curl -sS -w '\n' https://api.ipify.org

ここで表示されるのは、インターネット側から見えるグローバルIPアドレスです。LAN内で使われている 192.168.x.x などのプライベートIPアドレスとは異なります。また、VPNやプロキシを利用している場合は、その出口側のIPアドレスが表示されます。

外部サービスへの通信この方法では、IPアドレス確認サービスへ実際にHTTPSリクエストを送信します。機密性の高い環境や通信先が制限されたサーバーでは、利用ルールを確認してから実行してください。

4. ネットワークの疎通やポートを確認する(pingとnc)

「APIが応答しない」「サーバーに接続できない」という時に、サーバーまでの通信経路と待ち受けポートを分けて調べることで、原因を切り分けられます。

サーバー自体が応答するか確認する(ping)

ping -c 4 example.com

-c 4 を付けることで、4回だけ通信して自動終了します。応答の有無に加えて、パケットロスや往復時間も確認できます。

pingが通らない場合サーバーやファイアウォールがICMP通信を拒否していると、WebサイトやAPIが正常に動いていても ping には応答しません。疎通確認の結果だけでサーバーが停止しているとは判断せず、続けて対象ポートも確認します。

特定のポートが開いているか確認する(nc / netcat)

次の例では、example.com のHTTPSで使われる443番ポートへ接続できるかを調べます。

nc -vz example.com 443

-v は結果を詳しく表示するオプション、-z はデータを送信せずにポートの接続可否だけを調べるオプションです。通信エラーが発生した際、アプリケーションの問題なのか、ネットワークやファイアウォールの問題なのかを切り分ける手掛かりになります。

接続に失敗する原因には、ファイアウォールによる遮断だけでなく、DNSや通信経路の問題、サーバー側で対象ポートが待ち受けていないことなどもあります。nc の結果だけで原因を断定せず、エラーメッセージやサーバー側の状態も併せて確認します。

nc が入っていないUbuntuやDebian系の環境では、sudo apt install netcat-openbsd などでインストールできます。