【現場で使える】Pythonでファイルの差分チェックツールを作る方法【diff処理付き】

「仕様書のバージョンが複数あって、どこが変わったか分からない…」そんな経験はありませんか?
この記事では、Pythonを使って2つのファイルの差分を視覚的に比較できるツールの作り方を、実用コード付きでわかりやすく解説します。


この記事でわかること

  • Pythonでファイルの差分を取得する方法(difflibの使い方)
  • 行単位での差分抽出・出力
  • HTMLで差分を色付き表示するツール作成
  • 実務での活用例(ソースコード・CSV・設定ファイルの比較など)

1. difflibとは?

Python標準ライブラリの difflib は、2つのテキストの違いを比較・視覚化できる便利なモジュールです。

特に以下のような機能があります

  • 行単位の差分比較(ndiffunified_diff
  • 差分をHTML形式で出力(HtmlDiff
  • 類似度のスコア算出(SequenceMatcher

2. 差分チェックの基本コード(行単位)

まずは、2つのテキストファイルの差分をターミナル上で表示する基本コードです。

import difflib

def diff_files(file1_path, file2_path):
    with open(file1_path, encoding='utf-8') as f1, open(file2_path, encoding='utf-8') as f2:
        f1_lines = f1.readlines()
        f2_lines = f2.readlines()

    diff = difflib.unified_diff(
        f1_lines, f2_lines,
        fromfile='Before',
        tofile='After',
        lineterm=''
    )

    for line in diff:
        print(line)

# 使用例
diff_files('old_version.txt', 'new_version.txt')

3. 差分をHTMLファイルで出力(色付き表示)

以下のコードは、2つのファイルの差分をHTML形式で保存します。ブラウザで開くと、色付きで変更箇所が一目瞭然です。

import difflib

def create_diff_html(file1_path, file2_path, output_html):
    with open(file1_path, encoding='utf-8') as f1, open(file2_path, encoding='utf-8') as f2:
        f1_lines = f1.readlines()
        f2_lines = f2.readlines()

    differ = difflib.HtmlDiff()
    html_content = differ.make_file(f1_lines, f2_lines, fromdesc='Old Version', todesc='New Version')

    with open(output_html, 'w', encoding='utf-8') as f:
        f.write(html_content)

    print(f"HTML差分ファイルを作成しました: {output_html}")

# 使用例
create_diff_html('old_version.txt', 'new_version.txt', 'diff_result.html')

4. 実務での活用例

用途内容
ソースコード管理手動で変更されたファイルの確認、コードレビュー前の比較
ドキュメント差分手順書や仕様書のバージョン比較(Wordをtxtで保存して利用)
CSV比較業務データの変更点を可視化(列の変化・削除検出)
コンフィグファイル確認.ini, .yaml, .conf ファイルの差分確認

5. よくあるQ&A

Q. バイナリファイルは比較できますか?

→ できません。バイナリデータは行単位で比較できないため、binasciifilecmpなどを使った比較が必要です。

Q. 差分の文字コードが合わない場合は?

open() 関数に encoding='utf-8-sig'encoding='shift_jis' を指定してみましょう。


6. カスタマイズ例:変更点だけ抽出する

行頭の記号(+, -, )で差分をフィルタできます。

for line in difflib.ndiff(f1_lines, f2_lines):
    if line.startswith('+ ') or line.startswith('- '):
        print(line)

まとめ

Pythonの difflib を使えば、テキストベースのファイル差分チェックツールを簡単に作成できます。

  • コードレビュー・資料チェックに最適
  • HTML出力でチーム内共有もラク
  • GUIなしでも業務で十分に使える品質

業務の見える化や品質チェックに、ぜひ導入してみてください。

タイトルとURLをコピーしました