ファイルやフォルダー比較の際、比較範囲を限定するためにファイルフィルターを使用することができます。 これは、比較結果から、あなたが興味のない差異を取り除きたい場合に便利です。 フィルターは、正規表現を基づいて定義されます。 WinMerge は、一般的に広く使われている PCRE (Perl Compatible Regular Expressions) 正規表現エンジンを使用しています。
フィルターの基本機能はシンプルです。 比較対象となる各項目(フォルダー、ファイル、ファイル中の行)を評価し、 対象の項目がフィルター式にマッチした場合、フィルターを適用します。 フィルタータイプにより、項目は、比較に含められるか、除外されるかのどちらかです。
フォルダー比較用とファイル比較用の異なるWinMergeフィルターがあります。
単純なファイルマスク、または、より複雑なフィルターにより、 ファイルフィルター中で指定された複数の規則を適用することで、 フォルダー比較中に含めるファイルを指定することができます。
フィルターされるファイルやフォルダーは、デフォルトで隠されます。それは、典型的にあなたが望むものでしょう。フィルターされたアイテムを表示するには、 → をクリックしてください。しかし、フォルダー比較ウィンドウは、それらについて最小限の情報しか表示しません。例えば、あなたは、スキップされたファイルがテキストファイルかバイナリファイルか判らないでしょう。
行フィルターは、ファイル比較操作のみに適用されます。 それにより、単一行の差異を無視することができます。
置換フィルターは、ファイル比較操作のみに適用されます。 置換フィルターは、diffブロック内の文字列を指定された文字列に置換して比較し、 結果が一致する場合はそのdiffブロックを無視します。 これは、興味のない多数の変更を無視するのに役立ちます。
フォルダー比較で含めるファイル拡張子を指定するために、1つ以上のファイルマスクを使用できます。その他のファイルは選択対象から除外されます。
フォルダー比較操作を実行時に、ファイルマスクを定義し適用する:
ファイルまたはフォルダーの選択ダイアログを使用しているなら、 1(左)と 2(右)のフォルダー選択後、 フィルターフィールドへ、 1つか複数のファイルマスクを入力してください。 マスクは、フォルダー比較操作を開始した時に適用されます。
WinMergeのコマンドラインを使用している場合は、ファイルマスクを指定する
-fフラグ(次のセクションの例を参照)を使用してください。
ファイルマスクや拡張フィルターは以下の形式で指定できます:
グループ1のフィルター1;フィルター2 ...|グループ2のフィルター1;フィルター2 ...|...
| 文字はフィルターグループを区切り、論理 AND として機能します。
同じグループ内のフィルターは ; で区切られ、論理 OR として解釈されます。
ファイルは各グループ内の少なくとも1つのフィルターに一致する場合にのみ含まれます。
f: や f!: など、ダブルクォートで囲まれていない正規表現内で
|(パイプ)文字をリテラルとして使用したい場合は、代わりに ||
を使用してください。
例: f:(abc||def)\.txt$
各フィルター(例: Filter1, Filter2)は、以下のいずれかのタイプにすることができます:
*.ext拡張子によるファイルマスク(例: *.txt)
*.拡張子のないファイル(例: README)
*.ext指定した拡張子に一致するファイルを除外(2.16.19 以降で使用可能)
folder\対象フォルダー(末尾は必ず \ にする)(2.16.19 以降で使用可能)
folder\一致するフォルダーを除外(2.16.19 以降で使用可能)
正規表現正規表現を使用してファイル名を一致(2.16.49 以降で使用可能)
正規表現正規表現に一致するファイルを除外(2.16.49 以降で使用可能)
正規表現正規表現を使用してフォルダー名を一致(2.16.49 以降で使用可能)
正規表現正規表現に一致するフォルダーを除外(2.16.49 以降で使用可能)
式ファイルに対するフィルター式(例: fe:Size < 1KB)(2.16.49 以降で使用可能)
式ファイルを除外するためのフィルター式(2.16.49 以降で使用可能)
式フォルダーに対するフィルター式(2.16.49 以降で使用可能)
式フォルダーを除外するためのフィルター式(2.16.49 以降で使用可能)
ファイルフィルター名名前でファイルフィルターを適用(2.16.49 以降で使用可能)
例1 ファイルマスク
このコマンドラインの例では、フォルダー比較操作は拡張子 xml または
txt のファイルのみを対象とし、それ以外のファイルは省略されます。
WinMergeU c:\project\docs c:\temp /f *.xml;*.txt
例2 フォルダーの除外(2.16.19以降)
このコマンドラインの例では、フォルダー比較操作は、 .gitと
.vsフォルダーを除外します:
WinMergeU c:\project\docs c:\temp /f !.git\;!.vs\
例3 フィルター式(バージョン 2.16.49 以降)
このコマンドラインの例では、フォルダー比較操作は cpp または h
の拡張子を持ち、かつサイズが 1KB 未満のファイルのみを対象とします:
WinMergeU c:\project\docs c:\temp /f "*.cpp;*.h|fe:Size <
1KB"
WinMerge では、ファイルのメタデータ、内容、比較コンテキストに対して動作する強力なフィルタ式を使用できます。本セクションでは、サポートされる属性、演算子、関数、データ型、および評価ルールについて説明します。
サポートされるリテラルの型は以下の通りです:
Boolean:
true、false
Integer: 64ビット符号付き整数 (例: 1024,
100KB, 7days などの単位付きも可能)
Real (Double): 小数点または指数部を任意に含む浮動小数点数 (例:
3.14, .5, 1e6)
String: ダブルクォートで囲まれた文字列 (例:
"example")
内部的に扱われる型は以下の通りです: Boolean, Integer, Real, Timestamp, String, File Content,
Array, or undefined.
フィルタ式は、式の評価方法を制御するディレクティブをサポートしています。ディレクティブは式の先頭に指定し、@
を付けて記述し、式本体とは空白で区切ります。
デフォルトでは、すべての文字列比較演算子(=、!=、<、<=、>、>=、contains、recontains、like、matches)は大文字小文字を区別しません。この動作は次のディレクティブで制御できます。
@cs, @casesensitive
大文字小文字を区別する比較を有効にします。これらのディレクティブを指定すると、"ABC" と
"abc" は異なるものとして扱われます。
@ci, @caseinsensitive
大文字小文字を区別しない比較を有効にします(デフォルトの動作)。これらのディレクティブを指定すると、"ABC" と
"abc" は同一として扱われます。
例4 大文字小文字の区別の例
@cs Name = "README.txt" ## 大文字小文字を区別: "README.txt" のみ一致 @ci Name = "readme.txt" ## 大文字小文字を区別しない: "README.txt", "readme.txt", "ReadMe.TXT" などに一致 @casesensitive Extension = "TXT" ## 大文字小文字を区別: 拡張子 ".TXT" のファイルのみ一致 @caseinsensitive Content contains "error" ## 大文字小文字を区別しない: "Error", "ERROR", "error" などに一致
デフォルトでは、フィルタ式はパフォーマンス向上のために最適化されます。この動作は次のディレクティブで制御できます。
@optimize, @optフィルタ式の最適化を有効にします(デフォルトの動作)。複雑な式の場合、パフォーマンスが向上する可能性があります。
@nooptimize, @nooptフィルタ式の最適化を無効にします。デバッグ時や、最適化によって予期しない結果が発生する場合に役立ちます。
例5 最適化の例
@optimize Size > 10MB and Extension = "log" ## 最適化を有効(デフォルト) @noopt Name matches "complex[0-9]+pattern" ## デバッグのため最適化を無効 @nooptimize Content contains "special-case" ## 最適化を無効
@name
ディレクティブを使用すると、フィルタ式に説明用の名前を付けることができます。この名前はエラーメッセージやログで使用され、どのフィルタ式が問題を引き起こしたかを識別するのに役立ちます。
@name="Filter Name", @name=FilterNameフィルタ式に名前を付けます。名前に空白や特殊文字を含む場合は、二重引用符で囲む必要があります。空白を含まない名前は引用符なしで指定できます。
指定した名前は、エラーメッセージや診断出力でフィルタを識別するために使用されます。複数の複雑なフィルタ式を扱う場合に特に便利です。
例6 Name ディレクティブの例
@name="Large Image Files" Size > 10MB and Extension = "png" @name=SmallTextFiles Size < 1KB and Extension = "txt" @name="Modified Today" Date >= today() @name="Test Filter" @cs Name like "test_*.cpp"
@name
ディレクティブは他のディレクティブと組み合わせて使用できます。複数のディレクティブを使用する場合は、すべて式の先頭に記述し、空白で区切ります。
フィルタ式では、ファイルのメタデータや内容を参照する多様な属性が利用できます。属性名の大文字・小文字は区別されません。必要に応じて、比較対象のどの側(Left, Right, Middle)かを接頭辞で指定できます。
Existsファイルが存在する場合は true を返し、存在しない場合は false
を返します。
Nameファイル名
BaseName拡張子を除いたファイル名を返します。たとえば、"document.txt" は "document" を返します。
Extensionファイル拡張子
IsFolder項目がフォルダー/ディレクトリの場合は true を返し、ファイルの場合は false を返します。
Folderファイル名およびベースフォルダーを除いた相対パスを返します。
RelPath比較ルートディレクトリからの相対パスを、フォルダーパスとファイル名を含めて返します。例えば、"C:\Project" を比較していて、ファイルが "C:\Project\src\main.cpp" にある場合、RelPath は "src\main.cpp" を返します。
FullPathファイルのフルパスを返します。
Sizeファイルサイズ
Date最終更新のタイムスタンプ
DateStryyyy-MM-dd 形式の最終更新日付の文字列を返します。
CreationTime作成日時のタイムスタンプを返します。
Attributesファイル属性を整数値で返します。
AttrStrファイル属性の文字列を返します。例:"R" は読み取り専用、"H"
は隠しファイル、"A" はアーカイブ、"S" はシステムファイルを示します。
以下の属性は、ファイル比較項目にのみ使用できます。フォルダー項目に使用した場合の動作は未定義です。
Contentファイルの内容を表します。FileContent 型の値を返します。この型には contains および
recontains のみ使用できます。
以下の属性は、フォルダー比較項目にのみ使用できます。ファイル項目に使用した場合の動作は未定義です。
Filesフォルダーに直接含まれるファイル数。
RecursiveFilesすべてのサブフォルダーを含めた、フォルダー内のファイル総数。
Itemsフォルダーに直接含まれる項目(ファイルおよびサブフォルダー)の数。
RecursiveItemsすべてのサブフォルダーを含めた、フォルダー内の項目(ファイルおよびサブフォルダー)の総数。
TotalSizeフォルダーに直接含まれるすべてのファイルの合計サイズ(バイト単位)。
RecursiveTotalSizeすべてのサブフォルダーを含めた、フォルダー内のすべてのファイルの合計サイズ(バイト単位)。
比較対象のファイルの側を指定するために、接頭辞を追加できます:
Left: 左側のファイルに適用されます(例: LeftSize)
Right: 右側のファイルに適用されます(例: RightDate)
Middle: 3方向比較における中央のファイルに適用されます(例:
MiddleName)
接頭辞のない属性(例: Size)は、左・中央・右のすべての側の値を含む配列を返します。
これらの属性は、Windows プロパティ システムで定義されたメタデータ (例:
System.Title、System.FileOwner、System.Image.HorizontalResolution
など)にアクセスするためのものです。
Prop
指定した正規プロパティ名に対応するプロパティ値の配列(Left、Middle、Right)を返します。例:
prop("System.Title")
LeftProp
左側のファイルのプロパティ値を返します。例: leftprop("System.FileOwner")
MiddleProp中央のファイル(3-way 比較時)のプロパティ値を返します。
RightProp右側のファイルのプロパティ値を返します。
以下の属性は表示フィルター専用として設計されています(フィルター欄で
e:、e!:、fe:、fe!:、de:、de!:
プレフィックスを指定)。これらは比較が完了していることを前提とするため、ファイルフィルター(.flt)のインクルード/エクスクルードルールでは使用しないでください。予期しない動作の原因となる可能性があります。
Identical
比較結果が項目が同一であることを示す場合は true、それ以外の場合は
false を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Identical と指定すると同一ファイルのみを表示します。
Different
比較結果が項目が異なることを示す場合は true、それ以外の場合は
false を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Different と指定すると差異のあるファイルのみを表示します。
Skipped
エラーやフィルタールールにより比較がスキップされた場合は true、それ以外の場合は
false を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Skipped と指定するとスキップされた項目のみを表示します。
Binary
ファイルがバイナリとして検出された場合は true、テキストの場合は
false、ファイルが存在しない場合は undefined
を返します。この属性はサイド別プレフィックス(例:
LeftBinary、RightBinary)に対応しています。例:
allof(Binary) と指定すると、すべての側でバイナリであるファイルを表示します。
DifferentLeftMiddle
3方向比較において左と中央のファイルが異なる場合は true、それ以外は
false を返します。2方向比較では undefined
を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例: DifferentLeftMiddle and not
DifferentMiddleRight と指定すると、左のみが中央と異なるファイルを見つけることができます。
DifferentMiddleRight
3方向比較において中央と右のファイルが異なる場合は true、それ以外は
false を返します。2方向比較では undefined
を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
DifferentMiddleRight と指定すると、中央と右が異なるファイルを表示します。
DifferentLeftRight
3方向比較では左と右のファイルが異なる場合に true、それ以外は
false を返します。2方向比較では両方のファイルが存在し、かつ異なる場合に
true を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
DifferentLeftRight と指定すると、左と右が異なるファイルを表示します。
Differences
ファイル比較におけるテキスト差分の数を返します。この属性は比較済みのテキストファイルに対してのみ有効です。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Differences > 0
と指定すると差分のあるファイルを表示し、Differences > 10
と指定すると差分が10個を超えるファイルを表示します。
IgnoredDiffs
ファイル比較において無視された差分の数(行フィルターや空白設定により除外された差分)を返します。この属性は比較済みのテキストファイルに対してのみ有効です。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
IgnoredDiffs > 0
と指定すると無視された差分があるファイルを表示し、Differences = 0 and IgnoredDiffs >
0 と指定すると無視された差分を除けば同一であるファイルを表示します。
Unpacker
ファイル比較に使用された展開プラグインの名前を返します。展開プラグインが使用されていない場合は空文字列を返します。これはグローバル属性であり(左右別のプレフィックスには対応していません)。例:
Unpacker = "CompareMSExcelFiles" は Excel
展開プラグインを使用して比較されたファイルを表示し、Unpacker != ""
は展開プラグインが使用されたすべてのファイルを表示します。
Prediffer
ファイル比較に使用された比較前処理プラグインの名前を返します。比較前処理プラグインが使用されていない場合は空文字列を返します。これはグローバル属性であり(左右別のプレフィックスには対応していません)。例:
Prediffer = "IgnoreColumns" は IgnoreColumns
比較前処理プラグインを使用して比較されたファイルを表示し、Prediffer != ""
は比較前処理プラグインが使用されたすべてのファイルを表示します。
Codepage
ファイルのコードページ(文字エンコーディング)を整数値で返します。この属性はサイド別プレフィックス(例:
LeftCodepage、RightCodepage)に対応しています。例:
Codepage = 65001 と指定すると UTF-8
のファイルを表示し、allof(Codepage = 65001) と指定するとすべての側で UTF-8
のファイルを表示します。
HasBOM
ファイルに Byte Order Mark(BOM)がある場合は true、それ以外の場合は
false を返します。この属性はサイド別プレフィックス(例:
LeftHasBOM、RightHasBOM)に対応しています。例:
HasBOM と指定すると BOM のあるファイルを表示し、not
HasBOM と指定すると BOM のないファイルを表示します。
接頭辞のない属性(例:
Size)は、左・中央・右のすべての側からの値を含む配列を返します。これらの配列に対して演算子を適用する場合、比較対象がスカラーか他の配列かによって動作が異なります。
配列とスカラーを比較する場合、演算は各配列要素に対して個別に適用され、結果はブール値の配列になります。このブール配列に
true が1つでも含まれていれば、全体の評価結果は true
になります。すべてが false であれば false になります。
2つの配列を比較する場合、挙動は演算子によって異なります:
= および !=
の場合:配列の長さが同じである必要があります。結果は配列ではなく単一のブール値になります。=
はすべての要素が一致する場合のみ true を返し、!=
はいずれかの要素が異なる場合に true を返します。
他のすべての演算子(例: >,
<)では、各要素ごとに演算が適用され、ブール値の配列が生成されます。この配列に
true が1つでも含まれていれば、式全体の評価結果は true
になります。すべてが false の場合は false になります。
例8 例
[2, 4] = [2, 4] -> true
[2, 4] != [2, 5] -> true (4 != 5 だから)
[3, 5, 8] > [6, 4, 2] -> [false, true, true] -> true (少なくとも1つの比較が true だから)
デフォルトでは、すべての文字列比較演算子(=、!=、<、<=、>、>=、like、matches、contains、recontains)は大文字小文字を区別しません。この動作はディレクティブで制御できます(「大文字小文字の区別に関するディレクティブ」 を参照)。
<, <=, >,
>=数値、タイムスタンプ、または文字列の比較
=等価比較
!=不等比較
+, -, *,
/, %
算術演算子。+ と -
は加算および減算、* と /
は乗算および除算、% は剰余演算(余り)を行います。
and, or, not論理演算子
likeワイルドカードによる文字列一致
not like を使用して逆の一致条件を指定することもできます。
matches正規表現による一致
not matches を使用して一致しない条件を指定することもできます。
contains文字列が部分文字列を含んでいるかを判定します
not contains を使用して部分文字列が含まれていないことを確認できます。
recontainsいずれかの部分文字列が正規表現に一致するかを判定します
not recontains を使用して一致しないことを確認できます。
lineCount(content)ファイル内容またはファイル内容の配列の行数を Integer
として返します。content が配列の場合、結果は整数の配列になります。例:
lineCount(Content)
sublines(content,
start, count)
ファイル内容またはファイル内容の配列から、指定した開始行から指定行数の行を抽出し、連結した文字列として返します。content
が配列の場合、結果は文字列の配列になります。
strlen(source)文字列の長さを Integer として返します。source
が文字列の配列である場合、結果は整数の配列になります。例: strlen(Name)
substr(source,
start, count)文字列または文字列の配列 から指定範囲の文字列を String
型で返します。source が文字列配列の場合、結果は文字列配列になります。例:
substr(Name, 0, 3)
replace(str, from, to)
文字列内に含まれる部分文字列 'from' をすべて 'to'
に置換します。strが文字列配列の場合、結果は文字列配列になります。例:
replace(name, "_old", "_new")
regexReplace(str, pattern, replacement)
正規表現 pattern に一致するすべての部分を replacement 文字列で置換します。replacement 文字列では後方参照($1、$2
など)を使用できます。strが文字列配列の場合、結果は文字列配列になります。例:
regexReplace(name, "^(\w+)(\w+)$", "$2$1") は、アンダースコアで区切られた単語の順序を入れ替えます。
replaceWithList(str, filepath)
タブ区切りファイルから読み込んだ置換ルールを使用して、str
内の複数の文字列を置換します。ファイル形式は 1 行につき 1
つの置換ルールで、search_string<TAB>replacement_string
の形式です。#
で始まる行はコメントとして扱われ、無視されます。空行も無視されます。str
が配列の場合、置換が適用された文字列の配列が結果として返されます。
ファイル形式の例:
# コメント行 apple orange cat dog old new
例:
replaceWithList(Name, "C:\Filters\replacements.txt") -
ファイル内の置換ルールをファイル名に適用します
regexReplaceWithList(str, filepath)
タブ区切りファイルから読み込んだ正規表現パターンを使用して、str
内の文字列を置換します。ファイル形式は 1 行につき 1
つのパターンで、regex_pattern<TAB>replacement_string
の形式です。置換文字列には、キャプチャされたグループへの後方参照 ($1, $2 など)
を含めることができます。#
で始まる行はコメントとして扱われ、無視されます。空行も無視されます。str
が配列の場合、置換が適用された文字列の配列が結果として返されます。
ファイル形式の例:
# コメント行
\d+ NUMBER
(\d{4})-(\d{2})-(\d{2}) $1_$2_$3
例:
regexReplaceWithList(Name,
"C:\Filters\regex_replacements.txt") - 正規表現による置換をファイル名に適用します
normalizeUnicode(str[, form])
Unicode 文字列を正規化します。省略可能な form パラメータで正規化形式を指定できます。指定可能な形式は "NFC" または
"C"(既定値)、"NFD" または "D"、"NFKC" または "KC"、"NFKD" または "KD" です。数値形式も指定できます:
1=NFC、2=NFD、5=NFKC、6=NFKD。strが文字列配列の場合、結果は文字列配列になります。例:
normalizeUnicode(name, "NFC")
toLower(str)
文字列内のすべての文字を小文字に変換します。str
が配列の場合、結果は小文字に変換された文字列の配列になります。例: toLower("Hello World")
は "hello world" を返します。
toUpper(str)
文字列内のすべての文字を大文字に変換します。str
が配列の場合、結果は大文字に変換された文字列の配列になります。例: toUpper("Hello World")
は "HELLO WORLD" を返します。
toHalfWidth(str)
全角文字を半角文字に変換します。主に全角の英数字やカタカナを半角に変換するために使用されます。str
が配列の場合、結果は変換された文字列の配列になります。
toFullWidth(str)
半角文字を全角文字に変換します。主に半角の英数字やカタカナを全角に変換するために使用されます。str
が配列の場合、結果は変換された文字列の配列になります。
toKatakana(str)
ひらがなをカタカナに変換します。ひらがな以外の文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
toHiragana(str)
カタカナをひらがなに変換します。カタカナ以外の文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
toSimplifiedChinese(str)
繁体字中国語を簡体字中国語に変換します。簡体字が存在しない文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
toTraditionalChinese(str)
簡体字中国語を繁体字中国語に変換します。繁体字が存在しない文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
now()現在の日時を Timestamp 型の値として返します。
today()本日の日付を、日の始まりである 00:00:00.000 を表す
Timestamp 型として返します。
startOfWeek(timestamp)週の初日(日曜日)を返します。ロケールには依存しません。
startOfMonth(timestamp)月の初日を返します。
startOfYear(timestamp)年の初日を返します。
toDateStr(timestamp)指定されたタイムスタンプをyyyy-MM-dd
形式の文字列に変換して返します。timestampがタイムスタンプ配列の場合、結果は文字列配列になります。
abs(value)整数または整数の配列 の絶対値を返します。value
が整数配列である場合、結果は整数配列になります。
allof(booleans)ブール値の配列 のすべての要素が条件を満たす場合に true
を返します。
allequal(array)配列内のすべての値が等しい場合に true を返します。
isWithin(value,
min, max)
value が範囲 [min,
max](両端を含む)内にある場合に true
を返します。整数、浮動小数点数、タイムスタンプ、文字列(大文字小文字を区別しない比較)に対応しています。value
が配列の場合は、各要素を個別に評価した真偽値の配列を返します。
例:
isWithin(5, 1, 10) は true を返します
isWithin(Size, 1KB, 10MB) - いずれかのファイルサイズが 1KB から 10MB
の範囲内かを確認します
isWithin(Date, today() - 7days, today()) - ファイルが過去 1
週間以内に更新されたかを確認します
allof(isWithin(Size, 1KB, 10MB)) - すべてのファイルサイズが 1KB から
10MB の範囲内かを確認します
inRange(value,
min, max)
value が範囲 [min,
max)(下限を含み、上限を含まない)内にある場合に true
を返します。整数、浮動小数点数、タイムスタンプ、文字列(大文字小文字を区別しない比較)に対応しています。value
が配列の場合は、各要素を個別に評価した真偽値の配列を返します。
例:
inRange(5, 1, 10) は true を返します
inRange(10, 1, 10) は false を返します
inRange(Size, 0, 1MB) - いずれかのファイルサイズが 1MB 未満かを確認します
anyof(inRange(Date, startOfMonth(today()), today())) -
いずれかのファイルが今月(今日を除く)に更新されたかを確認します
logError(value1,
value2, ...),
logWarn(value1,
value2, ...),
logInfo(value1,
value2, ...)すべての引数の文字列表現を連結してログに出力します(それぞれエラー、警告、情報レベルで出力)。引数は空白で区切られ、最後の引数の値が関数の戻り値として返されます。これらの関数はフィルタ式のデバッグに便利です。
使用例(戻り値を利用する場合):
logInfo("ファイルサイズ:", Size) > 1MB -
ファイルサイズをログに出力し、1MBより大きいかを確認します
logWarn("処理中:", Name) like "*.tmp" -
ファイル名をログに出力し、テンポラリファイルかどうかを確認します
Size > 1KB and logInfo("大きなファイル:", Name) contains "test"
- サイズ条件が真の場合のみログ出力し、その後ファイル名をチェックします
if(condition,
trueValue, falseValue)
condition が true と評価された場合は
trueValue を返し、それ以外の場合は
falseValue
を返します。この関数は短絡評価を行います(返される側の分岐のみが評価されます)。
例:
if(Size > 1MB, "large", "small") - ファイルサイズに応じて "large"
または "small" を返します
if(Extension = "txt", "text file", "other file") -
拡張子によってファイルを分類します
if(Exists, Size, 0) - ファイルが存在する場合はサイズを、存在しない場合は 0 を返します
ifEach(conditionArray,
trueValue, falseValue)
要素ごとの条件付き選択を行います。conditionArray の各要素について、条件が true
の場合は trueValue の対応する要素を、false の場合は
falseValue
の対応する要素を返します。trueValue または
falseValue がスカラー値の場合は、すべての要素にブロードキャストされます。
例:
ifEach(Size > 1MB, "large", "small") - 各ファイルについて
"large" / "small" の配列を返します
ifEach(array(true, false, true), array("a", "b", "c"), array("x",
"y", "z")) - array("a", "y", "c") を返します
anyof(ifEach(Size > 100KB, Size < 10MB, false)) -
100KB 以上 10MB 未満のファイルが存在するかを確認します
choose(index,
value0, value1, ...)
index
に基づいて引数の中から値を選択します。index が 0 の場合は
value0 を、1 の場合は value1
を返します。負のインデックスは 0 として扱われます。最後の値を超えるインデックスが指定された場合は、最後の値を返します。
例:
choose(0, "first", "second", "third") - "first" を返します
choose(DiffCode % 3, "equal", "different", "unique") -
差異コードをラベルに対応付けます
choose(5, "a", "b", "c") - "c" を返します(範囲外のため最後の値が返されます)
chooseEach(indexArray,
value0, value1, ...)
要素ごとの値選択を行います。indexArray
の各インデックスに対して、残りの引数から対応する値を選択します。indexArray
がスカラー値の場合は choose と同じ動作になります。
例:
chooseEach(array(0, 1, 2), "a", "b", "c") -
array("a", "b", "c") を返します
chooseEach(array(0, 0, 1), "x", "y") -
array("x", "x", "y") を返します
chooseEach(array(2, 0, 1), "first", "second", "third") -
array("third", "first", "second") を返します
andEach(value1,
value2),
orEach(value1,
value2),
notEach(value)要素ごとの論理演算を行います。これらの関数は、真偽値、真偽値配列、またはその組み合わせに対して動作します。
andEach - 論理 AND 演算
orEach - 論理 OR 演算
notEach - 論理 NOT 演算(単一引数)
引数がスカラー値の場合はスカラーの真偽値を返します。一方が配列でもう一方がスカラー値の場合は、スカラー値がすべての要素にブロードキャストされます。両方が配列の場合は、要素ごとの演算が行われます。
例:
andEach(Size > 1KB, Size < 1MB) - 1KB 以上 1MB
未満のファイル
orEach(Extension = "txt", Extension = "log") - txt または
log ファイル
notEach(Exists) - 存在しないファイル
allof(andEach(Exists, Size > 0)) - すべてのファイルが存在し、サイズが 0
ではありません
anyof(notEach(Size > 1MB)) - 1MB 以下のファイルが存在します
ファイルサイズには以下の接尾辞を使用できます:
KB, MB, GB, TB時間の長さには以下の接尾辞を使用できます:
weeks, week, w, days, day, d, hours, hour, hr, h, minutes, minute, min, m, seconds, second, sec, s, milliseconds, millisecond, msec, msSize < 10KB - いずれかのファイルサイズが 10KB 未満
LeftSize >= 10MB - 左側のファイルサイズが 10MB 以上
allof(Size < 1MB) - すべてのファイルが 1MB 未満
abs(LeftSize - RightSize) < 1KB - サイズ差が小さい
DateStr = "2025-07-20" - その日に更新されたファイル
Date >= today() - 今日以降に更新されたファイル
isWithin(Date, today() - 7days, today()) -
過去1週間以内に更新されたファイル
inRange(Size, 1KB, 10MB) - ファイルサイズが1KB以上10MB未満
allof(isWithin(Size, 100KB, 1MB)) -
すべてのファイルサイズが100KBから1MBの範囲内
AttrStr contains "R" - 読み取り専用ファイル
Name matches "file[0-9]\.txt" - ファイル名に正規表現を適用
Content contains "Test" - 内容に "Test" を含む
sublines(Content, 0, 1) contains "XML" - 1行目に "XML" を含む
(Extension = "log" and Size > 10MB) or (Date < today() -
7days) - 大きなログファイルまたは1週間以上前のファイル
AttrStr not contains "H" and Name like "*.tmp" -
非表示でない一時ファイル
isWithin(Extension, "a", "m") and inRange(Size, 0, 1MB) -
拡張子が「a」から「m」の範囲で、サイズが1MB未満のファイル
toLower(Name) = "readme.txt" - 大文字・小文字を区別しないファイル名の一致判定
toHalfWidth(Name) like "*.txt" - 全角を半角に変換した後で一致判定
Different - 差異のあるファイル/フォルダーのみを表示します(表示フィルター専用)
Identical - 同一のファイル/フォルダーのみを表示します(表示フィルター専用)
allof(Binary) - すべての側でバイナリであるファイルのみを表示します(表示フィルター専用)
DifferentLeftMiddle and not DifferentMiddleRight -
3方向比較において、左と中央のみが異なるファイルを表示します(表示フィルター専用)
ファイルフィルターは、拡張子 fltのテキストファイルです。
これらは、フォルダー比較用の複数のフィルタールールを適用することを可能にします。
ファイルマスクと異なり、ファイルフィルターは、含むか除外、どちらかにマッチすることができます。
WinMergeは、たくさんの定義済ファイルフィルターをインストールします。
もし、必要なフィルターが、これらのファイルフィルターで提供されていなかったら、 自分自身で作成することができます。
タスクをもっと簡単にするために、WinMergeは、
FileFilter.tmplという名前のテンプレートも提供しています。
このセクションは、比較にファイルフィルターを適用する方法と、ファイルフィルターの文法を説明します。 「フィルターダイアログの使用」では、フィルターの追加、編集、管理方法について説明します。
WinMergeは、次の場所のファイルフィルターを自動的に検出します:
ここには、定義済ファイルフィルターがインストールされています。例えば、 C:\Program
Files\WinMerge\Filters。 システム上のすべてのユーザーに有効にするために、
ここにファイルフィルターを作成、または、コピーすることができます。
新しいファイルフィルターを作る前に、定義済フィルターに必要なものが含まれているか確認してください。 含まれていない場合、定義済ファイルの中から役立つルールが見つかるかもしれません。
このフォルダーの場所は、WinMerge オプションの、システムページで定義されています。
デフォルトでは、あなたのユーザープロファイルフォルダーのサブフォルダーとして指定されています (Windows
10なら、Documents\WinMerge\Filters)。
通常、ここに作成、または、コピーされたフィルターは、 あなただけが見ることができます。
新しいファイルフィルターを作成したら、それらをプライベートにするために、 ここにコピーすることができます。
その他のフォルダーにあるファイルフィルターを適用する前に、 それらをインストールしなければなりません。
次のいくつかの方法で、ファイルフィルターを適用することができます:
ファイルまたはフォルダーの選択ダイアログから、フォルダー比較を起動した時:
1(左)と 2(右)のフォルダー選択後、 フィルターフィールドの隣にある ボタンをクリックしてください。
フィルターダイアログで、ファイルフィルターを選択し、 フィルターフィールドへロードするには、ファイルフィルタータブを使用します。
ファイルフィルターが有効になっている(訳注: 何れかのファイルフィルターが選択されている状態)場合、選択されたファイルフィルターは、 フィルターフィールドへ既にロードされています。
比較操作を続けてください。操作を開始した時、 フィルターフィールドのファイルが適用されます。
フォルダー比較操作起動後(違うフィルターを適用した、 または、フィルターを無効にしてしまった時など)にファイルフィルターを変更するには:
→ をクリックしてください。
フィルターダイアログで、新しいフィルターを設定し、 をクリックしてください。
フィルターダイアログを閉じた時、新しいフィルターは自動では適用されません: フォルダー比較ウィンドウ中で新しい結果を見るには、 F5を押下してください。
WinMerge コマンドラインから、
フォルダー比較起動時にファイルフィルターを指定するには、 -fフラグを使用してください。
このセクションは、WinMerge ファイルフィルターの文法と、記述のためのガイドラインの提供について説明します。
コメント記号は、 ##です。 コメント記号の後にある、行内のすべての文字は無視されます。
WinMergeは、ルール中のほとんどの空白文字を無視します。
しかしながら、通常は、コメントの前に1つか複数の空白文字(スペースかタブ)が置かれるでしょう。 ルール中で、
##を文字列として使用するには、後ろの空白文字を取り除いてください。
ファイルフィルターで、まずはじめに必要な2行は:
ファイルダイアログに表示されるフィルター名です
適用されるフィルタータイプです。次の値のうち、1つを指定してください:
指定されたルールにマッチしたアイテム以外はすべて含めます。
指定されたルールにマッチしたアイテム以外はすべて除外します。
excludeメソッドを選択した時は、サブフォルダーを指定するd(ディレクトリ)ルールも追加しなければなりません。このように、すべてのサブフォルダーを指定するのは、通常良いアイデアです:
d: \\*$ ## Subfolders
これらの用語で混乱しないでください。ファイルフィルターのincludeルールは、「何を含めるか」を指定するわけではありません。「何を含めない」かを指定します。同様に、excludeルールは、「何を除外する」かを指定するわけではありません。「何を除外しないか」を指定します。
次に、ファイルには 1 つ以上のフィルター ルールが含まれている必要があります。ルールは好きなだけ追加できます。 1 行に 1 つのルールが必要であり、各ルールは完全に 1 行に収まる必要があります (ルール内で改行は許可されません)。 ルールは型指定子で始まり、その後に正規表現またはフィルター式が続きます。 サポートされている型指定子は次のとおりです。
正規表現正規表現を使用してファイル名を照合する
正規表現正規表現に一致するファイルを除外する (2.16.19 以降で利用可能)
正規表現正規表現を使用してフォルダー名を一致させる
正規表現正規表現に一致するフォルダーを除外する (2.16.19 以降で利用可能)
式ファイルに対するフィルター式(例: fe:Size < 1KB)(2.16.49 以降で使用可能)
式ファイルを除外するためのフィルター式(2.16.49 以降で使用可能)
式フォルダーに対するフィルター式(2.16.49 以降で使用可能)
式フォルダーを除外するためのフィルター式(2.16.49 以降で使用可能)
式ファイルとフォルダー両方に適用されるフィルター式(例: e:Name like "Common*.*")(2.16.56 以降で使用可能)
exprファイルとフォルダー両方を除外するためのフィルター式(2.16.56 以降で使用可能)
多くの正規表現の特殊文字の中で、次の文字は、ファイルフィルターでは特に重要です:
ルールが正しく動作するために頻繁に必要になります。
ルールが正しく動作するために頻繁に必要になります。例えば:
\.c$ ## 拡張子
cのファイルのみにマッチします。
\.c ## cppや
comのような、拡張子が
cで始まるファイルにマッチします。
通常の文字を、特殊文字にマッチさせるために使います。 例えば、フォルダー名にマッチするために、 フォルダー区切り文字のバックスラッシュの前に、
バックスラッシュを置きます(\\)。 ファイル名中のドットにマッチするために、
バックスラッシュを指定し、その後にドットを置きます(\.)。
特殊文字やワイルドカードは、ファイル名とマッチさせるためには、使用されません。 ある型のすべてのファイル名にマッチするためには、単にファイル名を省略します。
ルールは、大文字・小文字を区別しません。例えば、 f: \.bat$は、
winmerge.batと compare.BATにマッチします。
例9 ファイルフィルタールールの例
シンプルなファイルフィルタールール:
f: \.cpp$ ##*.cppファイルにマッチ f: \.h$ ##*.hファイルにマッチ f: ^My ##My*.*ファイルにマッチ f: Dlg\. ##*Dlg.*ファイルにマッチ d: \\test$ ##testフォルダーにマッチ d: ^\\Build$ ##Buildフォルダーマッチ d: Temp$ ##*Tempフォルダーにマッチ (例:FirstTemp) d: Src ##*Src*フォルダーにマッチ
いくつかのルールは、もっと複雑な正規表現です:
f: ^\.#.*$ ##.#filename.versionファイル f: Dlg\.c(pp)?$ ##*Dlg.cと*Dlg.cppファイル f: ^I.*\.h$ ##I*.hファイル f: Srv[1-9]\.def$ ##*Srv1.defから*Srv9.defファイル f: ^[h,k,m] ##h*.*d、k*.*、m*.*ファイル
ファイル比較で単一行を無視するために、行フィルターを使用することができます。 例えば、コメント、生成されたコードの決まった型や、 バージョン管理システムのタイムスタンプの様なものを無視するために、 行フィルターを使うかもしれません。各行フィルターは1つのルールです。 ファイル比較のために、たくさんの行フィルターを使用することができます。
フィルターの追加、編集、管理については、 「フィルターダイアログの使用」を参照してください。
次の方法で、行フィルターを適用することができます:
ファイルまたはフォルダーの選択ダイアログから、 ファイル比較を起動する場合
1(左)と 2(右)のファイル選択後、 フィルターフィールドの隣の をクリックしてください。
フィルターダイアログで、使用したい行フィルターを有効化するため、 また、現在どの行フィルターが有効かを確認するには、行フィルタータブを使います。
フィルターフィールドは、 どの行フィルターが有効化されているかを表示しません。
ファイル比較操作を続けてください。 操作を開始した時に、有効化された行フィルターが適用されます。
既に、ファイル比較操作を起動後 (違うフィルターを適用した、または、フィルターを無効にしてしまった時など)は、
→ をクリックしてください。
ファイルフィルタータブを開いてください。
あなたが適用したい行フィルターの行にチェックしてください。 また、適用したくないフィルターは、チェックを外してください。
、 、 ボタンを使用して、 フィルターを追加、編集、削除することもできます。
行フィルター機能を有効にするには、 行フィルターを有効にするにチェックしてください。 行フィルター機能を無効にするには、チェックを外してください。
をクリックして、 ファイルフィルターダイアログを閉じてください。
F5を押下して変更を適用し、 ファイル比較ウィンドウをリフレッシュしてください。
行フィルターは、行フィルタールールが有効化されている場合、 比較ファイル中の単一行の差異毎に評価されるルールです。 単一行の差異にルールがマッチした時、その差異は無視されます。
無視された差異は、ファイル比較ウィンドウ中では、 無視された差異の色(WinMergeオプションの色ページで定義されている) でマークされます。 これは、その他のタイプと無視された差異を区別できるようにします。 しかし、無視された差異は、選択やマージすることができません。
行フィルターマッチは、2つの考えに基づいて記述されるかもしれません:
ルールが、行のある部分にマッチした時、差異全体が無視されます。 つまり、行の一部だけをフィルターすることはできません。 例えば、2つのファイルに、次の単一行の差異があると仮定した場合:
File1:
# Jean Sibelius
File2:
# Janne Sibelius
フィルターなしの場合、行は差異として検出されます。 しかし、行フィルターを
^#の式とともに適用する場合、その行は同一であると評価されます。
なぜなら、式は、両方のファイルにマッチする最初の文字のみを指定しているからです。
ルールは、すべての行にマッチした場合に、複数行差異に適用されます。例えば、次の2行の差異を考えてみてください:
File1:
# Jean Sibelius # Pekka Himanen
File2:
# Janne Sibelius Pekka Himanen
同じ ^#ルールは、1行目にマッチしますが、2行目にはマッチしません。 したがって、差異は無視されません。
パターンの正確さを制御するために、 行頭(^)と行末($)
記号を使用することは、大抵、良い習慣です。 なぜなら、式が、行のある部分にマッチした場合に、 ルールが適用されるからです。
例10 行フィルターサンプル
^MYTAG$
厳密に、 MYTAGにマッチする行をフィルターします
^::
::で始まる行をフィルターします
^/\*.*\*/$
で始まり、/**/で終わる行をフィルターします
^[1-5]00
数字の、100、200、300、400、500 で始まる行をフィルターします
例11 CVS の Id 行にマッチする行フィルタールール
CVS の Id 行は、次の様なものです:
// $Id: Filters.xml 7591 2013-01-20 15:47:42Z christianlist $
そしてこれは、次のルールでフィルターできます:
^// \WId: .*\$
このセクションは、ファイルフィルターと行フィルターの作成・管理機能を提供する、 フィルターダイアログの説明をします。
フィルターダイアログを開くには、次の何れかの方法を使用してください:
ファイルまたはフォルダーの選択ダイアログで、 フィールドの右にある、 選択ボタンをクリックしてください。 フォルダー比較用のファイルフィルターを適用したい時は、方法を使用してください。
→ をクリックしてください。 この方法は、ファイルまたはフォルダーの選択ダイアログを開いている時以外に使用可能です。
フィルターダイアログには、それぞれの WinMergeフィルター用のタブがあります:
フォルダー比較用のファイルフィルターを設定するには、このタブを選択してください。
ファイル比較用の行フィルターを設定するには、こちらのタブを使用してください。
ファイル比較操作の置換フィルターを使用するには、このタブを選択します。
このタブの主要部分は、フォルダー比較用に利用可能なファイルフィルターの一覧です。 このリストは、共有、個人、そして、 「ファイルフィルターの場所」で説明されている、 WinMergeが知り得るインストール済みのファイルフィルターを含んでいます。
ファイルフィルターが、フォルダー比較操作で、それを有効にすること、 また、フィルターが使用され始めてから、 現在のフィルターを止めるために無効にすることを可能にしなければなりません:
まだ、フィルターダイアログを開いていない場合は、開いてください
ファイルフィルターを選択、もしくは、リストから を選択しくてださい。
をクリックして、 フィルターダイアログを閉じてください。
ファイルフィルターを有効にした後でそれらを適用する方法が、いくつかあります。 詳細は、 「ファイルフィルターの適用」を参照してください。
ファイルフィルターリストの管理と フィルターの新規作成には、これらのボタンを使用してください:
フィルターがどのように動作するか素早く確認するには、 リスト中のファイルフィルターを選択し、 をクリックしてください。 詳細は、 「ファイルフィルターのテスト」を参照してください。
ファイルフィルターを配置し、フィルターリストへ追加することができます。 ファイルフィルターは、それらをインストールしない限り、 共有フォルダー、デフォルトのプライベートフォルダーのどちらでも検出されません。
共有フォルダーかプライベートフィルターフォルダーのどちらかに、 ファイルテンプレートの新しいコピーを作成します。 「ファイルフィルターの作成」で説明されているように、 テンプレートを編集、ルールの追加を行ってください。
デフォルトエディターでファイルを開くには、リスト中のファイルフィルターを選択し、 をクリックしてください。
ファイルを削除しリストから取り除くには、 リスト中のファイルフィルターを選択し、 をクリックしてください。 これで、本当にファイルは削除されました。
をクリックして、 フィルターダイアログを閉じた時、変更は保存されます。 行フィルターは、Windowsのレジストリに保存されます。
WinMergeにインストール済のファイルフィルターが、 お望みのフィルターを提供していないなら、あなた自身で作成することができます:
→ をクリックしてください。 または、ファイルまたはフォルダーの選択ダイアログから、 フィールドの右にある、 選択ボタンをクリックしてください。
共有/プライベートフィルターダイアログで、 共有フィルター、または、 プライベートフィルター (これらを何に使用するかは、 「ファイルフィルターの場所」を参照してください)を選択し、 OKをクリックしてください。
お使いのシステムの共有、または、プライベートフォルダーが、 「新しいフィルターのファイル名を指定してください」ダイアログに開きます (プライベートフォルダーが存在しない場合は、WinMergeが作成します)。
「新しいフィルターのファイル名を指定してください」ダイアログで、 ファイル名を入力し をクリックしてください。
既存のファイル名を選ばないでください: 既存のファイルを編集するには、 2に戻って、 「新規」の代わりに、「編集」をクリックしてください。
WinMergeは、新しいファイルを、テンプレート: FileFilter.tmplを用いて作成し、
デフォルトのテキストエディターでそれを開きます。
テンプレートの編集は、テンプレートの指示に従って、 プレースホルダー名と説明の更新、 「ファイルフィルターの文法」で説明されている、 フィルタールールの追加を行ってください。 テキストエディターでファイルを保存してください。
あなたが作成中のルールを、素早くテストしたい場合は、 フィルターダイアログの「テスト」ボタンをクリックしてみてください。 詳細は、「ファイルフィルターのテスト」を参照してください。
標準のフィルターフォルダーに、ファイルフィルターを作成したにも関わらず、フィルターダイアログがその新しいファイルフィルターを表示しない場合は、一度、をクリックしてダイアログを閉じてください。次に、 → をクリックし、再度ダイアログを開いてください。ファイルフィルターリストは、新しいファイルフィルターを含んでいるでしょう。
お使いのシステム上の、別の場所にファイルを保存した場合、 あなたがインストールしない限り、WinMergeは、それを検出することができません。 システム上のどこかにあるファイルフィルターを検出させるには:
フィルターダイアログの をクリックしてください。
「インストールするファイルフィルターの位置」ダイアログで、システム上の fltファイルを選択し、
をクリックしてください。
ファイルフィルターリストは、インストールされたファイルフィルターを含んでいるでしょう。
新しいルール作成や既存のルールの理解を補助するため、 サンプルデータに対し素早くファイルフィルターをテストするには、 テストフィルターダイアログを使用してください。 それは、フルで比較操作を走らせるより簡単です。
フィルターダイアログから始めます:
ファイルフィルタータブで、テストしたいファイルフィルターを選択してください。
テストするルールを確認したい場合は、 をクリックしてください。 ファイルが開き、次のステップの間、内容を確認することができます。
をクリックしてください。
フィルターのテストダイアログで、テストするルールの型を選択してください:
ファイルフィルター中のファイルルール、 f:をテストするには、 フォルダー名オプションのチェックを外してください。
フォルダールール、 d:をテストするには、 フォルダー名オプションにチェックを入れてください。
テスト用のテキストを入力してください。
テキストは、テストするルールの型に適したものであるべきです。 例えば、フォルダー名オプションをチェックした場合、 あなたは「\temp」の様なフォルダー名を入力したいでしょう。
結果欄は、入力したテキストを、 次のどちらかのステータスと共に表示します:
passed、または、
failed。
ファイル比較用の行フィルターの設定と有効化には、このタブを使用してください。 タブは、ルールの一覧を持っています。それぞれのルールは、1つの正規表現を含みます。 ファイル比較用に、リストから複数のルールを組み合わせて適用することができます。
下の 正規表現リストには、 いつでもルールの追加、編集、削除に使うことのできる、編集欄とボタンがあります。
新しいルールを追加するには:
ボタンをクリックしてください。 カーソルが自動的に編集欄へ移動します。
正規表現リストの下にある、編集欄に式を入力してください。
をクリックし、リストへ式を読み込んでください。
既存のルールを編集するには:
行を選択し、 をクリックしてください。
編集欄の式を編集してください。
編集が完了したら、をクリックしてください。
ルールを削除するには、ルールを選択(チェック)し、 ボタンをクリックしてください。
正規表現リストで、 適用したいフィルターにチェックを入れ、適用したくないフィルターはチェックを外すだけです。
行フィルターを有効にするオプションに チェックを入れるか、外してください。 行フィルターを有効にした場合、 正規表現リストで、現在チェックされているすべてのルールが使用されます。 行フィルターを無効にした場合、たとえそれらがチェックされていても、ルールは使用されません。
をクリックして、フィルターダイアログを閉じ、設定を保存してください。
それらを有効にした後にファイルフィルターを適用する、いくつかの方法があります。 詳細は、 「行フィルターの適用」を参照してください。
正規表現は、非常に複雑になり得ます。幸い、WinMerge のほとんどのファイルフィルターは、このトピックの例からもわかるように、シンプルな範囲の表現です。 WinMergeと共にインストールされるフィルターファイルは、多くの役に立つ例を含んでいます。
最後に、Web上には、正規表現を手助けする、これらのサイトを含むたくさんの情報源があります: