Omnidiff、ターミナルで構造的およびバイナリ差分比較を実現
Rustベースの新ツール「Omnidiff」は、画像、フォント、アーカイブなどのバイナリファイルに対するピクセルレベルの差分表示と、高速な構造化コード比較をターミナル上で直接提供します。
英語の原文から自動翻訳されました。
Marko Ivankovic氏は、従来のテキスト比較を超えた高性能な差分ユーティリティ「Omnidiff」をリリースしました。2026年11月1日に公開されたこのツールは、ソースコードだけでなく、画像、フォント、アーカイブなどのバイナリアセットについても、堅牢かつ正確な差分を提供することを目指しています。
何が起きたか
今回のリリースでは、コマンドラインインターフェース(CLI)とターミナルユーザーインターフェース(TUI)が導入され、実際の開発現場で発生する20種類のコード変更や、さまざまなバイナリフォーマットに対応できるよう設計されています。ファイルを単なる行のテキストとして扱う標準的なUnix diffツールとは異なり、Omnidiffはコンテンツの種類に基づいて解析を行います。25のプログラミング言語に対する構造的な差分比較をサポートし、画像に対してはピクセル単位の分析、フォントに対してはグリフ単位の検査など、バイナリファイルの視覚的な比較も可能です。
パフォーマンスはこのプロジェクトの中核的な焦点です。Intel Core i7-1370Pプロセッサと32 GB RAMを搭載したT14sノートPCでのベンチマークテストでは、中央値の差分処理時間を100ミリ秒未満に抑えることを目標としています。99パーセンタイルの遅延は1000ミリ秒に制限されています。本ツールはLinux、macOS、Windows向けのプリビルドバイナリに加え、Homebrew、Nix、aptなどのパッケージマネージャー経由でも利用可能です。
仕組み
Omnidiffは、テキストファイルについては拡張子、バイナリデータについてはバイトシグネチャを用いてファイルタイプを検出します。ソースコードの場合、tree-sitter文法を使用してRust、Python、JavaScript、C++を含む25の言語を解析します。これにより、コードの構造を理解し、単に行のずれを報告するのではなく、関数、クラス、または構造体内の変更を特定できます。大きなファイルの深い部分に変更が発生した場合、ツールは最も近い外側の定義を接頭辞として差分ハンクに表示し、コンテキストを提供します。
バイナリファイルについては、フォーマットに応じたアプローチを取ります。PNG、JPEG、GIFなどの画像はピクセル単位、またはアニメーションの場合はフレーム単位で比較されます。zipやtarなどのアーカイブはメンバー単位で検査され、入れ子になったアーカイブもトラバース可能です。フォントはグリフ単位で分析され、変更された特定の文字のみを表示します。TUIは、kittyやsixelなどのターミナルグラフィックスプロトコルが利用可能な場合はそれらを用いてこれらのビジュアルを描画し、そうでない場合はUnicodeのハーフブロックにフォールバックします。
主要な詳細
- 構造的解析: tree-sitterを通じてC、Go、Java、TypeScriptを含む25の言語をサポートし、コンテキストを考慮した差分を提供します。
- バイナリサポート: 画像、フォント、アーカイブ、PDF、メッセージカタログについて、生のバイト列ではなく内部構造を比較することで対応します。
- パフォーマンス目標: モダンなハードウェア上で、中央値の差分時間100ms、99パーセンタイル時間1000msを目指しています。
- 統合:
git difftoolおよびjj diffのバックエンドとして動作し、GitとJujutsuバージョン管理システムの両方に対するセットアップウィザードを備えています。 - 出力モード: インタラクティブなTUI、スクリプト用のヘッドレスバッチモード、そしてプログラムによる消費向けのJSON出力を提供します。
- ライセンス: GNU Affero General Public License version 3の下でリリースされており、GitHub Sponsorsを通じて商用サブスクリプションオプションも利用可能です。
なぜ重要なのか
ソフトウェアエンジニアにとって、従来のdiffツールの限界は、非テキストアセットの意味のある比較ができないことにあります。アイコン、フォント、コンパイル済みリソースの変更を確認するには、しばしば別のグラフィカルツールを開く必要があります。Omnidiffはこのワークフローをターミナル内に統合し、開発者がデザインアセットを含むフルスタックアプリケーションにおいて、コード変更と視覚的変更を単一のインターフェースでレビューできるようにします。これにより、コンテキストスイッチングが減少し、レビュープロセスが迅速化されます。
また、このツールの構造的認識能力は、コードレビューの精度も向上させます。言語の構文を理解しているため、標準的なdiffを乱雑にする無関係な空白やフォーマット変更を無視できます。これにより、レビュアーはスタイル上のノイズではなく、論理的な変更に集中できます。さらに、Jujutsuのようなモダンなバージョン管理システムとの統合により、新興ツールを使用するユーザーも一貫したレビュー体験を維持できます。
できること
- システムのパッケージマネージャーを使用してOmnidiffをインストールします。例えばmacOSでは
brew install ivankovic/omnidiff/omnidiff、Debianでは提供されているaptリポジトリを利用します。 omnidiff git configureを実行してデフォルトのgit difftoolとして設定し、Gitリポジトリでのインタラクティブなレビューを有効にします。- CIパイプライン内で
omnidiff --headless BEFORE AFTERを使用してヘッドレスモードを実行し、自動チェック用にプレーンテキストのdiffを生成します。 - 画像やフォントファイルをTUIに渡すことで、ターミナルから離れることなく、ピクセルレベルまたはグリフレベルの違いを確認してバイナリ変更を探索します。
- ターミナルが24ビットカラーをサポートしているのにそれを通知しない場合は、環境変数
COLORTERM=truecolorを設定し、最適な視覚的忠実度を確保します。 - Omnidiffの出力をカスタムツールやダッシュボードに統合する予定がある場合は、
src/tui/json_output.schema.json内のJSONスキーマを確認してください。


