本文へスキップ
株式会社オブライト
Software Development2026-11-02約11分で読めます

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/omnidiff

Debian / 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+テキスト/JSONRust・AGPL-3.0-only大きなリファクタリングや、画像・アーカイブ等も含む差分の確認
hunkgit の差分をもとに表示する対話型ビューア(複数ファイルのサイドバー、AI の注釈)Node.js 18+・MITAI エージェントの変更のレビュー
difftastictree-sitter による構造差分端末への並列表示(対話型ビューアではない)Rust・MIT構文を意識した差分を端末で素早く見たいとき
deltagit の行単位の差分ページャー(単語単位のハイライト、並列表示)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 を見てほしい。

参考リンク

この記事に関連する無料ツール(登録不要・その場で結果)

お気軽にご相談ください

お問い合わせ