検証コマンド自身を疑う

制作ノート

「確認したので問題ありません」と言うとき、確認の道具が壊れていることがあります。このサイトの制作中に実際に踏んだ3つを書きます。

出力を機械的に検査する習慣をつけると、確認そのものが自動化されて安心します。ところが、検査が「問題なし」を返す理由は2つあります。本当に問題がない場合と、検査が問題を見つけられていない場合です。この2つは見分けがつきません。

このポータルを作る過程で踏んだものを、3つ書きます。いずれも実際にやりかけました。

1. 行を数えるコマンドで、件数を数えていた

公開後にサイトマップを検査したときのことです。「URLがいくつ入っているか」を数えるつもりで、一致した行数を数えるオプションを使いました。返ってきた答えは「1」でした。

サイトマップには15件のURLが入っています。なぜ1になるかというと、ファイル全体が1行だったからです。改行の無いXMLでは、何件一致しても行数は1です。検査は正常に動作していて、私が聞いた質問が間違っていました。

危ないのは、この結果が「1」というそれらしい数字だったことです。0なら異常に気づけます。1という数字は「サイトマップが1つある」という別の解釈が成り立ってしまい、そのまま通り過ぎるところでした。一致した箇所そのものを数える指定に変えたら、正しく15と出ました。

2. 完全一致で探したが、出力には余計なものが付いていた

ページに特定の要素が出ているかを、書いたとおりの文字列で探しました。0件でした。実装を疑い、条件分岐を読み直し、しばらく悩みました。

原因は、使っているフレームワークがスタイルの適用範囲を限定するために、クラス名へ自動的に識別子を足していたことです。書いたとおりの文字列は、出力には存在しません。前方一致に変え、あわせて画面に出る日本語のほうを探したら、正しく見つかりました。

教訓は、「自分が書いた文字列」と「出力される文字列」は別物だということです。間に何かを挟む仕組みを使っているなら、検査は出力側の実物に合わせる必要があります。

3. 1回確認して、反映されていないと判断しかけた

配信の仕組みを更新したあと、新しいページが出ているかを確認しました。404が返りました。設定を疑いましたが、その前にもう一度取得したら200が返りました。

配信網へ反映が行き渡るまでのあいだ、古い版と新しい版が混ざって返るのが原因でした。しかも、どのページが古い版を返すかは取得のたびに変わります。あるときはトップだけ古く、あるときは別のページだけ古い、という状態です。

1回の取得で判定していたら、存在しない不具合を追いかけていました。実際に、全ページで揃うまで通しの確認を2周する必要があったこともあります。以後は、確認したい文字列が全対象ページで揃うまで繰り返し、揃ってからもう一度通す運用にしています。

共通していること

最後の項目がいちばん効きます。禁止した語彙が出力に含まれていないことを検査するとき、返ってくる「0件」は安心を与えますが、検査対象のディレクトリを間違えていても0件です。そういうとき、私は一度わざと引っかかる語を混ぜて、検査が反応することを確かめます。

この記事に書いた3つは、いずれもこのサイトの制作中に踏んだものです。検査を増やすほど、検査そのものが信頼の対象になります。

この記事の元

この記事は、このポータル(churaneko.com)の制作で実際にやったことから書き起こしています。 方針そのものは運営方針にまとめています。

ほかの制作ノート

制作ノート(一覧)へ戻る