テキスト差分比較の方法 — Diff表示の読み方と活用場面

テキスト差分比較(Diff)とは、2つのテキストを行・単語・文字単位で比較し、追加・削除・変更された箇所を視覚的に表示する手法です。コードレビュー・契約書修正チェック・ドキュメント変更管理など幅広い場面で使われており、UnixのdiffコマンドやGitのgit diffがその代表例です。

最終更新: 2026年5月22日

目次
  1. テキスト差分比較とは
  2. Diff表示の読み方
  3. 差分アルゴリズムの基本
  4. 活用場面
  5. テキスト差分比較ツールの使い方
  6. 開発での高度な使い方
  7. よくある質問

テキスト差分比較とは

定義: テキスト差分比較とは、2つのテキストを比較して変更箇所(追加・削除・変更)を検出・表示する手法です。1970年代にBell研究所で開発されたUnixの diff コマンドが起源であり、現在はGitをはじめ多くのバージョン管理システムや開発ツールの基盤技術となっています。

ファイルを手作業で見比べて変更点を探すのは、量が増えるにつれて非常に労力がかかり、見落としのリスクも高まります。差分比較ツールを使えば、変更箇所を自動的に特定して視覚的にハイライト表示できるため、レビュー効率が飛躍的に向上します。

差分比較は英語で "diff"(difference の略)と呼ばれ、動詞としても「diffを取る」「diffする」という表現がエンジニアの間で日常的に使われます。

Diff表示の読み方

基本ルール: Diff表示では 追加行は「+」(緑)削除行は「-」(赤)変更なしの行は空白(白) で表示されます。変更がない行は文脈を把握するための「コンテキスト行」として前後数行のみ表示されます。

追加行・削除行・変更なし行

記号 色(一般的な配色) 意味
+ 新しいバージョンで追加された行
- 古いバージョンから削除された行
(空白) 白/グレー 両バージョンで変更のないコンテキスト行

「行が変更された」場合は、削除行(-)と追加行(+)の組み合わせ で表現されます。純粋な「変更」という差分記号はなく、「古い行を削除して新しい行を追加した」と解釈します。

unified diff 形式の解説

最も広く使われる形式が unified diff(統一差分形式)です。diff -u または Git が出力する標準的な形式で、次のような構造になっています。

--- a/sample.txt    2026-04-10 10:00:00
+++ b/sample.txt    2026-04-13 12:00:00
@@ -3,7 +3,8 @@
 第1行目(変更なし)
 第2行目(変更なし)
-古いテキスト(削除された行)
+新しいテキスト(追加された行)
+さらに追加された行
 第5行目(変更なし)
 第6行目(変更なし)
  • ---(マイナス3つ): 変更前ファイルのパスと更新日時
  • +++(プラス3つ): 変更後ファイルのパスと更新日時
  • @@ -3,7 +3,8 @@(ハンクヘッダー): 変更箇所の行番号情報。-3,7 は「変更前ファイルの3行目から7行分」、+3,8 は「変更後ファイルの3行目から8行分」を意味します
  • 行頭の - が削除行、+ が追加行、空白がコンテキスト行です

サイドバイサイド表示 vs インライン表示

Diffの表示方法には大きく2種類あります。

表示形式 特徴 向いている場面
サイドバイサイド
(Split View)
変更前と変更後を左右に並べて表示。全体の変化が一目でわかる コードレビュー、文書の大幅な書き換え確認
インライン
(Unified View)
変更箇所を1列にまとめて表示。縦にスクロールして確認する コマンドライン操作、横幅が限られる環境

差分アルゴリズムの基本

コア概念: 差分アルゴリズムの核心は LCS(最長共通部分列:Longest Common Subsequence) の発見です。2つのテキストに共通して存在する最長の部分列を求めることで、「何が変わらず残っているか」を特定し、そこから差分を導きます。

LCS(最長共通部分列)の概念

LCSとは、2つの文字列(または行の列)から順番を保ちながら共通して取り出せる最長の部分列です。差分アルゴリズムは LCS に含まれない要素を「削除または追加された箇所」として差分に表示します。

例えば ABCDEACDE の LCS は ACDE であり、差分は「B が削除された」となります。

Myers差分アルゴリズム

実際の diff コマンドや Git が採用するのが Myers アルゴリズム(1986年、Eugene W. Myersによる論文)です。このアルゴリズムは「編集回数が最小になる差分(最短編集スクリプト)を効率的に発見する」という特性を持ちます。

Myers アルゴリズムが広く使われる理由は、実用的なテキストファイルのほとんどで O(N + D²) という高速な計算量で動作するためです(N はテキストの長さ、D は差分の数)。変更が少ないほど高速に処理できます。

行単位 vs 単語単位 vs 文字単位の違い

比較単位 特徴 主な用途
行単位 デフォルト。1行全体を比較の最小単位とする。速く見やすいが、1文字の違いでも行全体が変更と判定される ソースコードのdiff、一般的なファイル比較
単語単位 空白で区切られた単語を最小単位とする(git diff --word-diff)。文章の中の一語変更を正確に表示できる 自然言語テキスト、ドキュメントのレビュー
文字単位 1文字ずつ比較。最も細かく差分を表示できる。変更が多い場合は逆に読みにくくなることも スペルミス・句読点の修正確認、短いテキスト

活用場面

一言まとめ: テキスト差分比較は「何がどう変わったかを素早く正確に把握したい」場面すべてで役立ちます。エンジニアだけでなく、ライター・法務担当・マーケターにとっても実用的なツールです。

コードレビュー(Git の Pull Request)

エンジニアが最も頻繁にdiffを使う場面です。GitHub・GitLab・Bitbucketなどのコードホスティングサービスでは、Pull Request(プルリクエスト)を作成すると自動的にブランチ間の差分が表示されます。レビュアーは追加・削除されたコードを一目で確認でき、バグの混入防止・品質担保 に直結します。

契約書・法律文書の修正チェック

契約書の改訂版を受け取った際、どの条項が変更されたかを差分比較で確認できます。法律文書は一語一句の変更が法的効力に影響するため、見落とし防止 の観点から差分比較ツールの活用は非常に有効です。Wordの変更履歴機能が使えないプレーンテキスト形式でも対応できます。

ドキュメントのバージョン管理

技術仕様書・マニュアル・議事録などのドキュメントを改訂する場合、差分比較によってどの記述が更新されたかを明確に記録できます。GitにMarkdownやテキストファイルを管理することで、いつ・誰が・何を変えたかを完全に追跡できます。

設定ファイルの変更確認

サーバーやアプリケーションの設定ファイル(nginx.conf、.env、docker-compose.yml など)の変更前後を比較することで、意図しない設定変更の検出 やトラブルシューティングが容易になります。本番環境への変更適用前のチェックにも有効です。

翻訳テキストの比較

原文が更新された際に、翻訳済みテキストとの差分を取ることで追加・変更が必要な箇所を素早く特定できます。全文を再翻訳せずに変更分だけを効率的に翻訳作業に回せます。

SEO: meta description 変更前後の確認

ウェブサイトの meta description や本文コピーを A/B テスト的に改善する際、差分比較でどの文言を変えたかを正確に記録しておくと施策の効果測定と振り返りに役立ちます。文字数カウントと組み合わせると、上限文字数に収まっているかの確認も同時に行えます。

テキスト差分比較ツールの使い方

Links Create の テキスト差分比較ツール はインストール不要のブラウザ完結型です。2つのテキストを貼り付けるだけで、差分が即座にハイライト表示されます。

3ステップで差分を確認できます。

  1. 比較元テキストを入力 — 左側(Before)の入力欄に、変更前のテキストを貼り付けます。ファイルの中身をそのまま貼り付けてください。
  2. 比較先テキストを入力 — 右側(After)の入力欄に、変更後のテキストを貼り付けます。
  3. 差分を確認・コピー — 追加行(緑)・削除行(赤)が自動ハイライトされます。差分のみを抽出してコピーすることもできます。
  4. A ⇄ B 入替で視点を切替える — 「A ⇄ B 入れ替え」ボタンで前後の方向を入れ替えると、差分の見え方が逆転します。視点を変えて確認すると見落としを減らせます。
  5. 業務シーンに適用する — 契約書改訂・コードレビュー・設定ファイル更新・翻訳校正など、業務で日常的に発生する「変更前と変更後の差分確認」に適用します。

開発での高度な使い方

対象: このセクションはコマンドラインやGitを日常的に使うエンジニア向けの応用テクニックです。

git diff コマンドの基本

Gitリポジトリ内でファイルの差分を確認するには git diff コマンドを使います。代表的な使い方を以下に示します。

# ワーキングツリーとステージングエリアの差分を表示
git diff

# ステージングエリアと最新コミットの差分を表示
git diff --staged

# 特定のコミット間の差分を表示
git diff abc1234 def5678

# 特定ファイルの差分のみ表示
git diff HEAD -- path/to/file.txt

# ブランチ間の差分を表示
git diff main feature-branch

--word-diff オプション

行単位ではなく単語単位で差分を表示したい場合は --word-diff オプションを使います。文章の一部のみが変更された場合に特に効果的です。

# 単語単位の差分表示(色付き)
git diff --word-diff=color

# 差分箇所を括弧で囲んで表示(カラー非対応環境でも見やすい)
git diff --word-diff=plain

出力例(--word-diff=plain)では、削除された単語が [-削除-]、追加された単語が {+追加+} で示されます。

.gitattributes でのdiffドライバー

バイナリに近いファイル(.docx・PDF・画像など)や特殊なフォーマットのファイルに対して、カスタムの差分処理を設定できます。

# .gitattributes の例
# Wordファイルをテキスト抽出してdiffを取る
*.docx diff=word

# JPEGのexifメタデータをdiffの対象にする
*.jpg diff=exif
# git config でドライバーを登録
git config diff.word.textconv docx2txt
git config diff.exif.textconv exiftool

JavaScript での簡易diff実装

フロントエンドやNode.jsアプリケーションでdiff機能を実装する際は、diff ライブラリや jsdiff が広く使われています。

// npm install diff
import { diffLines, diffWords } from 'diff';

const oldText = `第1行
変更前のテキスト
第3行`;

const newText = `第1行
変更後のテキスト
第3行
追加された第4行`;

// 行単位の差分を取得
const lineDiff = diffLines(oldText, newText);

lineDiff.forEach(part => {
  // 追加された行
  if (part.added) {
    console.log(`追加: ${part.value}`);
  }
  // 削除された行
  else if (part.removed) {
    console.log(`削除: ${part.value}`);
  }
  // 変更なし
  else {
    console.log(`変更なし: ${part.value}`);
  }
});

// 単語単位の差分も同様に取得できる
const wordDiff = diffWords(
  '素早い茶色のキツネ',
  '素早い灰色のキツネが飛ぶ'
);

より高機能な差分表示UIが必要な場合は monaco-editor(VS Codeのエディタコンポーネント)の diff エディタモードが利用できます。GitHubと同等のサイドバイサイド表示をWebアプリに簡単に組み込めます。

よくある質問

大文字・小文字を無視して比較できますか?

多くのdiffツールでは大文字・小文字を区別しないオプションが用意されています。コマンドラインでは diff -i オプションを使うと大文字小文字を無視して比較できます。Links Createのテキスト差分比較ツールでも同様のオプションを提供しています。

バイナリファイルも比較できますか?

標準のdiffはテキストファイル向けです。バイナリファイル(画像・PDF・実行ファイルなど)を比較する場合は diff --binary や専用のバイナリ差分ツール(xxdiff、Beyond Compareなど)を使用してください。Gitは画像などのバイナリにも対応した差分ドライバーを設定できます。

Git以外でdiffを使う方法は?

UnixやmacOSでは diff ファイル1 ファイル2 というコマンドで直接使えます。Windowsではコマンドプロンプトの fc コマンドや、PowerShellの Compare-Object が同様の機能を持ちます。ブラウザで手軽に使いたい場合はLinks Createのテキスト差分比較ツールが便利です。

3つ以上のテキストを比較するには?

標準的なdiffは2ファイル間の比較ですが、diff3 コマンドを使うと3つのファイルを同時に比較できます。これはGitのマージ競合解決でも内部的に使われています。より多くのバージョンを管理する場合はGitなどのバージョン管理システムを利用するのが現実的です。