OmniDiff とは — 構文を理解する Rust 製 Git difftool。使い方・インストール・hunk/di
fftastic/delta との違い【2026年版】
OmniDiff は tree-sitter で構文を読み、変わった部分だけを示す Rust 製の Git difftool(AGPL-3.0-only)。インストール、git difftool の設定、hunk・difftastic・delta との違い、作者公表の性能値と注意点を整理。2026年11月更新。
OmniDiff は、コードを構文木で読み取り、変わった部分だけを示す Rust 製の Git difftool である。行ごとに「削除・追加」と表示する従来の diff と違い、式や文字列の中の変更点まで絞り込める。結論として、大きなリファクタリングや生成コードの差分を読みたい開発者には試す価値があるが、0.x の初期版で、ライセンスは AGPL-3.0-only、外部コントリビューションは受け付けていない。業務の標準ツールにするより、手元で併用して様子を見る段階である。
最新版の v0.3.0 は2026年11月1日に公開され、同日に Hacker News の Show HN に投稿されて143ポイントを集めた。GitHub のスターは2026年11月2日時点で383である。作者が公表する性能・精度の数値には、まだ目標に届いていない項目もある(後述)。
OmniDiff とは
OmniDiff は tree-sitter で構文木を作り、変更箇所だけをハイライトする差分ツールである。対話型の TUI ビューア、プレーンテキストのバッチ出力、JSON 出力の3つの使い方がある。作者は Marko Ivankovic で、開発には Claude Code などの AI 支援を使っていることがコミットの記録で明示されている。2026年10月1日の v0.2.0 で CodeDiff から OmniDiff に改名された。
| 項目 | 内容(README・Releases 確認分) |
|---|---|
| 提供者 | Marko Ivankovic(個人開発) |
| ライセンス | AGPL-3.0-only(商用ライセンスは GitHub Sponsors の月額で提供) |
| 実装言語 | Rust |
| 最新版 | v0.3.0(2026年11月1日) |
| 対応言語数 | 25言語を tree-sitter で解析(ほか6種はテキスト扱い) |
| 配布形態 | Homebrew・cargo・Nix・apt・Releases のバイナリ(Linux / macOS / Windows) |
| 外部コントリビューション | 現時点では受け付けていない(開発速度を保つため) |
何ができるか
| 機能 | 内容 |
|---|---|
| 構文単位の diff | 行全体ではなく、変更された部分だけを示す。コピーされたコード、移動したコメント、並んだ文の変更なども検出しやすくなった(v0.2.0) |
| 文字列内のコード | JSON 内の TSX、YAML 内のシェルなど、文字列の中のコードもコードとして比較する(v0.3.0)。CSS のクラス指定はクラス単位で比較する |
| 画像・アーカイブ・フォント・PDF | 画像はピクセル単位(GIF・PNG・WebP のアニメーションはフレーム単位)、zip・tar・gzip・xz・bzip2、フォント、メッセージカタログ、PDF は中身で比較する。それ以外のバイナリは「Binary file differs」と1行で表示 |
| TUI | 対話型ビューアで差分を閲覧する。? でキー一覧、o でファイル選択 |
| ヘッドレス / JSON | --headless でテキスト、--mode json で JSON を出力する(JSON Schema はリポジトリにある)。出力先が端末でない場合は自動でテキストになる |
| Git・jj・エディタ連携 | Git の difftool、Jujutsu(jj)、VS Code 拡張、Neovim プラグインに対応 |

上の図は差分ツールの位置づけを整理したものである。横軸は差分の取り方で、左が行単位、右が内容(構文)を理解する方式。縦軸は表示の仕方で、上が対話型の TUI、下が出力を流す型(ページャーや CLI) である。delta は行単位の差分を見やすく整形するページャー、difftastic は構文を理解して結果を端末に出力するツール、hunk は git の差分を対話的にレビューするビューア、OmniDiff は構文を理解したうえで対話型 TUI まで持つ位置にある。
インストール・料金
主な入れ方は次のとおりである。Releases には Linux、macOS(Intel と Apple Silicon)、Windows のビルド済みバイナリもある。cargo でのインストールは tree-sitter の文法を C から全てコンパイルするため、数分かかる。
# Homebrew(macOS / Linux)
brew install ivankovic/omnidiff/omnidiff
# Cargo(ソースからビルド。Cコンパイラと Rust 1.92 以上が必要)
cargo install --locked omnidiff
# Nix(インストールせず実行)
nix run github:ivankovic/omnidiffDebian / Ubuntu(amd64・arm64)には署名付きの apt リポジトリが用意されている。Arch と Gentoo 向けのレシピはリポジトリの packaging/ にある。
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://ivankovic.github.io/omnidiff/apt/omnidiff-archive-keyring.gpg | sudo tee /etc/apt/keyrings/omnidiff-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/omnidiff-archive-keyring.gpg] https://ivankovic.github.io/omnidiff/apt stable main" | sudo tee /etc/apt/sources.list.d/omnidiff.list > /dev/null
sudo apt update && sudo apt install omnidiff料金は無料(AGPL-3.0-only)である。企業の組織内利用向けに、GitHub Sponsors の月額購読で商用ライセンスも選べる。金額は確認できていないため記載しない。自分のマシンでローカルツールとして使う分には、一般に問題になりにくい。ただし改変して配布する場合や、ネットワーク越しにサービスとして提供する場合は AGPL の義務が生じる。自社製品への組み込みを考えるときは、LICENSE を確認し、必要なら専門家に相談してほしい。
使い方(最短手順)
1. インストールする(上記のいずれか)
2. omnidiff git configure で Git に登録する(グローバルか現在のリポジトリかを選ぶ)
3. git difftool --tool=omnidiff で対話型 TUI を開く
4. 2つのファイルだけ見たいときは omnidiff before.rs after.rs を使う
# 対話ウィザードで git に登録(グローバル or 現在のリポジトリを選ぶ)
omnidiff git configure
# 手動で設定する場合
git config difftool.omnidiff.cmd 'omnidiff "$LOCAL" "$REMOTE"'
# TUI で差分を見る
git difftool --tool=omnidiff
# difftool 設定なしで git diff に差し込む(出力はテキスト)
GIT_EXTERNAL_DIFF=omnidiff git diff
# 2つのファイルを直接比べる
omnidiff before.rs after.rs注意したいのは、TUI が開くのは git difftool のときだけという点である。git diff や git log -p はプレーンテキストを出力するだけで、TUI は開かない。TUI の中では ? でキー一覧、o でファイル選択(引数なしで起動した空のビューア)、b で画像のハーフブロック/グラフィック表示の切り替え、g で変更された文字や画像を一度に表示、Enter でアーカイブ内のテキストを完全な差分表示で開ける。CI では --headless、--mode json、--exit-code(差分があれば終了コードに1を加える)が使える。終了コードは成功が0、エラーが2である。色は --color never や NO_COLOR=1 で止められ、トゥルーカラー表示には COLORTERM=truecolor が必要になる。
Jujutsu(jj)では omnidiff jj configure で設定できる。手動設定では merge-tools.omnidiff を書き、diff-invocation-mode を file-by-file にする必要がある。jj diff はテキスト表示になり、TUI を使うには omnidiff BEFORE AFTER を直接実行する。エディタ側は VS Code 拡張(omnidiff-vscode、Open VSX にもある)と Neovim の omnidiff.nvim があるが、VS Code 組み込みの差分ビューは現時点では置き換えられないと README にある。
hunk・difftastic・delta との違い
| ツール | 差分の取り方 | 表示 | 実装・ライセンス | 向いている用途 |
|---|---|---|---|---|
| OmniDiff | 構文木(tree-sitter)で変更箇所を特定 | 対話型 TUI+テキスト/JSON | Rust・AGPL-3.0-only | 大きなリファクタリングや、画像・アーカイブ等も含む差分の確認 |
| hunk | git の差分をもとに表示する | 対話型ビューア(複数ファイルのサイドバー、AI の注釈) | Node.js 18+・MIT | AI エージェントの変更のレビュー |
| difftastic | tree-sitter による構造差分 | 端末への並列表示(対話型ビューアではない) | Rust・MIT | 構文を意識した差分を端末で素早く見たいとき |
| delta | git の行単位の差分 | ページャー(単語単位のハイライト、並列表示) | Rust・MIT | 毎日の git diff・git log -p を読みやすくする |
| git diff(標準) | 行単位 | プレーンテキスト | git 標準 | 追加設定なしの確認。バイナリは「Binary files differ」のみ |
選び方の目安は次のとおりである。毎日の git diff は delta のようなページャーで読みやすくしておき、大きなリファクタリングのときだけ git difftool 経由で OmniDiff を開く、という併用が現実的だろう。AI エージェントが出した変更を注釈つきでレビューしたいなら、hunk が合う。difftastic は構文を理解した結果を端末に流したいときに向く。いずれも得意分野が異なるため、1つに絞る必要はない。
性能と精度(作者公表値)
以下は作者が README で公表している数値で、作者のノートPCでの測定である。第三者による検証ではない点に注意してほしい。
| 項目 | 作者公表値 |
|---|---|
| 速度の目標 | 中央値 100ms 未満、p99 1000ms 未満 |
| 速度の実測(2,302 フィクスチャ) | p50 4.2ms、p90 35.1ms、p99 177ms、最遅 482ms。アーカイブは p99 の目標に届いていない |
| 頑健性 | コードファイルの組 442,530 件のうち 442,322 件(99.95%)が、120秒の予算と6GBのメモリ上限内で完了 |
| 内容に特化したアルゴリズム | 変更の 98.8% で使用 |
| 精度(バイト単位) | --full で不一致バイトがゼロのケースは 60.0%、--minimal では 69.6%。README は精度の目標が未達であると明記している |
注意点・向いていない用途
- 0.x の初期版で、v0.2.0 で CodeDiff から改名された。旧名で入れていた場合は再インストールと再設定が必要になる
- ライセンスは AGPL-3.0-only で、改変して配布・ネットワーク提供する場合は義務が生じる
- 外部コントリビューションは受け付けておらず、実質的に1人のプロジェクトである。継続性は不確実
- git diff や git log -p では TUI が開かない。TUI は git difftool か直接実行のときだけ
- VS Code では組み込みの差分ビューをまだ置き換えられない
- cargo install には C コンパイラと Rust 1.92 以上が必要で、ビルドに数分かかる
- 精度の目標は未達で、アーカイブは速度の p99 目標にも届いていない
- Markdown・SQL・Protocol Buffers などはプレーンテキストとして比較される
AI エージェントの変更をレビューする運用を考えているなら、Whiteboard や、エージェントごとに作業ツリーを分ける worktrunk の記事も参考になる。エージェント自体は Claude Code 完全ガイド で整理している。なお OmniDiff 自体も Claude Code の支援を受けて開発されていると、作者が開示している。
よくある質問
OmniDiff は無料ですか。商用利用はできますか。
無料で使える。ライセンスは AGPL-3.0-only である。自分のマシンでローカルツールとして使うだけなら一般に問題になりにくいが、改変して配布したり、ネットワーク越しに提供したりすると AGPL の義務が生じる。自社製品に組み込む場合は LICENSE を確認し、必要なら専門家に相談してほしい。企業の組織内利用向けに、GitHub Sponsors の月額購読による商用ライセンスもある。
git diff のままで使えますか。
GIT_EXTERNAL_DIFF=omnidiff git diff で差し込めるが、出力はプレーンテキストで TUI は開かない。対話型の TUI を使うには omnidiff git configure などで設定したうえで git difftool --tool=omnidiff を実行する。
difftastic との違いは何ですか。
どちらも tree-sitter を使う構造差分ツールで Rust 製である。difftastic は結果を端末に並べて出力する方式で、対話型ビューアではない。OmniDiff は対話型 TUI に加え、文字列内のコード、画像、アーカイブ、PDF なども比較でき、JSON 出力もある。ライセンスは difftastic が MIT、OmniDiff が AGPL-3.0-only である。
対応言語は何ですか。
構文解析の対象は C、C++、C#、Go、Java、JavaScript、TypeScript、Python、Rust、Ruby、PHP、Kotlin、Swift、Shell、YAML、JSON など25言語である。Markdown、SQL、Protocol Buffers、Bazel、Dart、Emacs Lisp は認識されるがプレーンテキストとして比較される。UTF-16 / UTF-32 のテキストは v0.2.1 で対応した。
Windows で使えますか。
Releases に Windows 向けのビルド済みバイナリがある。Git や各エディタとの連携を Windows でどこまで検証しているかは、本稿では確認していない。使う前に README と Issues を見てほしい。
参考リンク
この記事に関連する無料ツール(登録不要・その場で結果)
お気軽にご相談ください
お問い合わせ