2026年6月11日
2026年6月11日
doggo の出力を読み解くポイント|表の各列、TTL の「s」、複数の問い合わせ先と JSON の読み方
doggo の出力は、NAME・TYPE・CLASS・TTL・ADDRESS・NAMESERVER の列が並ぶ表です。読むときは、NAME で「実際に問い合わせた名前」、TYPE と ADDRESS で「返ってきた値」、TTL と NAMESERVER で「その値をどこが、あとどのくらい使うか」を確かめる、という順にすると迷いません。この記事では、各列の意味と読み違えやすい点、答えが無いときの見え方、--time・--short・--json、世界各地から問い合わせる機能の結果の読み方を説明します。
doggo のオプションや表示は版によって追加・変更されることがあります。この記事の内容は執筆時点(2026年10月現在)の公式ドキュメントを基準にしているので、手元では doggo --help の表示を優先してください。導入方法や基本の問い合わせの書き方は、別の記事で扱っています。
表の基本の形
$ doggo example.com
NAME TYPE CLASS TTL ADDRESS NAMESERVER
example.com. A IN 300s 192.0.2.10 127.0.0.53:53
example.com. A IN 300s 192.0.2.11 127.0.0.53:53
1行が1件のレコードです。同じ名前に複数のアドレスが登録されていれば、行が増えます。端末では列ごとに色が付きますが、ログに保存したり別のコマンドに渡したりするときは、--color=false で色を外すと制御文字が混ざりません。
NAME:実際に問い合わせた名前を確かめる
NAME の末尾のドットは、ルートまで書いた完全な名前であることを示すもので、誤りではありません。
注意したいのは、入力した名前と NAME の列が違う場合です。doggo は既定で resolv.conf の search の設定を使うため、ドットの少ない短い名前を渡すと、社内ドメインなどが補われた名前を問い合わせることがあります。NAME が意図しない名前になっていたら、名前の末尾にドットを付けて問い合わせ直すか、--search=false で補いを止めます。補うかどうかの判断に使われる ndots の値も --ndots で変えられます。
TYPE と ADDRESS:CNAME を含む応答は上から順に読む
ADDRESS の列は名前こそ「アドレス」ですが、A や AAAA に限らず、そのレコードの値が入る列です。MX なら優先度とメールサーバー名、TXT なら文字列、NS ならネームサーバー名が表示されます。
CNAME が設定された名前を問い合わせると、表は次のようになります。
NAME TYPE CLASS TTL ADDRESS NAMESERVER
www.example.com. CNAME IN 3600s site.cdn.example.net. 1.1.1.1:53
site.cdn.example.net. A IN 60s 198.51.100.20 1.1.1.1:53
1行目で www が別名に置き換えられ、2行目は置き換え先の名前のアドレスです。2行目の NAME が自分のドメインではない点に注目してください。アドレスが想定と違う場合、直す場所は CDN やホスティング事業者の側かもしれません。また、行ごとに TTL が違うのは、それぞれ別のゾーンで別の値が設定されているからです。
TTL:末尾の s は秒、問い合わせ先で意味が変わる
doggo は TTL を 300s のように、秒を表す s を付けて表示します。数字そのものの意味は、問い合わせ先によって変わります。
- 権威サーバーに聞いた場合:ゾーンに設定された値がそのまま表示されます。何度聞いても同じ数字です。
- キャッシュサーバーに聞いた場合:そのキャッシュが期限切れになるまでの残り秒数です。続けて問い合わせると数字が減っていきます。
DNS の設定を変えた直後に古い値が返ってくるときは、キャッシュサーバーに聞いた TTL を見ると、あとどのくらいで切り替わるかの目安が分かります。設定値と同じ数字が表示されたら、そのサーバーがちょうど権威サーバーから取り直した直後だと考えられます。
NAMESERVER:誰が答えたかを確かめる
NAMESERVER の列は、その行の答えを返したサーバーです。
127.0.0.53:53は、Ubuntu などで動いている systemd-resolved のスタブリゾルバーです。実際にどの上流サーバーが答えたかはここからは分からないので、他の端末と比べるときは@1.1.1.1のように問い合わせ先を明示します。@https://...や@tls://...で暗号化 DNS に問い合わせた場合は、その URL やアドレスが表示されます。指定した方式で問い合わせられたかの確認になります。@を複数並べると、サーバーごとに行が並びます。同じ名前で ADDRESS が違う行があれば、どちらかのサーバーに古いキャッシュが残っています。
複数の問い合わせ先があるとき、すべてに聞くか、1台だけに聞くかは --strategy(all・random・first)で選べます。設定によっては一部のサーバーの答えしか表示されないので、比べたいときは all を指定してください。
答えが無いときの見え方
名前が存在しない、または指定した種別のレコードが無いときは、表に答えの行が出ません。版や状況によっては、代わりにゾーンの SOA の行が表示されたり、エラーのメッセージが出たりします。SOA の行が出た場合、それは「答えが無いことを伝えるために添えられた管理情報」で、問い合わせた名前の値ではありません。NAME の列がゾーン名(example.com. など)になっていることで見分けられます。
「名前が無い(NXDOMAIN)」のか「種別が無い(NODATA)」のか、「サーバーが答えを作れなかった(SERVFAIL)」のかを正確に区別したいときは、次のどれかで確認します。
--jsonの出力で、応答の状態を表す項目を見る--debugで詳しいログを出す- dig で同じ問い合わせをして、ヘッダーの status を見る
DNSSEC の検証の失敗が疑われる場合は、--ede で拡張エラー(Extended DNS Errors)を要求すると、対応しているリゾルバーなら失敗の理由が返ることがあります。
応答時間を見る:--time
--time を付けると、応答にかかった時間が表示されます。
doggo example.com @8.8.8.8 --time
同じ問い合わせを2回続けて、1回目より2回目が大幅に速ければ、2回目はキャッシュから返ったと考えられます。いつ聞いても遅いサーバーがあれば、そのサーバーまでの経路か、権威サーバーの応答の遅さを疑います。
--short と --json を読む
値だけが欲しいときは --short を使います。表の ADDRESS の列にあたる値だけが1行ずつ出ます。CNAME がある名前では置き換え先の名前も混ざることがあるので、IP アドレスだけを使いたい処理では、行が IP の形かを確かめてから使います。
--json(-J)では、各レコードが name・type・class・ttl・address・rtt・nameserver などの項目を持つ形で出力されます。ここで注意したいのは、ttl が "300s" のような文字列で、s が付いたままだという点です。数値として比べるには、s を取り除く必要があります。
# 構造を確かめる
doggo example.com A --json | jq .
# 構造の深さに関係なく、ttl を持つ項目から値と TTL を取り出す
doggo example.com A --json \
| jq -r '.. | objects | select(has("ttl")) | "\(.address) \(.ttl | sub("s$"; ""))"'
JSON の入れ子の形は、問い合わせ先が1つか複数かなどで変わる場合があります。上の例では .. で全体をたどり、ttl を持つ項目だけを選んでいるので、入れ子の形が違っても値を取り出せます。それでも、版を上げたときは jq . で構造を一度確かめてください。
世界各地から問い合わせた結果を読む
新しめの doggo には、外部の Globalping の測定網を使って、指定した地域から問い合わせる機能があります。
doggo example.com --gp-from Germany,Japan --gp-limit 2
この場合、表の前に LOCATION(測定点の都市・国・ネットワーク)が表示され、その下にその地点での答えが並びます。NAMESERVER の列が private のように表示されることがあり、測定点で使われたサーバーの詳細は分かりません。地域によって ADDRESS が違うのは、CDN や地域別の応答をする DNS を使っていれば正常な動作です。
この機能は外部サービスに問い合わせる名前を送ることになるので、社内専用のホスト名には使わないでください。利用回数の制限や条件は Globalping 側で決まり、変わることがあります。
まとめ
- doggo の表は1行1レコードで、NAME・TYPE・CLASS・TTL・ADDRESS・NAMESERVER を順に読みます。
- NAME が入力と違うときは、search による補いを疑い、末尾のドットや
--search=falseで問い合わせ直します。 - CNAME を含む応答は上から順に読み、各行がどのゾーンの値かを NAME で見分けます。
- TTL の s は秒で、キャッシュサーバーなら残り時間、権威サーバーなら設定値です。
- 答えが無いときの状態は
--json・--debug・dig で確かめ、JSON の ttl は s を取り除いてから数値として扱います。