概要
LFTV のレビューおじさんです。Xin Chao. ホーチミンは地獄のような暑さです。
さて、ベトナムでは、基本的にエンジニアは自分が作ったものを検証しないので、「たぶん大丈夫なはず」くらいで、気軽にレビューを依頼してくる。1回目のレビューでは、おそらく検証していないであろう点を検証し、指摘する。
まず最初に検証するのは、
- 異常系
- 検証ボリュームが多く、確認作業が単調なもの
などが考えられる。間違いない。
異常系はコードをサラッと舐めて当たりをつけ、おかしなデータを用意したり、おかしなリクエストを投げてみれば良い。コードを細かくレビューするまでもない。
検証ボリュームが多く、確認が作業が単調なものは、こちらもやってられないので、網羅はしたいが手は抜きたい。
例えば、リンク切れがないかとか、動的に作られた sitemap.xml が正しく作られているかとか。今回は簡単に URL を抽出できる、sitemap.xml について検証する。
方針
どこまで検証するかは悩みどころだが、ひとまず URL に関しては HTTP status が 200 となっていれば OK とする。当然いちいちブラウザで開いて確認してられないので、 curl する。
$ curl -I -sS $URL | grep HTTP
HTTP/1.1 200 OK
こんな感じ。URL リストを読み込みながら処理して行きたい。URL リストは、sitemap.xml の中に書いてある。
今は、URL さえ分かれば良いので、xml をパースしたりはせず、cat して加工する。
$ cat sitemap.xml | grep "<loc" | sed -e "s/^.*<loc>//g;s/<\/loc>.*$//g"
sitemap.xml の書き方として、URL は attribute なしの loc 要素として記述されているので、抽出は簡単(grep "<loc")。なお、xml は改行はされているものとする(されていない場合は、grep の前に工夫して改行して)。行頭・行末の不要なものを取り除けば(sed...)、欲しい URL リストの出来上がり。
読み込む sitemap.xml は複数に分割されている場合があるので、パラメータとして受け取れるようにしておく。そんなに頻繁に使うものではないので、ファイルの走査などはやめておく。
出力は、URL と HTTP Status の組み合わせを出していくものとする。
以上を組み合わせた bash スクリプトを書いておけば、それを叩くだけで、検証することが可能になる。楽ちん。
今更ではあるが、検証するサービスの Web サーバが curl を受け付けてくれないと使えない。
完成したスクリプト
#!/bin/bash
cat $1 | grep "<loc" | sed -e "s/^.*<loc>//g;s/<\/loc>.*$//g" | while read line
do
echo -n $line
echo -n " : "
curl -I -sS $line | grep HTTP
# 負荷を気にするなら sleep 1 とかお好きに
# sleep 1
done
exit;
使い方
$ ./chk_http_stutus_sitemap.sh sitemap.xml
エラー部分だけで良ければ、
$ ./chk_http_stutus_sitemap.sh sitemap.xml | grep -v "200 OK"
とか。(これがやりたかったので、出力結果は1行にした)
やってみた
実際のプロジェクトの sitemap.xml を検証してみた(バシっ
$ ./chk_http_stutus_sitemap.sh sitemap.xml
///****_st/ : curl: (3) <url> malformed
https://..... : HTTP/1.1 200 OK
^C
1つ目からかよ笑