Skip to content

v1.12.3 — 値ではなく、形を比べる

Choose a tag to compare

@MR-TABATA MR-TABATA released this 19 Aug 12:05
· 39 commits to main since this release
4680d0e

テスト環境から取ったデータと、本番から取ったデータを並べる。値が違うのは当たり前で、見たいのは「日付の形が揃っているか」だけ。それなのに diff は全行を「違う」と言い、読める差分は 1 つも残りませんでした。

値ではなく、形を比べる

表示 ▸ 比較(diff)▸ フォーマットを比較(⇧⌘F)

数字は 1 桁ずつ、文字の並びは 1 個に潰してから比べます。だから:

  • 2026-08-19 12:00:00 ERROR uid=412001-12-31 03:59:07 WARN uid=88同じ
  • 2026-08-192026/08/19違う(型の名前に置き換えないので、区切りの違いが残ります)
  • 0077違う(ゼロ埋めの食い違いは、環境差の定番なので消しません)
  • 123123違う(全角と半角)

仮名・漢字も値として畳みます。 日本語の CSV でこれを畳まないと、氏名や住所が全部差分になって「値は無視する」が嘘になります。ただし全角の記号と全角スペースは形として残します——,、全角空白と半角空白の食い違いは、まさに見つけたい違いだからです。

入口 4 つ(2 つのファイル・開いているドキュメント・クリップボード・URL)のどれから開いても効きます。5 つ目の入口ではなく、開いた後に切り替えるモードです。値の違いで読めない、と分かるのは開いてからなので。

この間、マージは封じます。 形が同じ=中身は違うので、片方を採ると中身が消えます。

メニューのチェックマークが、初めて出ます

validateMenuItem が AppKit から一度も呼ばれていませんでしたNSMenuItemValidation に適合していなかったため)。構造化表示がいまどのモードか、桁ルーラーが出ているか、末尾追従が入っているか——メニューを見ても分からない状態で出荷され続けていました。押せば動いていたので気づけませんでした。直したので、いまの状態がメニューに出ます。できない操作は灰色になります。

確認したこと

国税庁の法人番号 CSV から作った 20 万行で測りました(release ビルド)。

比べ方 結果
同じ行の値だけ差し替え 完全一致(ハッシュ 0.14 秒)
別のレコード同士 5,040 箇所が差分

下の行は正直に書いておきます。レコード自体が別物だと、空欄の有無や住所の桁ちがいで 1 行ごとに「形」が違うので、日付の差はその中に埋もれます。行が対応している比較(同じ抽出をやり直した、同じ行の値が置き換わった)では狙いどおりに効きますが、行が対応しない比較には「列ごとに形をまとめて突き合わせる」別の道具が要ります。それは次に作ります。

611 テスト green。配布と同じ .app で、4 つの入口・トグル・マージ封じまで通しました。


ダウンロード: MrEditor-1.12.3.dmg(署名・公証済み / macOS 13+)