検証コマンド自身を疑う
「確認したので問題ありません」と言うとき、確認の道具が壊れていることがあります。このサイトの制作中に実際に踏んだ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周する必要があったこともあります。以後は、確認したい文字列が全対象ページで揃うまで繰り返し、揃ってからもう一度通す運用にしています。
共通していること
- 検査が期待と違う答えを返したら、まず検査を疑う。 実装を疑うのはその次
- 既知の正解で検査を試す。 必ず1件見つかるはずの文字列で試し、見つかることを確かめてから本番の検査に使う
- 別の見方でもう一度確かめる。 件数を数えたなら、一覧も出してみる。目で数えられる量なら数える
- 「0件でした」を良い知らせとして受け取らない。 0件は、無いことの証明ではなく、見つからなかったという報告
最後の項目がいちばん効きます。禁止した語彙が出力に含まれていないことを検査するとき、返ってくる「0件」は安心を与えますが、検査対象のディレクトリを間違えていても0件です。そういうとき、私は一度わざと引っかかる語を混ぜて、検査が反応することを確かめます。
この記事に書いた3つは、いずれもこのサイトの制作中に踏んだものです。検査を増やすほど、検査そのものが信頼の対象になります。
この記事の元
この記事は、このポータル(churaneko.com)の制作で実際にやったことから書き起こしています。 方針そのものは運営方針にまとめています。