テストツール

パターンの検証や差分の確認を行うツール群です。処理はすべてブラウザ内で完結するため、データが送信されることはありません。

パターンのテストと文章の比較

一致箇所、キャプチャグループ、置換結果、重いバックトラッキングを確認したい場合は正規表現テスターを使います。マッチ処理は時間制限付きのワーカーで実行されるため、危険な式でもページ全体が固まりません。

パターンではなく内容の変更点を調べる場合はテキスト差分ツールを使います。左右表示と統合表示に加え、大文字小文字、空白、行末スペースを無視する設定があり、二つの文書は端末内に留まります。

「何が変わったか」を問う2つの方法

パターンテスターが答えるのは形についての問いです。このテキストは自分が書いた規則に一致するか、そしてどの部分が捕捉されたか。差分ツールが答えるのは内容についての問いです。この2つは同じはずなので、違うところを見せてほしい、というものです。デバッグのほとんどはどちらか一方を必要とし、間違ったほうに手を伸ばすと20分の作業が半日になります。

フィールドを検証する、ログの行から値を抜き出す、コードベース全体で置換する。これらはパターンの問題です。2つのエクスポート、2つの設定ファイル、デプロイ前後のレスポンスを比べるなら、それは差分の問題です。

パターンは、テストしなかったところで失敗する

ほとんどの正規表現は、一致すべき入力を試しながら一致するまで書き直すという方法で作られ、その結果は決まって緩すぎるものになります。典型的なのが、アンカーがないために「中に有効なアドレスが埋まっていれば何でも」受け入れてしまうパターンで、作者が思いついたテストはすべて通ってしまいます。

だからこそ、一致してはいけない入力をテストしてください。形式の崩れた値、フィールドの中に現れる区切り文字、期待する形式にほぼ合っているのに少しだけ違う行などです。また、ここでのエンジンはブラウザのものなので、後読みや名前付きグループを使うパターンは、PythonやGo、PCREでは異なる挙動になることがあります。

同じに見える2行が同じでないとき

差分で最もよくある驚きは、目に見えない変更です。原因はほぼ常に見えないものにあります。行末の空白、Unixに対するWindowsの改行コード、相手のファイルではスペースになっているタブ、文書から貼り付けられたノーブレークスペース、1行目の先頭に居座るBOMなどです。

大文字小文字、空白、行末の空白を無視するオプションは、それを素早く絞り込むためにあります。本当の変更を見つけたらオプションは切ってください。設定ファイルでは、空白そのものが変更である場合もあるからです。