KDiff3について

はじめに

表題のKDiff3は、DEXCS-OF(DEXCS for OpenFOAM)においてOpenFOAMのケースファイルを比較するツールとして推奨してきたもので、ずいぶん前から標準搭載しているツールである。

しかしバージョンの異なる標準チュートリアルケースを普通に(標準設定のまま)比較した例を以下に示しておくが、残念ながら全ケースにおいて、同一でないと判定されてしまっていた。

これは、標準設定では上図の右半面(選択したファイル(T)の内容を比較表示している)に示すように、コメント(バージョン名が記されている)行も含めた比較となっていたからであった。そこで実質的な違いを比較するには、ファイルを一つずつ調べる必要があり、上図の場合には実質的な違いは無いと判断する、といった使い方になってしまい、標準チュートリアルケース全体の比較という使い方には無理がある・・・と思っていた。

ただ「標準設定では」と記したが、このオプションを変更すれば何とかなるのでは?という感触もあった。つい面倒さにかまけて手付かずだったのを今回ちゃんと調べたところ、ようやく以下のように実質的な違いだけを見た目だけで判定できるようになった。

以下、その経緯(苦労譚)について記しておくが、結論だけ先に記しておくと、「KDiff3を設定」のダイヤログ画面で、

  • 「Diff」のメニューで、ignore C/C++ comments にチェック
  • 「Folder」のメニューで、「バイナリ比較」を「完全分析」に変更

ということになる。

設定変更するには

「設定」メニューから「KDiff3を設定」を選べば良いだろう・・・とまでは容易に思いつく。

ここから先のメニューが「フォント」「Color」「エディタ」…とたくさんあったので、なかなか調べようとする意欲が生じていなかった。

最初の手掛かりは❶「Diff」メニューにあった。この中に、❷「ignore C/C++ comments (treat as white space)」というのがあって、これにチェックすれば良いのでは?ということである。

この設定で再読込した結果を以下に示しておく。

本記事の冒頭に示したキャプチャー図と一見同じようだが、微妙に異なっている。

❶コメント部分の不一致部分がスクロールバー中で赤色表示されているが、赤の色が、やや薄い赤になっている。

❷未解決の衝突の数1としてカッコ()内にその内訳が記されてるが、(内0はホワイトスペース)から(内1はホワイトスペース)と変化した。

つまり、衝突箇所はコメント行であることをちゃんと認識してはいるということのようであった。しかしながら画面左のフォルダーや書類アイコンの比較では色が違ったままなので、これでは一つずつ調べるしか無いという状況は変わらない。

これを変更する何か方法があるはずだと、ようやく見つけたのが以下のオプションであった。

ファイルの比較モードを、「バイナリ比較」から「完全分析」に変更せよ、ということであった。解った後で「完全分析」の意味を深読みすれば、そういうことなのかなぁ…と思われないでもないが、オプションを探し始めた当初にはほとんどスルーしていた。「Folder」以外のメニューに含まれるオプションも色々試行錯誤しながら、最後に駄目元で変更したら当たったようなものである。

何はともあれ、この変更を確定するには、❶「ファイル」⇒「開く」メニューから、全体を再読込する必要がある。

その際に、❷「マージ」にチェックマークが付いてしまうので、これを外しておくことも必要である。結果は以下の通りとなって、めでたし、めでたし…であった。

上の図は、OpenFOAMのv2506と、v2512の全チュートリアルケースを比較したもので、1分もあれば解析が完了する。

因みに、これまで使ってきた拙作の全チュートリアルケースの名前を取得するスクリプト(たとえば、こちらを参照)を使ってその差分を手作業で見た結果(v2512で新規追加されたケース)は以下の通りである。

  • basic/scalarTransportFoam/movingSource
  • basic/scalarTransportFoam/pitzDaily
  • heatTransfer/buoyantPimpleFoam/hotRoomWithThermalShell.multi-area
  • lagrangian/kinematicParcelFoam/windshield
  • mesh/moveDynamicMesh/rotorDisk_inclined
上図のジャンル別一覧のサブディレクトリ以下詳細をここでは説明しないが、これらのケースが抽出できているのは当然として、チュートリアルケースの内容そのものの変化もいくつか抽出できている。詳細は近日公開予定の「Allrunやってみた/v2512」で紹介予定。

また個別のファイルの比較例として、本記事冒頭のシーン図を題材に見比べると、ファイルの内容ではコメント文の違いがホワイトスペースとして認識されるものの、左半面のフォルダー/ファイルの一覧リスト上では、同一のものとして表示されていることも確認できる。

Pythonの場合

ここまでは、OpenFOAMの標準チュートリアルリストというかC++のコードを対象とした場合の使い方になるのだが、Pythonの場合はどうか? ということである。実際のところ本記事に係る調査は、FreeCADの拡張モジュール(具体的には、DEXCSワークベンチのハック元となったCfdOFというモジュール)での新旧を比較したいというのが、そもそもの動機であった。

実はCfdOFにおいて、DEXCS2025に搭載したものと最新版(2026年3月に入手したもの)を比べたところ、ほとんど全てのコードでコメント行ブロックが大きく改変されており、従来の比較の方法(たとえばこちらの記事)では埒が明かないとなったのである。

Pythonの「#」で始まるコメント行を、C/C++のコメント行に変更してしまえば良い、ということである。

プリプロセッサを使うというのは、DEXCSではJGPとうプロットツールを使う際にもお馴染みのやり方だが、コマンドの記法が少々異なる。

なおこのあたり具体的には、KDiff3の「ヘルプ」メニューから辿ることのできる、The KDiff3 Handbookなる詳細なマニュアルがあって、これを参考にした。

何はともあれ、これで上図に示すように、コメント行が異なるだけのファイル比較は、同一物として表示されるようになった。

ただし注意事項として、以下のようなエラーメッセージが表示されることがある。

これまで確認できたものは他の例も含めて一つずつ調べたが、名前だけの空ファイルを比較しようとした際に、このエラーが出るようなので、あまり気にせずとも良いだろう。

なお、このプリプロセッサ機能は必要な時だけ使うようにすることを推奨する。ファイル数が多くなると、処理時間が膨大になってしまうからである。OpenFOAMのチュートリアルケースの場合、全ケースを比較するのに数時間かかってしまう!

次期DEXCSに向けて

本記事で紹介した設定変更は、KDiff3を起動し直した時にはそのまま再現されるので、DEXCSにはこの設定をデフォルトして同梱(多分、$HOME/.config/kdiff4rc)することになるだろう。

DEXCS2014で調べ直してみた

手元にDEXCS2014という10年以上前の仮想マシンが使える状態にあったので、これに搭載した kdiff3 v0.9.97はどうであったか?を調べ直してみた。

その結果は上に示す通り、設定メニューの項目はここで紹介したバージョン(1.10.6)のものとほとんど変わりはなく、もっと昔から、やろうと思えばやれた事なんだ…と本記事は、後の祭りであった。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

上部へスクロール