WinMergeのフィルタ機能を活用しよう

プログラミング
この記事は約7分で読めます。
スポンサーリンク

はじめに

ファイルやフォルダの差分を視覚的に比較できる便利なツール「WinMerge」。開発現場や構成管理など、さまざまなシーンで活用されている方も多いと思います。

フォルダ間を比較する際に便利な機能として「フィルタ機能」があります。不要なファイルやフォルダを比較対象から外して、必要な差分だけに集中することができます。

この記事では、WinMergeのフィルタ機能についての基本的な使い方から、既存のフィルタの概要、そして自分でカスタムフィルタを作成する方法まで紹介します。

フィルタ機能の説明と使い方

WinMergeのフィルタ機能は、「このファイルは比較したい」「このフォルダは除外したい」といった条件を設定できる仕組みです。

比較を開始する際、「フィルタ」メニューからフィルタを選択することで、あらかじめ用意されたルールに従ってファイルやフォルダの表示/非表示を制御できます。

主な用途は以下の通り

  • バージョン管理システムのメタデータを除外(例:.git, .svn など)
  • 一時ファイルやビルド生成物を無視
  • 特定の言語やプロジェクト形式に絞って比較

既存のフィルタにはどんなものがあるのか?

WinMergeにはデフォルトで多数のフィルタが用意されており、Filters フォルダに格納されています。

フィルタ名 対象・用途 対象拡張子(例)
ADAMulti.flt Ada 言語ソースコード .adb, .ads, .ada
ASPNET.flt ASP.NET Web アプリ開発 .aspx, .ascx, .asax,
.config, .cs, .js
CSharp_loose.flt C# ソースコード .cs, .resx
Delphi.flt Delphi(Object Pascal)プロジェクト .pas, .dfm, .dpr, .dpk
FileFilter.tmpl フィルタ記述用のテンプレート .ext(例示用)
Frontpage.flt Microsoft FrontPage 向け Web ファイル .htm, .html, .asp,
.inc, .css
MASM.flt MASM アセンブラ関連ファイル .asm, .inc, .lst,
.map, .obj
Merge_GnuC_loose.flt GNU C/C++ 開発用 .c, .h, .cpp, .hpp,
.o, .a, .mak
Merge_VB_loose.flt Visual Basic .vb, .frm, .cls,
.bas, .vbp
Merge_VC_loose.flt Visual C++ プロジェクト .cpp, .h, .rc,
.sln, .vcproj, .dsp, .dsw
SourceControl.flt ソース管理システムのメタデータを除外 .git, .svn, .hg,
.idea, .vs, .vscode
Symbian.flt Symbian OS 開発関連 .cpp, .h, .mmp,
.pkg, .inf, .rss
XML_html.flt マークアップ系ファイル .xml, .xsl, .html,
.htm, .dtd

フィルタを自分で書く場合

フィルタの基本書式

フィルタファイルは .flt という拡張子を持ち、文字コードは UTF-8 で、改行コード LF のプレーンテキストで記述します。基本構文は次のようになっています。

name: フィルタ名
desc: このフィルタの説明文

def: include  ## または exclude(詳細は後述)

## ファイルのパターン(正規表現)
f: \.拡張子$    ## 拡張子を指定
f: ^ファイル名$  ## ファイル名を指定

## フォルダのパターン(正規表現)
d: \\フォルダ名$ ## フォルダ名を指定
d: \\\.フォルダ名$ ## Linux系の隠しフォルダ名を指定

## 除外指定("f!" や "d!" を使う)
f!: 除外したいファイルのパターン
d!: 除外したいディレクトリのパターン

リストの種類

defは、includeexclude 型があります。これによって、通常と除外指定の考え方が逆転します。

defの値 考え方 f: / d: の意味 f!: / d!: の意味
include 除外リスト型 除外する(比較から外す) 除外対象から外す(= 含める)
exclude 許可リスト型 含める(比較対象にする) 含める対象から外す(= 除外する)
d: \\*$ ## Subdirectories

 作成例

SourceControl2.flt

既存の「SourceControl.flt」をAI君が改善したフィルタ。ビルド用フォルダなどの除外設定が追加されており、やや便利になっています。

name: Source Control Metadata
desc: Filters out source control system metadata and auxiliary IDE/OS folders

def: include

## --- バージョン管理関連 ---
d: \\\.git$               ## Git
f: \.gitignore$
f: \.gitattributes$
f: \.gitmodules$
d: \\\.svn$               ## Subversion

## --- IDE用フォルダ ---
d: \\\.vs$                ## Visual Studio
d: \\\.idea$              ## JetBrains IDE
d: \\\.vscode$            ## VSCode
d: \\bin$                ## Build output
d: \\obj$                ## Build output

## --- OS自動生成ファイル ---
f: ^Thumbs\.db$
f: ^desktop\.ini$

NodeJS.flt

こちらも Node.js プロジェクト向けの指示でフィルタを作ってくれたものです。node_modulesが引っかからなくなるので便利です。

name: Node.js Project
desc: Filters out node_modules, Git, VSCode, and build artifacts for Node.js projects

def: include

## --- 除外: ビルド・依存関係・一時ファイル ---
d: \\node_modules$
d: \\dist$
d: \\build$
d: \\out$
d: \\coverage$
d: \\\.turbo$
d: \\\.next$
d: \\\.cache$
d: \\\.eslintcache$

f: \.log$
f: \.env$
f: \.env\..*$
f: \.DS_Store$
f: \.npmrc$
f: ^yarn\.lock$
f: ^pnpm-lock\.yaml$
f: ^package-lock\.json$

## --- 除外: Git 関連 ---
d: \\\.git$
f: \.gitignore$
f: \.gitattributes$
f: \.gitmodules$

## --- 除外: VS Code 関連 ---
d: \\\.vscode$
f: ^settings\.json$
f: ^launch\.json$

## --- 除外: IDE・その他一般的な不要ディレクトリ ---
d: \\\.idea$
d: \\\.vs$
d: \\tmp$
d: \\logs$

まとめ

WinMergeのフィルタ機能は、単純な差分比較にとどまらず、開発環境や目的に応じた柔軟な差分の絞り込みを可能にしてくれます。既存フィルタを活用するのはもちろん、自分のプロジェクトに最適なカスタムフィルタを用意することで、より効率的にファイルの違いを分析できるようになります。

ぜひこの機会に、WinMergeのフィルタ機能を活用してみてください!

コメント