ターミナルで git diff を確認するのは日常的な作業だが、デフォルトの git diff 出力は重要な変更を素早く見つけにくい場合がある。differ はターミナル専用に設計された Git diff ビューアで、2ペインレイアウトとシンタックスハイライトによりコードレビューをより直感的にする。

プロジェクト概要

属性内容
GitHubJanSmrcka/differ
Stars20
言語Go
特徴2ペインレイアウト、シンタックスハイライト、vim キーバインド、AI による commit 生成
最終更新6 日前

解決する問題

日常的な開発において、コード変更のレビューでは以下のような問題がよく発生する:

  1. プレーンテキストの diff は読みにくい — シンタックスハイライトがないと、変更内容を素早く特定するのが難しい
  2. コンテキストの欠如 — デフォルトの diff は変更行のみを表示し、周囲のコードコンテキストを確認するには複数回の移動が必要
  3. commit メッセージ作成の手間 — 大量の変更に直面したとき、明確な commit message を書くのは負担になる

differ はターミナル UI で git diff 体験を再設計している。

主な機能

2ペインレイアウト

左側に変更前のコード、右側に変更後のコードを表示し、変更箇所を揃えて表示する。この並べて比較する方式は、従来の行内 diff よりも構造的な変更を理解しやすい。

シンタックスハイライト

Go、TypeScript、Python、Rust などの主要プログラミング言語に対するシンタックスハイライトを内蔵。キーワード、文字列、コメントが異なる色で区別され、diff 内の実際のコードロジックが一目瞭然になる。

Vim キーバインド

vim に慣れたユーザーにとっては、直感的なナビゲーション体験を提供する:

  • j/k で上下スクロール
  • h/l でファイル切り替え
  • q で終了
  • g でファイル先頭へジャンプ

AI による commit 生成

これは比較的特徴的な機能。differ は OpenAI API を統合し、現在の変更内容に基づいて自動的に commit message を生成できる。散らかった変更の山をどう要約すればいいかわからないとき、この機能はかなりの時間を節約できる。

使用法:

# OpenAI API key を設定
export OPENAI_API_KEY=your_key

# differ を実行後、'c' キーで commit 候補を生成
differ

クイックスタート

インストール(Go 1.21+ が必要):

go install github.com/JanSmrcka/differ@latest

使用:

# 現在のワークスペースの変更を確認
differ

# 特定ファイルの diff を確認
differ path/to/file.go

# staged な変更を確認
differ --staged

類似ツール比較

ツールStars特徴
delta26.5k最も機能豊富な diff ハイライトツール。side-by-side と行内の両モードをサポート
difftastic21.8k構文ベースの diff。純粋なテキスト比較ではなくコード構造を理解
gitui21.6k完全な Git TUI。diff 表示はその機能の一部
differ20diff 表示に特化。軽量で高速、AI commit 生成機能付き

differ の位置づけは明確だ。完全な Git クライアントになることを目指さず、diff 表示という一つのことだけを行い、AI commit を差別化機能として加えている。

適用シーン

  • 変更の迅速なレビュー — コミット前に何を変更したかを素早く確認
  • レビュー前の自己チェック — PR 作成前に自分で diff を確認
  • AI 支援によるコミット — commit message を書く時間をかけたくないとき

注意事項

  • AI commit 機能には OpenAI API key が必要で、API 呼び出し料金が発生する
  • プロジェクトはまだ初期段階(20 stars)で、機能は比較的シンプルだが、コア体験はすでに実用的
  • 現在は macOS と Linux のみサポート。Windows サポートは計画中

まとめ

differ は小さく洗練されたツールだ。deltagitui のような成熟したソリューションを置き換えようとするのではなく、軽量で特化した選択肢を提供している。ターミナルで git diff を頻繁に確認し、並べて比較や AI commit 支援機能を求めている場合は、試す価値がある。


属性内容
リポジトリhttps://github.com/JanSmrcka/differ
ライセンスMIT
言語Go
作者@JanSmrcka