
ターミナルで使える便利コマンドメモ(サイト速度・DNS・画像)
サイトの速度やDNSを調べるときに使った、ターミナル(Mac)のコマンドのメモです。example.com の部分は、調べたいドメイン名に置き換えて使います。
1. キャッシュとCDNを確認する
Cloudflareのキャッシュが効いているか
curl -sI https://example.com/ | grep -iE "^(cf-cache-status|age)"2回続けて実行します。1回目が MISS(キャッシュなし)、2回目が HIT(キャッシュから返した)になれば成功です。age は、キャッシュに置かれてからの秒数です。
どのCDN・どの拠点から返っているか
curl -sI https://example.com/ | grep -iE "^(server|cf-ray|cf-cache-status|x-qc-pop|x-qc-cache)"server: cloudflare ならCloudflare経由です。cf-ray の末尾が拠点の空港コードです(KIX=大阪、NRT=東京、SIN=シンガポール、PDX=ポートランド)。x-qc-pop が出れば、QUIC.cloud経由で、そのPOP名が拠点です(例: AS-JP-HND-HYBRID-141=羽田、AS-IL-TLV-261=テルアビブ)。
2. 表示の速さ(TTFB)を測る
curl -s -o /dev/null -w "connect:%{time_connect} tls:%{time_appconnect} ttfb:%{time_starttransfer}\n" https://example.com/connectは接続まで、tlsは暗号化の準備まで、ttfbは最初の1バイトが届くまでの秒数です。1回目は遅めに出ることがあるので、3回続けて測ります。
for i in 1 2 3; do curl -s -o /dev/null -w "connect:%{time_connect} ttfb:%{time_starttransfer}\n" https://example.com/; done世界の複数の地点から測るなら、PageVitalsのTTFB Tester(東京・大阪などを選べます)が便利です。測り直すときは、パージ(キャッシュ消去)をしないほうが、安定した数値が出ます。
3. DNSを調べる
dig +short NS example.com # ネームサーバー
dig +short A example.com # サイトのIPアドレス
dig +short MX example.com # メールの受け取り先
dig +short TXT example.com # SPFなどの設定ネームサーバーを変えたあとは、dig +short NS に新しい名前(例: xxx.ns.cloudflare.com)が出れば、切り替わっています。
古いDNSの答えが残っているとき(Mac)
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder4. サーバーのIPに直接つないで確かめる
curl -sI --resolve example.com:443:サーバーのIP https://example.com/DNSの設定を変える前に、そのIPが本当にサイトを返すか確認できます。200 が返り、server などが期待どおりなら、そのIPは正しいです。
5. 自作のコマンド(~/.zshrc に登録)
ターミナルを開くたびに自動で読み込まれる設定ファイル ~/.zshrc に、次を書いておくと、短い名前で使えます。書き換えたあと、いま開いているターミナルに反映するときは source ~/.zshrc を実行します(新しく開き直せば不要です)。
qcpop:拠点・キャッシュ・自分の公開IP・秒数をまとめて見る
qcpop example.comこの内容(自作コマンドのスクリプト)は、ログインした会員だけに表示されます。ログインはこちら
QUIC.cloud経由のサイトなら、x-qc-pop(拠点)と x-qc-cache(hit=拠点が持っていた、miss=オリジンまで取りにいった)が出ます。それ以外のCDN(Cloudflareなど)では、この2行は出ません。
imgsmall:画像を縮小してWebPにする(元のファイルは変更しない)
imgsmall() { python3 ~/bin/imgsmall.py "$@"; }この内容(自作コマンドのスクリプト)は、ログインした会員だけに表示されます。ログインはこちら
imgsmall 画像のパス # 800px幅・画質72(初期値)
imgsmall 画像のパス 768 75 # 幅と画質を指定同じ場所に 元の名前-800w-q72.webp のような名前で保存されます。650KBの画像が、約70KBになった実績があります。画像のパスは、Finderからターミナルにドラッグ&ドロップすると入力できます。本体のスクリプト(~/bin/imgsmall.py)は、Pythonの画像ライブラリ Pillow を使います。
画像を軽くするときの目安: 縮小の効果が大きく(画素数が減る)、そのうえで画質を70〜75程度にします。PNGは軽くなりにくいので、WebPやJPGに変えてからアップロードします。
6. 画像の形式を比べる(JPEG・WebP・AVIF)
同じ画像を、同じ大きさに縮小して、形式ごとの容量を測りました(Pillowで変換)。AVIFは、WebPより一段小さくなる傾向があります。
| 画像 | JPEG q80 | WebP q72 | AVIF q50 | AVIF q40 |
|---|---|---|---|---|
| ヘッダー画像(800幅) | 107KB | 70KB | 56KB | 41KB |
| アイキャッチA(768幅) | 197KB | 117KB | 81KB | 61KB |
| アイキャッチB(768幅) | 188KB | 114KB | 78KB | 58KB |
- 画質の数字は、形式ごとに基準が違います。AVIF q50〜60が、WebP q72前後と同じくらいの見た目の目安です。画像ごとに、目で確認します。
- AVIFは、変換に時間がかかります。古い機器では表示できないことがあり、対応の広さはWebPのほうが上です。
- WordPress(6.5以降)は、AVIFのアップロードに対応しています。ただしCDNやプラグインの組み合わせで表示されないことがあるので、アップロード後に、サイトで表示を確認します。
- 差は数十KBなので、普段はWebPで十分です。さらに軽くしたいときに、AVIFを試します。
PillowでAVIFに対応しているかの確認と、保存の書き方です。
python3 -c "from PIL import features; print(features.check('avif'))" # True なら対応
# 保存の例(Pythonの中で)
# im.save("out.avif", "AVIF", quality=50)
