Lazygit使い方ガイド:ターミナルで Git をすばやく直感的に管理できる強力な TUI

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Lazygit に乗り換えた理由

以前、force push をブランチ違いでやらかして大切なコードを失ったことがある。コマンドを打つのが速すぎて、今いるブランチを確認せずに実行してしまい、チームメイトのコミットが丸ごと上書きされてしまった。その日から、Git のワークフローを「ゆっくり見える化する」方法を探し始めた。コマンドを減らしたいわけじゃない — 取り消しのきかない操作をする前に、ちゃんと見えるようにしたかったのだ。

そんなタイミングでちょうど Lazygit に出会った。Git を置き換えるものではなく、Git の上に乗るインターフェース層として、すべてをターミナル内に表示してくれる。各操作の完全なコントロールは手放さずに済む。

Lazygit とは何か、他の GUI ツールとどう違うのか

Lazygit は Go 製の Git 向け TUI(Terminal User Interface)だ。バイナリのサイズはわずか約 7MB で、追加の依存関係は不要。GitKraken や Sourcetree のようなデスクトップ GUI との最大の違いは、完全にターミナル内で動作する点だ — VPS に SSH でログインして lazygit と打つだけで、普通に作業できる。

マウス不要。ターミナルを離れる必要なし。数コミットをまとめたいだけなのに git rebase -i HEAD~5 の構文を覚える必要もない。

Lazygit は画面を複数のパネルに分割して表示する:

  • Files — 変更ファイル一覧(staged/unstaged)
  • Branches — ローカル・リモートのブランチ一覧
  • Commits — スクロール・操作可能なコミット履歴
  • Stash — スタッシュエントリ一覧
  • Log/Graph — 視覚的なコミットグラフ

Lazygit のインストール

Ubuntu / Debian

LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit /usr/local/bin

macOS (Homebrew)

brew install lazygit

Arch Linux

sudo pacman -S lazygit

インストール後、任意の Git リポジトリに移動して以下を実行:

lazygit

パネル分割されたインターフェースが表示されれば完了だ。? を押すとすべてのキーバインドを確認できる。

よく使う機能

1. ファイル全体ではなく行単位でステージング

個人的に最も気に入っている機能だ。git add -p で y/n を繰り返す代わりに、Lazygit では:

  1. Files パネルでファイルを選択
  2. Enter で diff ビューを開く
  3. 矢印キーでステージしたい行に移動
  4. Space で行単位のステージング、または v で範囲選択してから Space

同じファイルを複数箇所変更していて、一部だけコミットしたいときに非常に便利だ — たとえば上部のバグ修正はコミットしたいが、下のリファクタリング部分はまだコミットしたくない、といったケースに役立つ。

2. コマンドを覚えずにインタラクティブリベース

以前はコミットをまとめるたびに git rebase -i HEAD~3 と打ち、エディタを開いて picksquash に書き換えて保存する — 2コミットをまとめるだけで30秒かかっていた。Git Interactive Rebase の操作も、Lazygit なら:

  1. Commits パネルに移動(数字キー 4 またはクリック)
  2. 操作したいコミットを選択
  3. s で上のコミットに squash、または r でリネーム

コミットの順番を変えたいときは Ctrl+j / Ctrl+k で直接上下に移動できる — vim でテキストファイルを手作業で編集するより圧倒的に直感的だ。

3. 視覚的な Cherry-pick

別のブランチからコミットを取り込みたい場合、Git Cherry-pick のコマンドを覚えなくても Lazygit では:

  1. Branches パネルでソースブランチに切り替え
  2. Commits パネルで取り込みたいコミットを選択
  3. c でコピー(cherry-pick)
  4. ターゲットブランチに戻り、v でペースト

Lazygit は cherry-pick 対象のコミットを別の色でハイライト表示する — 確定する前に自分が何をしているか正確に把握できる。

4. スタッシュの管理が楽になる

stash@{2} が何だったか忘れてしまった経験はないだろうか。Stash パネルはすべてのエントリをメッセージ付きで一覧表示し、その場で diff のプレビューも確認できる。Space で apply、g で pop、d で削除 — Git Stash のコマンドを手探りで打つより断然スッキリしている。

5. より安全な Force Push

force push のミスでコードを失ってから、この操作には非常に慎重になった。Lazygit には force push with lease 機能がある — push 時に P の代わりに Shift+P を押す。これは --force ではなく --force-with-lease を使用するため、リモートに他の人の新しいコミットがない場合のみ force push が実行される。キー一つ増えるだけで、過去に自分が経験したような事故を防げる。

最初に覚えておくべきキーバインド

Lazygit には数十のキーバインドがあるが、最初はこれだけ覚えておけば十分使いこなせる:

Space     — ファイルまたは行をステージ/アンステージ
Enter     — 行単位ステージのためにファイルを開く / 詳細表示
c         — コミット(メッセージ入力フォームを開く)
P         — リモートにプッシュ
p         — リモートからプル
b         — 新しいブランチを作成
Shift+M   — 選択中のブランチを現在のブランチにマージ
R         — 現在のブランチを選択中のブランチにリベース
q         — Lazygit を終了
?         — 現在のパネルのキーバインドをすべて表示

日常のワークフローへの組み込み

素早く起動できるようにGit Alias を設定している:

# ~/.bashrc または ~/.zshrc に追加
alias lg='lazygit'

もう一つ便利なのは、別のターミナルでファイルを変更すると Lazygit が自動的にリロードされる点だ。tmux の一つのペインで Lazygit を開いたまま、別のペインで作業する — 状態がリアルタイムで更新されるため、手動でリフレッシュする必要がない。

Neovim を使っているなら、lazygit.nvim プラグインでエディタ内のフローティングウィンドウからキーバインド一発で Lazygit を開ける。

それでも素の Git コマンドを使うべき場面

Lazygit がすべてのケースをカバーしているわけではない。以下の場面では直接コマンドを打っている:

  • Git bisect — Lazygit にはまだ専用の UI がない(git bisect についてはブログの別記事を参照)
  • 複雑なサブモジュール — 基本的なサポートはあるが完全ではない
  • カスタムフックや特定の出力が必要なスクリプト
  • スクリプト / CI — Lazygit はインタラクティブツールのため、パイプラインには不向き

Git の基礎を理解していることは依然として重要だ — Lazygit はあくまで操作を速くするための UI 層であり、Git の仕組みそのものの理解を代替するものではない。

まとめ

Lazygit を毎日使い続けて数ヶ月が経ち、気づいたことがある。コミットの頻度が上がり、コミットが小さく明確になった — 行単位のステージングとコミットメッセージの入力が驚くほど簡単になったからだ。これは以前からやるべきだとわかっていたことで、Lazygit はそれを「面倒くさい」と感じさせなくしてくれた。

rebase や cherry-pick のたびに Stack Overflow からコマンドをコピペしているなら、一週間だけ Lazygit を試してみてほしい — おそらく元の方法には戻りたくなくなるはずだ。

Share: