月曜日, 7月 7, 2025
月曜日, 7月 7, 2025
- Advertisment -
ホームニューステックニュース構造を理解した AI ファーストな差分ツール「diffx」を、Claude Code と Rust で作ってリリースしました

構造を理解した AI ファーストな差分ツール「diffx」を、Claude Code と Rust で作ってリリースしました


―― ケツカンマで消耗するのは、もうやめよう ――

プログラミング中に JSONYAML などの設定ファイルを git diff で確認するとき、もどかしさを感じたことはありませんか!?
キーの順番が変わっただけなのに、大量の差分と判定されたり。
たかがインデントの変更! ケツカンマ!

従来の diff ツールはテキストを行単位で比較するため、データの「構造」までは理解してくれません。
小さなストレス。されど、毎日積もる。

「もっと賢く、構造を理解した diff ツールが欲しい!」
……と思ったときには、すでに行動は終わっていたんだ! 怒り駆動開発!

https://github.com/kako-jun/diffx

diffx とは:構造化データのための差分ツール

diffx は、JSON, YAML, TOML, XML, INI, CSV といった構造化データに特化した差分ツールであり、Rust 製 CLI です。

1 番の特徴は、データの構造的な意味を理解して差分を表示する点です。
例えば、よくある設定ファイルの変更を見てみましょう。

変更前の config_v1.json

{
  "version": "1.0.0",
  "server": {
    "port": 8080
  },
  "features": ["auth", "logging"]
}

変更後の config_v2.json

{
  "version": "1.0.1",
  "server": {
    "port": 8081,
    "host": "localhost"
  },
  "features": ["auth", "logging", "cache"]
}

これを git diff で見ると、差分が出まくりで、変更箇所が分かりにくい! 目が滑る!

一方、diffx を使うと、差分が次のように出力されます。

$ diffx config_v1.json config_v2.json
~ version: "1.0.0" -> "1.0.1"
~ server.port: 8080 -> 8081
+ server.host: "localhost"
+ features[2]: "cache"

~は値の変更、+は追加を表します。
ユニバーサルデザインな色もつくので、色覚特性を持つ方にも直感的!

このように、「どのキーがどう変わったのか?」、「どの配列に何が追加されたのか?」などが、パス形式で直感的に理解できます。
diffx 形式と名づけた! いま!

Tool Type Formats Semantic Aware Array Tracking Config Support Best For
diffx Semantic JSON/YAML/TOML/XML/INI/CSV Structured data comparison
diff Text-based Any text General text files
jq JSON processor JSON Partial JSON manipulation
yq YAML processor YAML/JSON Partial YAML manipulation
daff Tabular CSV CSV/spreadsheet data
jsondiff JSON diff JSON Partial JSON-only comparison
deep-diff JavaScript JSON/Objects JavaScript applications

未来に通用する?設計思想

単なる差分ツールで終わらないよう、無限の可能性を込めました。

1. AI ファーストな設計

diffx の出力形式は、人間が読みやすいだけでなく、AI が解釈しやすいように設計しました。

AI エージェントが diffx を使えば、「この設定変更の要点をまとめて」といった指示をこなせるようになります。
AI エージェントが「diffx を入れてもらえませんか?」って、人間にお願いしてくる未来が目標です。

さらに面白いのが、diffx の出力を JSONYAML 形式にし、それを再び diffx で比較する「セルフチェイン」というメタ概念です。
これにより、「差分の差分」を取ることができ、設定変更の履歴を追跡したり、構成ファイル群の試作を複数管理したり、応用の可能性が大きく広がるはずです。
いろんなアイデアを思いついてほしいです。

私は lawkit という Rust 製 CLI も作っているのですが、
その出力も YAML とかなので、diffx の出番がさっそく来てくれて、シェルスクリプト内で強力なチェインを構成できています。

https://github.com/kako-jun/lawkit

lawkit は、ベンフォードの法則などの自然法則を活用して、会計資料や実験エビデンスなどの改ざんを検出するツールです。

ほか、まだ未リリースですけど
AI 関連の静的ファイル同士を比較(テンソル形状比較とか、重み統計比較とか……)する diffai という Rust 製 CLI も鋭意開発中です。

https://github.com/kako-jun/diffai

その出力も YAML 形式とかなので、さらにチェインのネタが増える予定です。
遊戯王の墓守デッキみたいに、チェインが終わらない!

2. シンプルで統一された差分形式

どんなフォーマット同士を比較しても、出力は統一された diffx 形式です。
シンプルなので、学習コストは低いはずです。

3. プログラミングに役立つ便利なオプション

日々のプログラミングで便利な機能を、思いつく限り実装したので、マニアックな用途にも耐えると思います。

  • --ignore-keys-regex: タイムスタンプなど、無視したいキーを正規表現で除外できます。
  • diffx ./dir1 ./dir2: 2 つのディレクトリを再帰的に比較できます。
  • --array-id-key: 配列内のオブジェクトを id などで識別し、変更を正確に追跡します。
  • 巨大ファイルを比較できる、高速モードも用意しました。

企業でのプロのニーズにも、たまたま通用するかもしれません。
通用しなかったら、GitHub で要望を書いてください。

より多くの環境で使えるように

できるだけ多くの人に使ってもらいたいので Rust 製(クロスプラットフォーム)です。
cargo で簡単にインストールできます。

各 OS 用の実行バイナリも、GitHub Releases からダウンロードできます。

https://github.com/kako-jun/diffx/releases

さらに、PythonNode.js のプロジェクトでも使えるように、pipnpm のラッパーパッケージも作りました。

https://pypi.org/project/diffx-python/

https://www.npmjs.com/package/diffx-js

これらの言語から、シームレスに diffx の力(超速い)を召喚できます。

ドキュメントの量でなぐる作戦!

個人開発のツールだけど、最初からドキュメントを充実させました。
インストール方法、全オプションの網羅的な解説、様々なユースケースを想定した豊富な使用例など、思いつく限りを載せたので、小学生でも安心して使えるはず!

開発と翻訳には Claude CodePro プランを使いました。
日本語すら不完全な私でも作れた!
20 ドル/月だと思いこんで、何度も生成し直した結果、20+220 ドルになって怒られたので、読んでもらえるほど救われます!

最後に

diffx は、とてもシンプルなツールです。もし、差分確認で同じような悩みを持っていた方がいれば、ぜひ試してください。

私自身は、このツールの便利さと、秘めたポテンシャルに、徐々に気づいてきました。
熟練の開発者の皆様方にとっては、どう感じるのかはわかりませんが、「まさに欲しかったやつ!」ってなるほど隠れニーズがあったら嬉しいです。

開発中はずっと、おなかに猫が乗ってました。
GitHub でスターを付けていただけると、猫が驚いて逃げるでしょう。(私がガッツポーズをとるという意味です)

https://github.com/kako-jun/diffx

バグ報告や機能追加の要望など、フィードバックも歓迎します。
最後まで読んでいただき、ありがとうございました。



Source link

Views: 3

RELATED ARTICLES

返事を書く

あなたのコメントを入力してください。
ここにあなたの名前を入力してください

- Advertisment -