前置き
Windows比較ツールのWinMergeを使用すれば、テキストの比較がとても簡単にできて便利ですよね。
ただ、インデントされてない平テキスト(1行)になってるJsonファイルを比較するとどうでしょう。
差分が全く分からないですね。
比較前にjsonの成形ツールなどでインデントしなおしてから比較すれば一応は解決するとは思いますが、まあ、面倒ですよね汗
これら悩みは「jq」というプラグインをWinMergeに取り込めば解決できます!
以下では導入手順と、実際に比較するまでの方法を簡単 + 丁寧に展開していきます。
jqプラグインの導入
以下サイトからjqプラグインをダウンロードできます。
ダウンロードボタン => Windows(64-bit)を選択します。
「jq-win64.exe」という実行ファイルがダウンロードできますので、保存先のフォルダはWinMergeのMergePluginsフォルダに保存します。
WinMergeのフォルダはインストール時に指定した箇所になりますが、自分の場合は以下となってます。
C:\Applications\WinMerge\MergePlugins
保存後のMergePluginsフォルダは以下のような状態です。
スクリプトを配置
新規で「CompareJsonFiles.sct」というファイルを作成します。
<scriptlet>
<implements type="Automation" id="dispatcher">
<property name="PluginEvent">
<get/>
</property>
<property name="PluginDescription">
<get/>
</property>
<property name="PluginFileFilters">
<get/>
</property>
<property name="PluginIsAutomatic">
<get/>
</property>
<method name="UnpackFile"/>
<method name="PackFile"/>
</implements>
<script language="VBS">
Option Explicit
Function get_PluginEvent()
get_PluginEvent = "FILE_PACK_UNPACK"
End Function
Function get_PluginDescription()
get_PluginDescription = "Json形式のファイルを整形し比較をする"
End Function
Function get_PluginFileFilters()
get_PluginFileFilters = "\.json$;\.dat$"
End Function
Function get_PluginIsAutomatic()
get_PluginIsAutomatic = True
End Function
Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
Dim shell
Dim command
Dim jqPath
jqPath = "C:\Applications\WinMerge\MergePlugins\jq-win64.exe"
Set shell = CreateObject("WScript.Shell")
command = "cmd /c type """ & fileSrc & """ | """ & jqPath & """ > """ & fileDst & """"
shell.Run command, 0, true
pbChanged = True
pSubcode = 0
UnpackFile = True
End Function
Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
PackFile = False
End Function
</script>
</scriptlet>
基本、コピペで問題ありませんが、jqPath箇所をjqプラグの実行ファイルをダウンロードしたPATHに差し替えてください。
jqPath = "C:\Applications\WinMerge\MergePlugins\jq-win64.exe"
また、文字コードはSJISにします。
このファイルも「jq-win64.exe」実行ファイルと同じWinMergeのMergePluginsフォルダに保存します。
保存後のMergePluginsフォルダは以下のような状態です。
WinMergeの設定
まずWinMergeを開き、比較したいファイルをそれぞれ指定します。
次に、上部メニューの「プラグイン」=>「展開プラグインで開く」をクリックします。
以下のメニューが立ち上がりますので、「ファイル展開プラグイン」を「CompareJsonFiles.sct」に指定してOKを選択します。
すると、インデントされて差分が一目瞭然の状態となります!
以上となります。