AI

deltaの使い方完全ガイド【インストールから応用まで】

deltaの使い方完全ガイド【インストールから応用まで】

ソフトウェア開発において、コードの変更履歴を追うことは日常茶飯事です。git diff コマンドは、その中心的な役割を担います。しかし、デフォルトの git diff の出力は、ときに読みにくく、変更点を把握しづらいと感じることはないでしょうか。特に、大量のコード変更や、複数のファイルにわたる差分を追う場合、そのストレスは増大します。

そんなとき、「もしdiffがもっと見やすかったら…」と願う開発者は少なくありません。シンタックスハイライトが適用され、変更点が明確に色分けされ、さらにサイドバイサイドで比較できたら、どれほどコードレビューやバグの特定が楽になるでしょう。

この「diffが見にくい」という課題を解決するために生まれたのが、今回ご紹介するCLIツール「delta」です。deltaを導入することで、あなたの git diff は劇的に進化し、より快適で効率的な開発体験を手に入れることができます。

deltaとは — 30秒で分かる概要・誕生した背景

deltaは、git diff の出力を美しく、そして機能的に表示するためのCLIツールです。標準の git diff コマンドとシームレスに連携し、シンタックスハイライトやワード単位の差分表示、サイドバイサイド表示など、多くの改善をもたらします。

このツールが誕生した背景には、開発者が日々の作業で直面する「diffの読みにくさ」という共通の課題がありました。デフォルトの git diff は機能的ですが、視覚的な情報が不足しがちです。特に、色分けが乏しい環境では、追加・削除された行の区別はできますが、変更されたコードの内容を瞬時に理解するのは困難です。

deltaは、この視覚的なギャップを埋めるために開発されました。人気のシンタックスハイライター「bat」のテーマを継承し、コードの種類に応じた適切な色付けを実現します。これにより、変更箇所が直感的に把握できるようになり、コードの品質向上やレビュー時間の短縮に貢献します。

インストール方法 — OS別コマンド

deltaは、主要なOSのパッケージマネージャーを通じて簡単にインストールできます。お使いの環境に合わせて以下のコマンドを実行してください。

macOS

macOSでは、Homebrewを使ってインストールするのが最も一般的です。

brew install git-delta

Linux

Linuxでは、ディストリビューションごとにパッケージマネージャーが異なります。ここでは、代表的なものをいくつか紹介します。

Debian/Ubuntu系

sudo apt install git-delta

Fedora/CentOS系

sudo dnf install git-delta

Arch Linux系

sudo pacman -S git-delta

Windows

Windowsでは、Scoopまたはwingetを使ってインストールできます。

Scoopを使用する場合

まず、Scoopがインストールされていることを確認してください。

scoop install git-delta

wingetを使用する場合

wingetもWindowsの便利なパッケージマネージャーです。

winget install git-delta

インストールが完了したら、delta -V コマンドを実行し、バージョン情報が表示されることを確認してください。

delta -V

基本的な使い方 — 最低限これだけ知れば使えるコマンド

deltaをインストールしたら、次にGitの設定を変更して、git diff がdeltaを通じて表示されるようにします。最低限、以下の設定を知っていれば、すぐにdeltaの恩恵を受けられます。

Gitの設定は、~/.gitconfig ファイルに直接書き込むか、git config --global コマンドで実行します。

1. Gitのページャーとしてdeltaを設定する

git diffgit log -p などの出力は、通常ページャー(lessなど)を通じて表示されます。このページャーをdeltaに設定することで、すべての差分表示がdeltaによって処理されるようになります。

git config --global core.pager delta

この設定により、git diffgit log -p を実行すると、deltaが自動的に起動し、シンタックスハイライトされた美しい差分が表示されます。

2. インタラクティブなdiffフィルターを設定する

git add -pgit reset -p のように、インタラクティブに差分を扱う際にdeltaを利用するための設定です。--color-only オプションは、deltaが差分を再フォーマットせず、色付けのみを行うように指示します。

git config --global interactive.diffFilter 'delta --color-only'

3. deltaのナビゲーション機能を有効にする

大規模な差分を見る際、ファイル間や変更ブロック間を素早く移動できると便利です。delta.navigatetrue に設定すると、n キーで次の差分へ、N キーで前の差分へ移動できるようになります。

git config --global delta.navigate true

4. テーマの明暗を自動検出する

deltaはターミナルの背景色を自動検出し、それに応じて適切なシンタックスハイライトテーマを適用できます。特に設定しない場合、デフォルトでこの自動検出が有効です。

もし特定のテーマ(例えばダークテーマ)を強制したい場合は、delta.darktrue に設定します。

git config --global delta.dark true

ライトテーマを強制する場合は delta.light true を設定します。

これらの設定を適用したら、実際に git diff を実行してみてください。今までとは全く異なる、視覚的に分かりやすい差分が表示されるはずです。

# 変更があるリポジトリで実行
git diff

便利な使い方・応用例 3選 — 実際の開発シーンに落とし込む

deltaは単に色を付けるだけでなく、開発者の生産性を高めるための多くの応用機能を提供します。ここでは、実際の開発シーンで役立つ3つの応用例を紹介します。

応用例1: サイドバイサイド表示でコードレビュー効率UP

複数の変更箇所を並べて比較したい場合、サイドバイサイド表示は非常に強力です。特に、コードレビュー時や、変更内容を細かく確認したい場合に威力を発揮します。

設定方法:

~/.gitconfig に以下の設定を追加します。

[delta]
    side-by-side = true
    line-numbers = true # サイドバイサイドでは行番号も同時に表示すると便利です

または、コマンドラインで設定します。

git config --global delta.side-by-side true
git config --global delta.line-numbers true

使用例:

この設定を適用すると、git diffgit log -p の出力が、左右に分かれて表示されるようになります。変更前と変更後のコードが隣り合うため、どこがどのように変わったのかを一目で把握できます。

# ローカルの変更を確認
git diff

# 特定のコミットの変更内容を確認
git show <commit-hash>

長い行も自動的に折り返されるため、画面からはみ出すことなく全体を閲覧できます。これにより、スクロールの手間が減り、比較作業に集中できます。

応用例2: 行番号表示とナビゲーションで大規模な変更も迷わない

大規模なファイル変更や、複数のファイルにわたる差分を追う際、現在見ている場所を見失いがちです。行番号とナビゲーション機能を組み合わせることで、効率的に差分を探索できます。

設定方法:

~/.gitconfig に以下の設定を追加します。

[delta]
    line-numbers = true
    navigate = true # 既に設定済みかもしれませんが、念のため

または、コマンドラインで設定します。

git config --global delta.line-numbers true
git config --global delta.navigate true

使用例:

git diffgit log -p を実行し、deltaのページャーが起動したら、n キーを押すと次の変更ブロック(hunk)へ、N キーを押すと前の変更ブロックへ移動します。ファイルが複数ある場合は、ファイル間も移動できます。

# 複数のファイルに変更を加えた後
git diff
# ページャー内で n / N を押して移動

行番号が表示されることで、変更された行の前後関係を正確に把握しやすくなります。特に、コードの特定の箇所を指摘したい場合に、行番号は非常に役立ちます。

応用例3: マージコンフリクト解決を視覚的にサポート

マージコンフリクトは開発者にとって避けられない課題です。deltaは、コンフリクトの表示も改善し、解決作業をサポートします。

設定方法:

~/.gitconfig に以下の設定を追加します。

[merge]
    conflictStyle = zdiff3

または、コマンドラインで設定します。

git config --global merge.conflictStyle zdiff3

zdiff3 は、Gitが提供するマージコンフリクト表示スタイルの一つで、deltaと組み合わせることで、より視覚的に分かりやすいコンフリクト表示を実現します。

使用例:

コンフリクトが発生するようなマージ操作を行った後、git diff を実行すると、deltaがコンフリクト箇所をシンタックスハイライト付きで表示します。

# コンフリクトが発生するマージ操作を実行
git merge <branch-name>

# コンフリクト状況を確認
git diff

deltaは、コンフリクトマーカー(<<<<<<<, =======, >>>>>>>)を含め、関連するコードを色分けして表示します。これにより、どの部分が自分の変更で、どの部分が相手の変更なのか、そして共通の祖先がどこだったのかを、より明確に区別しやすくなります。複雑なコンフリクトも、deltaの助けを借りることで、落ち着いて解決に取り組めるでしょう。

他ツールとの組み合わせ — 相性のよいツールと組み合わせ方

deltaは単体でも強力ですが、他のCLIツールと組み合わせることで、その真価をさらに発揮します。ここでは、特に相性の良いツールとその連携方法を紹介します。

1. bat: シンタックスハイライター

bat は、cat コマンドの代替となるファイル表示ツールで、シンタックスハイライトや行番号表示、Git連携などの機能を持っています。deltaは bat と同じシンタックスハイライトエンジンとテーマを使用しているため、両者を併用することで一貫した視覚体験を得られます。

組み合わせ方:

特別な設定は不要です。deltaが bat のテーマ設定を継承するため、bat で設定したテーマがdeltaにも自動的に適用されます。

# batでファイルを表示
bat my_file.py

# deltaでdiffを表示。batと同じテーマが適用される
git diff

これにより、ファイルの内容を確認する際も、差分を確認する際も、常に同じ美しいカラーリングでコードを見ることができます。

2. ripgrep (rg), git grep: grep結果のシンタックスハイライト

grep コマンドはファイル内検索に非常に便利ですが、その出力はテキスト形式で、見にくいことがあります。ripgrepgit grep とdeltaを組み合わせることで、検索結果もシンタックスハイライト付きで表示できます。

組み合わせ方:

ripgrepgit grep の出力をdeltaにパイプで渡します。--pretty--color=always オプションは、検索ツールが色付き出力を生成するようにします。

# ripgrepの出力をdeltaでハイライト
rg "my_function" --pretty --color=always | delta

# git grepの出力をdeltaでハイライト
git grep "TODO" --color=always | delta

これにより、検索結果のコードスニペットも、その言語に応じた適切なハイライトで表示されます。コードの内容がより直感的に理解できるようになり、目的のコードを見つける手間が省けます。

3. fzf: インタラクティブなコミット選択

fzf は、強力なインタラクティブフィルターツールです。git logfzf を組み合わせることで、コミット履歴を素早く検索し、選択したコミットの差分をdeltaで表示できます。

組み合わせ方:

git log の出力を fzf に渡し、fzf のプレビュー機能でdeltaを使った git show を実行します。

# Gitエイリアスとして設定すると便利です
# 例えば、~/.gitconfig に以下を追加
# [alias]
#   fdiff = !git log --oneline --graph --color=always | fzf --height 50% --ansi --no-sort --reverse --preview 'git show --color=always $(echo {} | cut -d" " -f1) | delta'

上記の設定例を ~/.gitconfig に追加すると、git fdiff コマンドでインタラクティブなコミット選択画面が開きます。矢印キーでコミットを選択すると、右側のプレビューウィンドウに、deltaで美しく表示されたそのコミットの差分が表示されます。

これは、過去の変更を素早く確認したり、特定の機能がいつ導入されたかを調べたりする際に非常に役立ちます。

よくある設定・カスタマイズ — dotfilesや設定ファイルの例

deltaは非常にカスタマイズ性が高く、あなたの好みに合わせて細かく調整できます。ここでは、~/.gitconfig に記述する、よく使われる設定項目とその効果を紹介します。

~/.gitconfig の設定例

[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only

[delta]
    navigate = true         # n/N キーで差分間を移動
    side-by-side = true     # サイドバイサイド表示
    line-numbers = true     # 行番号を表示
    syntax-theme = Dracula  # シンタックスハイライトのテーマ (batと共通)
    dark = false            # ダークテーマを強制しない(自動検出)
    light = false           # ライトテーマを強制しない(自動検出)
    features = decorations  # ヘッダーに装飾を追加
    hunk-header-style = omit-file-path # ファイルパスを省略し、変更内容に集中
    file-style = bold yellow reverse   # ファイルパスのスタイル
    minus-style = red       # 削除行の色
    plus-style = green      # 追加行の色
    commit-style = bold yellow # コミットヘッダーのスタイル
    whitespace-error-style = red reverse # 空白エラーのスタイル
    # word-diff-regex = "\S+" # ワード単位の差分検出(デフォルトで有効)
    wrap-hunks = true       # 長い行を折り返す
    tabs = 4                # タブ幅を4スペースとして表示
    map-styles = true       # git configのスタイル設定をdeltaに適用
    hyperlinks = true       # コミットハッシュやファイルパスをハイパーリンクにする
    diff-highlight = true   # `diff-highlight` のエミュレーションモード
    diff-so-fancy = true    # `diff-so-fancy` のエミュレーションモード
[merge]
    conflictStyle = zdiff3

各設定項目の解説

  • [core]

    • pager = delta: Gitのページャーとしてdeltaを使用します。
  • [interactive]

    • diffFilter = delta --color-only: インタラクティブなdiff操作でdeltaを使用します。
  • [delta]

    • navigate = true: n / N キーによる差分間のナビゲーションを有効にします。
    • side-by-side = true: 左右に並べて差分を表示します。
    • line-numbers = true: 行番号を表示します。
    • syntax-theme = Dracula: シンタックスハイライトのテーマを指定します。delta --show-syntax-themes で利用可能なテーマ一覧を確認できます。
    • dark = false, light = false: ターミナルの背景色を自動検出します。両方 false にすると自動検出になります。
    • features = decorations: コミット、ファイル、hunkヘッダーにボックスやラインの装飾を追加します。視覚的に区切りが明確になります。
    • hunk-header-style = omit-file-path: Hunkヘッダーからファイルパスを省略し、変更された行範囲のみを表示します。
    • file-style = bold yellow reverse: ファイルパスの表示スタイルを設定します。bold (太字), yellow (色), reverse (背景色と文字色を反転) などの組み合わせが可能です。
    • minus-style = red, plus-style = green: 削除行と追加行の文字色を設定します。
    • commit-style = bold yellow: コミットヘッダーのスタイルを設定します。
    • whitespace-error-style = red reverse: 末尾の空白などのエラーを強調表示します。
    • wrap-hunks = true: 長い行を自動的に折り返して表示します。
    • tabs = 4: タブ文字が何スペース分の幅を持つか指定します。
    • map-styles = true: Gitの組み込みスタイル設定(例えば color.diff.meta など)をdeltaに適用します。
    • hyperlinks = true: コミットハッシュやファイルパスをターミナルでクリック可能なハイパーリンクとして表示します。GitHubやGitLabなどのWebページに直接飛ぶことができます。
    • diff-highlight = true, diff-so-fancy = true: それぞれのツールが提供する視覚的な改善をdeltaでエミュレートします。
  • [merge]

    • conflictStyle = zdiff3: マージコンフリクトの表示スタイルを zdiff3 に設定します。

これらの設定は、あなたの開発環境や視覚的な好みに合わせて自由に調整できます。delta --help コマンドや公式ユーザーマニュアルを参照すると、さらに多くのカスタマイズオプションが見つかります。

今日からできる実行プラン — 3ステップで始める

deltaの導入は、非常に簡単です。以下の3ステップを実行するだけで、あなたの git diff は今日から生まれ変わります。

ステップ1: deltaをインストールする

まず、お使いのOSに応じた方法でdeltaをインストールします。

macOSの場合:

brew install git-delta

Linux (Debian/Ubuntu系) の場合:

sudo apt install git-delta

Windows (Scoop) の場合:

scoop install git-delta

インストールが完了したら、delta -V を実行して正しくインストールされたことを確認してください。

ステップ2: 基本設定を ~/.gitconfig に追加する

次に、Gitがdeltaをページャーとして使用するように設定します。これは、git config --global コマンドで実行するのが最も手軽です。

git config --global core.pager delta
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.navigate true
git config --global delta.dark true # ターミナルがダークテーマの場合
git config --global merge.conflictStyle zdiff3

これらの設定は、~/.gitconfig ファイルに直接書き込むことでも適用できます。

ステップ3: git diff を実行して効果を体験する

設定が完了したら、実際に git diff コマンドを実行してみてください。すでに変更があるGitリポジトリで以下のコマンドを打ち込んでみましょう。

git diff

シンタックスハイライトが適用され、行番号が表示され、n / N キーで差分を移動できる、新しい git diff の世界が広がっているはずです。

この基本的な設定だけでも、あなたのdiff体験は劇的に改善されます。ここから、サイドバイサイド表示や特定のテーマ設定など、あなたの好みに合わせてさらにカスタマイズを進めていきましょう。deltaは、あなたの開発ワークフローをより快適で生産的なものに変える強力なツールとなるでしょう。

参考文献

広告

-AI