テキスト・正規表現
文章や設定ファイルの変更箇所だけ確認したい
使うツール
設定ファイルを見比べて『どこか違う』と感じても、長い文章を目で追うだけでは見落とします。一方、差分ツールで赤や緑が大量に出ると、変更が多すぎるようにも見えます。違いを見つけることと、違いの意味を判断することは別の作業です。まず表示の単位を選び、確認したい変更だけに視線を集めましょう。
テキスト差分は、二つの原文を文字列として比較します。設定を実行したり、文章の意味が同じかを判定したりはしません。『変更前を左、変更後を右』と決めて、小さな例から表示を読みます。この向きをそろえるだけで、追加と削除を逆に説明してしまう事故を減らせます。
30を60へ変えたとき、なぜ二つ表示される?
host=example.invalid
timeout=30
retries=3
host=example.invalid
timeout=60
retries=3
行単位で比較すると、timeout=30の行が削除、timeout=60の行が追加になります。人間には一か所の変更でも、文字列の差分では古い行を取り除き、新しい行を入れる形で表せます。追加1・削除1を『設定を二項目変えた』と読み替えないでください。件数は比較単位に基づく量で、変更した仕様や操作の数ではありません。
左と右を入れ替えると、追加と削除の向きも反転します。結果を誰かへ渡すときは、どちらが変更前かを書き添えましょう。原文を消して差分だけを残すと、前後関係や設定の単位が失われることがあります。レビュー用には変更箇所だけでなく、近くの説明や周辺の行も一緒に確認できる状態を保ちます。
長い一行は、文字単位で掘り下げる
同じ例を文字単位へ切り替えると、30の3が削除され、60の6が追加されたことを追えます。行単位は『どの行か』を見つけやすく、文字単位は『その行のどこか』を見つけやすい、という使い分けです。長いURL、CSVの一行、説明文の数字だけが変わった場面では、まず行で範囲を絞ってから文字を見ると読みやすくなります。
ただし、細かい表示ほど常に分かりやすいわけではありません。段落を丸ごと書き直した場合、共通する文字があちこちに残って細切れの差分になることがあります。文字のつながりを機械的に探した結果であり、執筆者が実際にその順番で編集した履歴ではありません。大幅な書き直しなら、段落全体を読む方が意図を理解できます。
空白を無視すると消えるのは、何の違い?
timeout=30
timeout=30行単位の『空白を無視』は、行頭・行末の空白による差を見えなくするために使えます。上の二行を別々の入力にすると、その設定の有無で結果が変わります。一方、hello worldとhelloworldのように行の途中にある空白まで何でも消して比較する設定ではありません。どの空白を無視したかを理解せずに『同じだった』と報告しないようにします。
空白が意味を持つ形式では、差が消えること自体が危険な手掛かりです。YAMLの字下げ、整形済みの表、固定幅データでは、空白の増減が構造や読み取り位置を変えることがあります。見やすくするために一時的に無視しても、最後は無視しない状態へ戻して確認します。この設定を、変更の正しさを保証する検査として使わないでください。
全行が変わったように見えたら、まず改行を疑う
文章は同じなのに差分が大量に出る場合、改行形式や末尾の改行が変わっていることがあります。Aだけの入力と、Aの後に改行を入れた入力は、文字列としては別です。エディターや貼り付け操作が改行をそろえる場合もあるので、ブラウザー上で同じと出たことを、元ファイルのバイト列が完全一致した証拠にはできません。
原因を調べるときは、比較のために勝手に整形してから原文を上書きしないようにします。まず元の二つを残し、末尾改行、行頭空白、行の順序を一つずつ確認します。二つ以上の条件を同時に変えると、何を直したら差が消えたのかが分からなくなります。単に見やすくした結果と、本当に変更がなかった結果を分けて記録しましょう。
移動した行は、削除と追加として見えることがある
設定の一覧を並べ替えただけでも、テキスト比較では変更が出ます。どの行がどこへ移動したかを、常に『移動』という一つの操作にまとめる機能ではありません。同じ文言が繰り返される入力では、機械が選ぶ対応関係と人が想像する編集手順が違う場合もあります。差分の形だけから、作業者が何をしたかを断定しないことが大切です。
順序ではなく『含まれている項目が同じか』を知りたいなら、リスト集合演算が向いています。JSONでキーの並びだけを無視して値を比べたいなら、JSON構造比較を使います。ただし、手順書や優先順位付きルールの順序は意味そのものです。差分を減らしたいからと先にソートするのではなく、比較したい問いに合うツールを選びます。
差分ゼロより、説明できる差分を目指す
実際の確認では、変更前後の向きを固定し、行単位で全体を見て、重要な行を文字単位で調べます。空白無視を使ったら、その条件を外して最後にもう一度見ます。そのうえで『timeoutが30から60へ変わり、その他の値は同じ』と、何が変わったかを自分の言葉で説明できれば、色のついた画面を眺めるだけの比較から一歩進めます。
違いが見つからない場合も、比較範囲が十分かを確認します。貼り付け忘れた行、別ファイルに分かれた設定、アプリが読み込む環境変数までは、この二つの入力に含まれていなければ調べられません。逆に違いがあっても、それが不具合とは限りません。意図した変更か、実行時の挙動へ影響するかは、元の仕様と必要なテストで確かめます。
整形と意味の変更を一度に行うと、確認が難しくなる
設定ファイルのインデントを全部変え、その中でtimeoutだけ30から60へ変えたとします。通常の行差分では多くの行が変わり、本当に確認したい値が埋もれます。まず元のまま比較して変更全体を見た後、空白の扱いを変えて差分がどう減るかを確かめます。ただし、このツールの空白無視は行内のあらゆる空白を消す処理ではありません。残った差分が想定より多い場合も、ツールが間違っているとは限らず、無視設定の対象範囲を確認する必要があります。
空白を無視して差分が消えたとしても、そのファイルで空白が意味を持たないとは限りません。YAMLのインデント、コード内の文字列、Markdownの改行表現などでは、見た目を整えただけのつもりでも動作や表示が変わります。差分設定はレビューの視点を変えるためのもので、変更を安全と判定するスイッチではありません。作業の進め方を選べるなら、整形だけの変更と値の変更を別の段階で確認すると、何を変えたのか説明しやすくなります。
差分を共有する際には、左が変更前、右が変更後なのか、どの設定を無視したのかも残します。順番を逆にすると追加と削除の説明も逆になります。『差分は一件』という数だけでなく、『timeoutが30から60へ変わった。インデント差は別途確認した』のように書けば、読む側は何を承認すべきか判断できます。差分ツールの役割は赤や緑を減らすことではなく、変更の意図と実際の違いを照合することです。