はじめに
ファイルやフォルダの差分を視覚的に比較できる便利なツール「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は、include と exclude 型があります。これによって、通常と除外指定の考え方が逆転します。
| defの値 | 考え方 | f: / d: の意味 |
f!: / d!: の意味 |
|---|---|---|---|
include |
除外リスト型 | 除外する(比較から外す) | 除外対象から外す(= 含める) |
exclude |
許可リスト型 | 含める(比較対象にする) | 含める対象から外す(= 除外する) |
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のフィルタ機能を活用してみてください!




コメント