「差分を見る(diff)」というと、エンジニアがコードの変更をチェックするためのツールというイメージが強いかもしれません。しかし、2つのテキストを比較して変更箇所を特定するという操作は、文書管理・品質確認・業務効率化など、さまざまな場面で役立ちます。
この記事では、コードレビュー以外での使い方に加えて、同じはずのものが一致しないときの調べ方と、差分が思ったように取れないときの原因と対処まで解説します。
文書の改訂管理と変更点の把握
契約書・仕様書・マニュアルなどのビジネス文書は、何度も改訂されます。バージョン管理のない環境では「どこが変わったのか」を目視で確認するのは非常に手間がかかります。
差分比較ツールに改訂前後のテキストを貼り付けることで、追加・削除された箇所が一目で分かります。「第3条2項の『5営業日以内』が『7営業日以内』に変更されている」といった細かな修正も見落としません。
目視で最も見落としやすいのは、数字と否定表現の変更です。「5」が「7」に変わっても、「〜できる」が「〜できない」に変わっても、文章の長さはほとんど変わりません。人間の目は文章のかたちを見てしまうため、こうした1文字の違いは読み飛ばしがちです。差分ツールはこの手の変更に強みがあります。
環境ごとの設定ファイル比較
開発・ステージング・本番など、環境ごとに用意した設定ファイルは少しずつ差異があります。予期しない設定の違いが障害の原因になることも珍しくありません。
それぞれの設定ファイルを比較することで、本番だけに入っている設定や、環境間でズレている値を確実に把握できます。デプロイ前の最終チェックとして習慣化するのがおすすめです。
差分を取る前に、キーの順序をそろえておくと結果が見やすくなります。順序が違うだけで内容が同じ場合でも、行単位の比較では「全部違う」と表示されてしまうためです。
リファクタリング後の出力検証
ソースコードを整理したとき、「動作は変えていないはずだが、本当に同じ結果が出ているか」を確認したい場面があります。
修正前のプログラムの実行結果(ログ出力・APIレスポンス・SQLの結果など)と、修正後の出力を貼り付けて比較すれば、意図しない変化がないかを素早く確認できます。「見た目では変わっていないはず」を客観的に裏付けるのに有効です。
このとき、タイムスタンプや実行IDなど毎回変わる値は、あらかじめ除いておくのがコツです。そうしないと全行が差分として表示され、本当に見たい違いが埋もれます。
原稿・コピーの校正確認
修正依頼を出した後、「指摘した箇所が直っているか」を確認する作業にも差分比較は便利です。
修正前と修正後の文章を貼り付けるだけで、変更箇所が色分けされて表示されます。修正されていない指摘や、意図しない追加・削除もすぐに発見できます。
「同じはずなのに一致しない」を突き止める
ここまでは「変わった箇所を見つける」使い方でしたが、逆に変わっていないはずのものを疑う使い方もあります。個人的にいちばん助けられたのは、こちらでした。
CSVを取り込む処理を作っていたときの話です。ある項目が 〜 であれば、その行を範囲指定として扱うロジックを入れていました。しばらくして「範囲として認識されない」という問い合わせが届きます。データを開いても、見た目におかしなところはありません。〜 はきちんと 〜 に見えています。
行き詰まったので、条件式に書いてある 〜 を、届いたデータからコピーした 〜 に置き換えてみました。そのうえで両方を差分ツールに貼り付けたところ、見た目は何ひとつ変わっていないのに、追加1行・削除1行・共通部分なしと判定されたのです。そこで初めて、この2つが別の文字だと分かりました。波ダッシュ(U+301C)と全角チルダ(U+FF5E)という、コードポイントの違う文字です。混ざってしまう理由は「UTF-8で日本語は何バイト?」に書きました。
ここで効いたのは、差分ツールの機能そのものというより、判断を目から切り離せたことでした。プログラムが見ているのは文字の形ではなく、コードポイントの並びです。目で「同じ」と判断しているあいだは、原因の候補にすら挙がりませんでした。
同じはずのものが同じ結果にならないときは、その2つを並べて貼り付けてみる。文字コードに限らず、設定値のコピー漏れ、末尾に紛れ込んだ空白、APIレスポンスのわずかな違いなど、「目で確認した」が当てにならない場面で広く使えます。
差分が「全部違う」と出てしまうとき
内容はほぼ同じはずなのに、差分が大量に出る——これはよくある現象です。原因はたいてい次のどれかです。
改行コードの違い
Windowsは CRLF(0D 0A)、macOSやLinuxは LF(0A)を使います。見た目はまったく同じでも、行末のバイトが違うため全行が差分になります。異なるOSで編集されたファイルを比較するときの定番の原因です。
行末の空白やタブ
エディタの設定によって、行末に空白が残ったり、インデントがタブとスペースで混在したりします。画面上は区別がつきません。
文字コードの違い
UTF-8とShift_JISでは、同じ日本語でもバイト列が異なります。また、UTF-8でもファイル先頭に BOM(EF BB BF の3バイト)が付いていると、1行目だけが差分として表示されます。
インデントの深さ
JSONやYAMLを整形し直しただけで、全行のインデントが変わることがあります。内容の比較をしたい場合は、両方を同じルールで整形してから比較します。
対処の基本は、比較する前に条件をそろえることです。改行コードを統一する、行末の空白を削る、同じ整形ルールを通す。これだけで、見たい差分だけが残ります。
目に見えない文字の違い
差分ツールは「違う」と言っているのに、画面上はどう見ても同じ——という状況もあります。原因は見た目が同じで内実が違う文字です。
| 見た目 | 文字 | コードポイント |
|---|---|---|
| スペース | 半角スペース | U+0020 |
| スペース | 全角スペース | U+3000 |
| スペース | ノーブレークスペース | U+00A0 |
| ハイフン | ハイフンマイナス | U+002D |
| ハイフン | 全角ハイフン | U+FF0D |
| ハイフン | enダッシュ | U+2013 |
| ハイフン | マイナス記号 | U+2212 |
| ハイフン | 長音符 | U+30FC |
特にやっかいなのがノーブレークスペース(U+00A0)です。Webページやワープロソフトからコピーしたテキストに紛れ込みやすく、見た目は完全に半角スペースと同じです。「なぜか検索に引っかからない」「なぜか比較で差分が出る」の原因になります。
ハイフンの類も同様です。日本語入力で「ー」を打つと長音符(U+30FC)になりますが、電話番号や型番でハイフンのつもりで使っていると、半角ハイフンとは別の文字になります。
こうした違いは目では判別できません。差分ツールが「違う」と言っているなら、たいてい本当に違います。 見た目で判断せず、文字コードを疑うのが早道です。
差分の粒度を意識する
差分の取り方には、大きく3つの粒度があります。
| 粒度 | 向いている用途 |
|---|---|
| 行単位 | ソースコード、設定ファイル、ログ |
| 単語単位 | 英文、コード内の識別子の変更 |
| 文字単位 | 日本語の文章、数値や型番の1文字の違い |
日本語の文章は単語の区切りが明確でないため、行単位で比較すると「1行まるごと変わった」としか分かりません。1文字だけ直したのか、文全体を書き換えたのかを見分けたい場合は、文字単位で比較できるツールを使うか、文ごとに改行を入れてから比較します。
長い段落を比較するときは、句点(。)ごとに改行を入れてから貼り付けると、変更された文だけが浮かび上がります。手軽な割に効果の大きいテクニックです。
機密性のある文書を扱うとき
差分比較は、契約書・設定ファイル・顧客データなど、外部に出したくない情報を扱う場面が多い操作です。オンラインの比較ツールを使う場合は、入力した内容がサーバーに送信されるかどうかを確認してください。
処理がブラウザ内で完結するツールであれば、貼り付けた内容が手元から出ることはありません。業務で使う場合は、この点を確認してから使うことをおすすめします。
よくある質問
Q. WordやExcelのファイルは比較できますか
A. テキスト差分ツールは文字列を比較するものなので、ファイル形式そのものは扱えません。文書の中身を選択してコピーし、テキストとして貼り付ける必要があります。Word自体にも文書比較機能があるため、書式の変更まで見たい場合はそちらが向いています。
Q. 差分が出ているのに、どこが違うのか分かりません
A. 見えない文字(全角スペース、ノーブレークスペース、行末の空白)か、改行コードの違いが原因です。エディタで不可視文字を表示する設定にすると確認できます。
Q. 順序が入れ替わっただけの行を「同じ」と扱えますか
A. 一般的な差分ツールは順序も含めて比較するため、入れ替わりは差分として表示されます。順序を無視して内容だけ比べたい場合は、両方をソートしてから比較します。
まとめ
差分比較はエンジニア向けのツールに見えて、文章や設定を扱うあらゆる場面で使えます。
- 目視で最も見落としやすい数字と否定表現の変更に強い
- 同じはずのものが一致しないときは、その2つを並べて貼り付ける。判断を目から切り離せる
- 差分が大量に出るときは、改行コード・行末の空白・文字コード・インデントを疑う
- 「見た目は同じなのに違う」は、ノーブレークスペースやハイフンの種類が原因
- 日本語の文章は、句点ごとに改行してから比較すると読み取りやすい
- 機密性のある文書では、処理がブラウザ内で完結するかを確認する
テキスト差分比較ツールでは、2つの文章を貼り付けるだけで変更箇所を色分けして表示します。処理はすべてブラウザ内で行われ、貼り付けた内容が外部に送信されることはありません。