giff:241⭐のターミナルGit diffビューアー、インタラクティブrebaseを快適に
giff は「ターミナルでdiffを見るのが不十分」という問題に特化した小さなツールです。Rust で書かれ、軽量でありながら、日常のコードレビューやインタラクティブrebaseの場面で十分な機能を備えています。
ターミナルで複雑なマージコンフリクトを処理したり、コミット履歴を整理したりする際、ネイティブの git diff 出力は情報密度が高すぎて、重要な変更を素早く見つけるのが難しいことがあります。giff はより明確な視覚的表現とインタラクティブな設計により、このプロセスをよりコントロールしやすくします。
プロジェクト概要
| 属性 | 内容 |
|---|---|
| GitHub | bahdotsh/giff |
| Stars | 241 |
| 言語 | Rust |
| 特徴 | ターミナルUI、インタラクティブrebaseサポート、軽量高速 |
| 最終更新 | 今日 |
解決する問題
日常の開発で、こうした状況に遭遇することは少なくありません:
- PRレビュー前に変更を素早く確認 ——
git diff main...featureの出力がターミナルのスクロールに埋もれてしまう - インタラクティブrebaseで間違ったコミットを選択 ——
git rebase -iのテキストエディタ体験は初心者には不親切 - 2つのブランチの差分を比較 —— 複数ファイル間を移動して確認する必要があり、ターミナルの移動コマンドが思考を中断させる
giff のアプローチはシンプルです:diff情報をより明確なターミナルUIで表示し、キーボード操作の効率性を保ちます。
主な機能
1. ターミナルグラフィカルDiff表示
純粋なテキスト出力とは異なり、giff はターミナルUIフレームワーク(ratatui)を使用してdiffを表示します:
- サイドバーに変更ファイル一覧を表示
- メインエリアに選択したファイルの詳細diffを表示
- シンタックスハイライトで追加/削除/修正を区別
- 行番号の対照をサポート
このレイアウトは VS Code のdiffビューに似ていますが、完全にターミナル内で動作し、エディタを起動する必要がありません。
2. インタラクティブRebaseサポート
これは giff の差別化機能です。giff --rebase を実行すると:
- 整理対象のコミットリストを可視化して表示
- キーボードショートカットでコミット順序を調整(上下移動)
- pick/squash/drop/reword 操作を素早くマーク
- 操作後の結果をリアルタイムでプレビュー
featureブランチを頻繁に整理する必要がある開発者にとって、これは git rebase -i のテキスト編集コマンドを覚えるよりも直感的です。
3. 軽量と高速
Rustプロジェクトとして、giff の起動速度とメモリ使用量は適切に制御されています:
- バイナリファイル約2MB
- 冷起動時間 < 100ms
- 大規模diff(100+ファイル)でも目立った遅延なし
ElectronベースのGit GUIツールと比較すると、giff はリモートサーバーやコンテナ環境でより使いやすいです。
4. ゼロコンフィグで開始
インストール後、そのまま使用でき、設定ファイルは不要です:
# 現在のワークスペースとステージングエリアの差分を確認
giff
# 特定コミットの変更を確認
giff <commit-hash>
# 2つのブランチを比較
giff main..feature
# インタラクティブrebaseを開始
giff --rebase
クイックスタート
インストール
macOS / Linux (Homebrew):
brew install bahdotsh/tap/giff
Cargo (Rustパッケージマネージャー):
cargo install giff
プリコンパイルバイナリ: GitHub Releases から対応プラットフォームのバイナリをダウンロードし、PATHに配置してください。
基本の使い方
# ステージングエリアのdiffを確認
giff
# 特定ファイルのdiffを確認
giff -- src/main.rs
# 2つのコミット間の差分を確認
giff abc123..def456
# インタラクティブrebase(現在のブランチ)
giff --rebase
# インタラクティブrebase(範囲指定)
giff --rebase main..HEAD
キーボードショートカット
| キー | 機能 |
|---|---|
j / ↓ | 下移動 |
k / ↑ | 上移動 |
Enter | ファイルの詳細diffを表示 |
r | rebaseモードで reword をマーク |
s | rebaseモードで squash をマーク |
d | rebaseモードで drop をマーク |
q | 終了 |
類似ツールとの比較
| ツール | Stars | 特徴 | 適用シナリオ |
|---|---|---|---|
| delta | 27k+ | シンタックスハイライト、side-by-side比較 | git pagerの代替として |
| gitui | 18k+ | 完全なGit TUI、staging/blameをサポート | 日常的なGit操作 |
| lazygit | 58k+ | 最も機能が充実したターミナルGitクライアント | 複雑なワークフロー |
| giff | 241 | diff/rebaseに特化、ミニマルデザイン | 素早いレビュー、コミット整理 |
giff のポジショニングは「一つのことを行い、それをうまく行う」ことです —— 完全なGitクライアント機能は提供せず、diff表示とrebaseインタラクションという2つのシナリオで深く最適化しています。
適用シナリオ
giff に適している場合:
- ターミナルワークフローに慣れているが、diff表示体験を改善したい開発者
- インタラクティブrebaseを頻繁に行ってコミットを整理する必要がある人
- リモートサーバー/コンテナ環境で作業し、グラフィカルGitクライアントを起動できない場面
- 起動速度とリソース使用量を重視する軽量ユーザー
あまり適していない場合:
- 完全なGitクライアント機能(staging、ブランチ管理、remote操作など)が必要なユーザー → lazygit/gituiを使用
- グラフィカルIDE統合を好むユーザー → VS Code / JetBrainsのGitツールの方が成熟している
- side-by-sideコード比較が必要なユーザー → deltaの表示効果が優れている
まとめ
giff はワークフローを変えようとするのではなく、特定のシナリオで体験を改善します。git diff の出力が読みにくいと感じたり、git rebase -i のテキスト編集方式が煩わしいと感じたりする場合は、2分かけてgiffをインストールして試してみてください。
241のstarはまだ若いプロジェクトであることを意味しますが、コア機能はすでに使用可能で、今日も積極的に更新されています。このような小さく焦点を絞ったツールは、注目に値します。
| 属性 | 内容 |
|---|---|
| リポジトリ | https://github.com/bahdotsh/giff |
| ライセンス | MIT |
| 言語 | Rust |
| メンテナー | @bahdotsh |