diffコマンドでファイルの差分を比較する方法【変更点確認】

先生

えっ、diffコマンドってこんなに便利なの?変更点をサッと確認しよう!

diffコマンドとは?差分比較の基本

diffコマンドは、2つのファイルやディレクトリの差分を表示するためのUnix系のコマンドラインツールです。プログラミングやシステム管理において、変更箇所を特定し、バージョン管理を行う上で非常に重要な役割を果たします。

diffコマンドを使うことで、コードの変更履歴を確認したり、設定ファイルの差異を比較したり、テキストファイルの修正箇所を洗い出したりすることができます。

ここでは、diffコマンドの基本的な使い方から、オプション指定による詳細な差分表示までを解説します。

diffコマンドは、開発者にとって必須のツールと言えるでしょう。

基本的な使い方:ファイル比較

最も基本的な使い方は、2つのファイルを指定して差分を表示することです。

diff file1.txt file2.txt

上記を実行すると、file1.txtとfile2.txtの差分が、diff形式で表示されます。diff形式とは、行の追加、削除、変更を示す記号(<, >, -)を用いた表示形式です。

例えば、以下のような表示が出力されます。

2c2
< This is line 2 in file1.
---
> This is line 2 (modified) in file2.

この例では、file1.txtの2行目が「This is line 2 in file1.」であり、file2.txtの2行目が「This is line 2 (modified) in file2.」であることを示しています。 cはchangeの略で、行が変更されたことを表します。

よく使うオプション

diffコマンドには、様々なオプションがあり、用途に応じて使い分けることで、より詳細な差分表示が可能です。

ここでは、特によく使うオプションを紹介します。

unified formatは、コンテキスト情報を含む差分を表示するオプションです。パッチを作成する際によく利用されます。

diff -u file1.txt file2.txt

出力例:

--- file1.txt
+++ file2.txt
@@ -1,3 +1,3 @@
 This is line 1.
-This is line 2 in file1.
+This is line 2 (modified) in file2.
 This is line 3.

--- file1.txt+++ file2.txtは比較対象のファイルを示し、@@ -1,3 +1,3 @@は変更箇所の行番号を示します。先頭に-が付いている行はfile1.txtから削除された行、+が付いている行はfile2.txtに追加された行を表します。

ディレクトリを再帰的に比較する場合に利用します。サブディレクトリ以下のファイルも比較対象となります。

diff -r dir1 dir2

差分があるかどうかのみを知りたい場合に利用します。差分がある場合はファイル名のみが表示されます。

diff -q file1.txt file2.txt

大文字小文字の違いを無視して比較します。

diff -i file1.txt file2.txt

空白文字の違いを無視して比較します。

diff -w file1.txt file2.txt

実践的な応用例

diffコマンドは、単にファイルの差分を表示するだけでなく、様々な場面で応用できます。

例えば、バージョン管理システム(Gitなど)では、変更履歴を管理するためにdiffコマンドが内部的に利用されています。

また、設定ファイルの変更を追跡したり、異なる環境間での設定の差異を比較したりする際にも役立ちます。

スクリプトと組み合わせて、特定の条件を満たす差分のみを抽出したり、自動的にパッチを生成したりすることも可能です。

以下は、あるディレクトリ内の変更されたファイルのみをリストアップするbashスクリプトの例です。

#!/bin/bash

dir1="path/to/dir1"
dir2="path/to/dir2"

find "$dir1" -type f | while read -r file1; do
  file2="${dir2}/${file1#$dir1/}"
  if [[ -f "$file2" ]]; then
    if diff -q "$file1" "$file2" > /dev/null; then
      echo "$file1 and $file2 are different"
    fi
  fi
done

参考リンク

まとめ

diffコマンドは、ファイルやディレクトリの差分を比較するための強力なツールです。基本的な使い方から、オプション指定による詳細な差分表示、実践的な応用例までを解説しました。

diffコマンドを使いこなすことで、変更箇所の特定、バージョン管理、設定ファイルの比較など、様々な作業を効率化することができます。ぜひ、日々の開発やシステム管理に役立ててください。