(最終更新月:2023年4月)
✓当記事はこのような方に向けて書かれています
「2つのファイルを比較して差分を抽出したい」
「diff コマンドはどのような使い方ができるのだろうか?」
「diff コマンドの詳細な使い方やオプションについて知りたい」
✓当記事では以下をお伝えします
- diff コマンドの基本的な使い方と構文
- diff コマンドが想定される用途とその例
- diff コマンドが提供するオプションとその使い方
当記事では、diffコマンドの基本についてはもちろん、初心者にもわかりやすく使い方について詳しく解説しています。
ぜひ最後までご覧ください。
読者のニーズに応えるため、キーワードである「diff コマンド」に焦点を合わせて、基本から応用まで幅広く解説します。
diff コマンドについて知っておくべき基本事項
まずはdiffコマンドの基本的なことから見ていきます。
なぜなら基本的なことを理解するだけでも、最低限使いこなすには十分だからです。
- diffコマンドとは?
- diffコマンドの使い方
- diffコマンドで表示される情報
diff コマンドとは?
diff コマンドは、Unix系のオペレーティングシステム(OS)において、2つのファイルの違いを比較できるものです。
2つのファイルを比較することで、変更点、追加点、削除点などを見つけられます。
以下のようなときに便利なコマンドといえるでしょう。
- ファイルの変更履歴を確認
- プログラムコードのバージョン管理
- ディレクトリの中身の差分を比較
オプションまで使いこなせばさまざまな比較が可能になるコマンドです。
diff コマンドの基本的な使い方
diff コマンドを使用するためには、次のように入力します。
$ diff ファイル1 ファイル2
file1 と file2 は比較する2つのファイルです。
diff コマンドは、2つのファイルを比較し、差異がある場合にはそれらを出力します。
diff コマンドで表示される情報
diff コマンドで比較される2つのファイルの間には、次のような差異が存在する可能性があります。
- 追加行
- 削除行
- 変更行
これらの情報は、diff コマンドの出力結果に表示されます。それぞれの行を表示する際には、ファイル内の文字の位置、行数や文字列なども表示されます。
diffコマンドによる出力の見方
diffコマンドの出力内容について解説します。
なぜならdiffコマンドの出力には見方があり、パッと見では少しわかりにくいからです。
以下の2ファイルを例に見方を解説していきます。
例として使用する2つのファイル
こちらの2つを使って解説していきます。
first.py
def test_func():
return "this is first test"
second.py
def test_func():
testvar = "second"
return f"this is {second} test"
diffコマンドによる出力
diffコマンドをおこなったときの出力はこちら。
$ diff first.py second.py
2c2,3
< return "this is first test"
---
> testvar = "second"
> return f"this is {second} test"
出力の解説
出力については、大きく2箇所に分かれます。
- 1行目:2c2,3は、2つのChangeがあり、対象の行が2,3であることを示す
- 2行目以降:「—」の前が最初に指定したファイル・後が次に指定したファイルの異なる箇所を示す
diffコマンドのオプション一覧
diffコマンドのオプションを詳しく見ていきます。
オプションを使いこなすことで、やりたいことにより近づけるはずです。
- -q:ファイルが異なるかどうかのみ確認
- w:空白文字を無視して比較
- -B : 空行を無視して比較
- -u : 統一形式で差分を表示
- -c : コンテキスト形式で差分を表示
- -r : ディレクトリを再帰的に比較
- -N : 新しいファイルの内容を表示
- -s : 同一である場合にコメントする
- -i : 英字の大文字/小文字を無視して比較
-q:ファイルが異なるかどうかのみ確認
-qオプションは、ファイルの差異があっても、その差異についての詳細を表示しないためのもの。
$ diff -q first.py second.py
ファイル first.py と second.py は異なります
異なる事実だけ伝えられるのです。
w:空白文字を無視して比較
-wオプションは、空白行を無視して比較を行います。
$ diff -w first.py second.py
2c2,3
< return "this is first test"
---
> testvar = "second"
> return f"this is {second} test"
-B : 空行を無視して比較
-Bオプションは、空白文字を無視して比較をおこないます。
空白文字も行と同様に扱われます。
$ diff -B first.py second.py
2c2,3
< return "this is first test"
---
> testvar = "second"
> return f"this is {second} test"
-u : 統一形式で差分を表示
-uオプションは、Unified 形式の出力をおこないます。
これは、差分が一つの出力にまとめられて表示されるため、視認性が高いのが特徴。
また、パッチファイルを作成する場合にも使用されます。
$ diff -u first.py second.py
--- first.py 2023-04-01 07:21:45.798708401 +0900
+++ second.py 2023-04-01 07:22:37.782148704 +0900
@@ -1,2 +1,3 @@
def test_func():
- return "this is first test"
+ testvar = "second"
+ return f"this is {second} test"
-c : コンテキスト形式で差分を表示
-cオプションは、Context 形式の出力をおこなうもの。
これは、差分が前後の文脈とともに表示されるため、読みやすい形式となります。
このオプションは、パッチファイルを作成する場合にも使用されます。
$ diff -c first.py second.py
*** first.py 2023-04-01 07:21:45.798708401 +0900
--- second.py 2023-04-01 07:22:37.782148704 +0900
***************
*** 1,2 ****
def test_func():
! return "this is first test"
--- 1,3 ----
def test_func():
! testvar = "second"
! return f"this is {second} test"
-r : ディレクトリを再帰的に比較
-rオプションは、2つのディレクトリを再帰的に比較します。
$ diff -r first second
first のみに存在: infirst.txt
-N : 新しいファイルの内容を表示
-Nオプションを使うと新しいファイルの内容で異なる箇所を表示します。
$ cat itc1.txt
apple
orange
grape
$ cat itc2.txt
apple
orange
grape
banana
$ diff -N itc1.txt itc2.txt
0a1
> banana
-s : 同一である場合にコメントする
-sオプションは、同一であるかどうかを判断するためのオプションです。
$ diff -s first.py third.py
ファイル first.py と third.py は同一です
-i : 英字の大文字/小文字を無視して比較
-iオプションは、大文字小文字を区別しない比較をおこないます。
$ diff -i first.py second.py
2c2,3
< return "this is first test"
---
> testvar = "second"
> return f"this is {second} test"
まとめ:diffコマンドで作業効率は向上する
当記事の内容をまとめます。
- diffコマンドは2つのファイル(ディレクトリ)の差分を取れるもの
- 出力する形式は付けるオプションにより異なる
- diffを使えば作業効率が上がる
diffは、2つのファイルを簡単に比較できるツール。
うまく活用することで、ミスも減り、効率も上がります。
オプションを活用しながら、よりスピーディな作業をおこなえるようになりましょう。