GitをCUIで強力にサポートする超高機能ツール「lazygit」

バージョン管理システムはソースコードなどの電子ファイルを世代管理するためのシステムであり、特にソースコードの変更履歴を重視するソフトウェア開発においては不可欠なツールと言えます。そして、数あるバージョン管理システムの中でもGitは多機能かつ軽快であることから広く利用されています。Gitは一般的にコマンドラインインターフェース(CLI)を通じて操作されることが多いのですが、CLIはコマンドを理解する必要があるため初心者にとって敷居が高く、操作ミスや理解不足による問題が発生しやすいという欠点があります。そんなGitの操作を簡素化するために開発されたのが、ターミナル上で動作するGit用UI「Lazygit」です。
GitHub - jesseduffield/lazygit: simple terminal UI for git commands
https://github.com/jesseduffield/lazygit
◆動作環境の構築
lazygitのGitHubにてInstallationの項目を確認すると、WindowsについてはバイナリーファイルをダウンロードするかScoopを利用する方法が紹介されています。ただ、バイナリーファイルについては記事作成時点ではダウンロード対象が見当たらず、Scoopを使うにしてもScoop自体やGitのインストールが必要になるため、ここではWSL(Windows Subsystem for Linux)上にUbuntuを導入し、lazygitをインストールすることにします。
まずはMicrosoft StoreよりUbuntuをインストールします。記事作成時点で最新のLTS版であるUbuntu 24.04.1 LTSを選択し、「入手」ボタンをクリックするとインストールが開始します。

インストールが完了すると「入手」ボタンが「開く」ボタンに変わるので、「開く」ボタンをクリックしてUbuntuを起動します。

この時点でWSLがインストールされていない場合はUACプロンプトが表示され、「はい」ボタンをクリックすると続けて以下のウィンドウが表示されるので、メッセージの通り任意のキーを押すと、WSLのインストールが始まります。

WSLのインストールが完了すると一旦Windowsを再起動します。その後Ubuntuを起動すると、初回起動時はユーザー名とパスワードの設定が求められるので、任意のユーザー名とパスワードを入力して設定します。入力後、プロンプトが表示されるようになればWSL上でUbuntuが動作する状態になっています。

次に、Ubuntuを最新の状態にしておきます。以下のコマンドを実行してパッケージリストを更新し、アップグレードを行います。なお、sudoコマンドを使用するためパスワードの入力を求められるので、先ほど設定したパスワードを入力します。
sudo apt update
sudo apt upgrade -y
Git本体とcURLがインストールされている必要があるので、以下のコマンドを実行します。おそらくいずれもデフォルトでインストール済みかとは思いますが、二重にインストールするといった問題は発生しないので、念のために実行しておくことにします。
sudo apt install -y git
sudo apt install -y curl
これで準備が整ったので、以下のコマンドを実行してlazygitをインストールします。Ubuntu 25.10以降であればaptコマンドでlazygitをインストールできるとの事ですが、記事作成時点ではUbuntu 24.04 LTSが最新のLTS版であるため、GitHubリポジトリから直接バイナリーファイルをダウンロードしてインストールするコマンド群を記載しておきます。
# 最新バージョンの取得
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/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
# アーカイブファイルを解凍して実行ファイルを取得
tar xf lazygit.tar.gz lazygit
# 実行ファイルに実行権限を付加し、パスの通っているディレクトリに配置
sudo install lazygit -D -t /usr/local/bin/
上記のコマンドを順次実行するとlazygitがコマンドとして実行可能になったはずなので、念のため以下のコマンドを実行して確認を行います。
lazygit --version
バージョン情報が表示されればインストール成功です。
commit=80223c7fbbd0b86631a988834cbe88e267bb0bd9, build date=2025-11-01T09:43:19Z, build source=binaryRelease, version=0.56.0, os=linux, arch=amd64, git version=2.34.1
◆使ってみる
まずは、Gitで管理するディレクトリを作成し、ファイル群を用意します。

作成したディレクトリにて、コマンドラインからlazygitを起動してみます。インストールに成功していれば、以下のコマンドを実行すると起動できます。
lazygit
この時点ではまだリポジトリを作成していないため、以下のメッセージが表示されます。
Not in a git repository. Create a new git repository? (y/N):
「y」キーを入力後Enterキーを押すと、以下のメッセージが表示されます。
Branch name? (leave empty for git's default):
何も入力せずにEnterキーを押すと、デフォルトのブランチ名(通常は「main」もしくは「master」)でGitリポジトリが作成され、lazygitのUIが表示されます。

画面下には、その時点で利用可能な機能のキーバインドが簡単に表示されています。キーバインドの一覧を確認したい場合は「?」キーを押します。

画面左上には「Status」とあり、「git status」コマンドに相当する情報、つまり現在のリポジトリの状態が表示されています。その下には「Files」とあり、管理対象およびその候補となるファイルが表示されています。「2」キーを押すと「Files」ペインにフォーカスが移動し、方向キーもしくはマウスクリックでファイルを選択できます。選択されたファイルの情報は、画面右側に表示されます。

現在はリポジトリは作成しただけの状態であり、ディレクトリ下のファイルはいずれも管理対象になっていないため、「Files」のファイル名の左には「??」と表示されており、右上のペインは「Unstaged changes(ステージされていない変更)」として表示されています。ここでスペースキーを押すと「git add」に相当する処理が行われ、選択中のファイルがステージされます。なお、その状態で再度スペースキーを押すと、「git reset --cached」に相当する処理が行われ、選択中のファイルはアンステージされます。

すべてのファイルをステージした状態がこちら。全ファイルの左に「A」が表示されています。

ステージされたファイルをコミットするには、「c」キーを押します。すると、画面下部にコミットメッセージの入力欄が表示されます。

メッセージを入力してEnterキーを押しCtrlキーと「s」キーを同時に押すとコミットが実行されます。

左下の「Commits」とあるペインに、コミット履歴が表示されているのがわかります。以降、ファイルの変更・ステージング・コミットの流れを繰り返すことで、Gitリポジトリの管理をlazygit上で行うことができます。

試しに、ソースコードを編集してみました。Tabキーを押すと画面がリフレッシュされ、左上の「Filter」に変更されたファイルが表示されます。ファイル名を選択すると、右のペインに差分が表示されます。

コミットしてみると、左下の「Commits」ペインに新たなコミットが追加されているのがわかります。

◆機能いろいろ
ごく基本的な機能については試すことができましたが、READMEやキーバインドの一覧を見ていると、実に様々な興味深い機能が用意されていることがわかります。
・行単位でのステージング
「Unstaged changes」ペインで変更差分の行を選択し、スペースキーを押すと、その行だけをステージングできます。もしくは「V」キーを押すとビジュアルモードに切り替わり、方向キーで範囲選択を行った後にスペースキーを押すことで、選択範囲の行をまとめてステージングできます。

・対話形式のrebase
「I」キーを押すと対話形式のrebaseを開始します。この状態では、各々のコミットに対して順序変更・削除・編集などを行うことができます。

・cherry-pick
cherry-pickは、あるブランチのコミットで行った変更を、別のブランチに適用する操作です。cherry-pickを行うには、コピー元のコミットでShiftキーと「C」キーを同時に押し、コピー先のブランチに移動してからShiftキーと「V」キーを同時に押します。

・bisect
bisectは二分探索を用いてバグの原因となったコミットを特定するための機能ですが、lazygitでは「B」キーを押すことでbisectを開始できます。あとは各コミットに対して問題がない場合は「G」キー、不具合が混入済みなら「B」キーを押すことでコミットをマーキングし、問題のコミットの探索を進めていきます。

・過去のコミットの修正
コミットを選択してShiftキーと「A」キーを同時に押すと、そのコミットに対してステージングされた変更が適用されます。普通であればツリーの修正が必要になりますが、lazygitはバックグラウンドでrebaseを実行することにより自動的にツリーの修正を行ってくれます。

・カスタムコマンド
lazygitにはカスタムコマンドのキーバインドを登録する機能があり、よく使うGitコマンドやスクリプトを登録しておくことで、lazygit上から簡単に実行できます。 カスタムコマンドを登録するには、lazygitの設定ファイルである「~/.config/lazygit/config.yml」をテキストエディタで開き、以下のように「customCommands」セクションにコマンドを追加します。
customCommands:
- key: '<c-r>'
context: 'commits'
command: 'hub browse -- "commit/{{.SelectedLocalCommit.Hash}}"'
- key: 'a'
context: 'files'
command: "git {{if .SelectedFile.HasUnstagedChanges}} add {{else}} reset {{end}} {{.SelectedFile.Name | quote}}"
description: 'Toggle file staged'
- key: 'C'
context: 'global'
command: "git commit"
output: terminal
- key: 'n'
context: 'localBranches'
prompts:
- type: 'menu'
title: 'What kind of branch is it?'
key: 'BranchType'
options:
- name: 'feature'
description: 'a feature branch'
value: 'feature'
- name: 'hotfix'
description: 'a hotfix branch'
value: 'hotfix'
- name: 'release'
description: 'a release branch'
value: 'release'
- type: 'input'
title: 'What is the new branch name?'
key: 'BranchName'
initialValue: ''
command: "git flow {{.Form.BranchType}} start {{.Form.BranchName}}"
loadingText: 'Creating branch'
上記の設定を適用した状態で「N」キーを押した様子は以下の通り。

追加したキーバインドは、「?」キーを押してキーバインド一覧を表示した際にも確認できます。
・コミット間の差分表示
左下の「Commits」ペインで特定のコミットを選択し、Ctrlキーと「W」キーを同時に押すとメニューが開き、先頭の「Diff ~」を選択するとコミットにマークを付けられます。この状態で別のコミットを選択すると、そのコミットとマークしたコミットとの差分が右側のペインに表示されます。

・ワーキングツリーを木っ端微塵にする
不要になったワーキングツリーを削除するには、Shiftキーと「D」キーを押します。メニューが表示されるので、「Nuke working tree」を選択するか「X」キーを押すと、ド派手な視覚効果とともにワーキングツリーが削除されます。

◆まとめ
作者のJessie Duffield氏はlazygitについて、「Gitの複雑さを隠蔽し、ユーザーがより直感的に操作できるようにすることを目指しています」と述べており、その目的通りGitの操作を視覚的に行えるようにすることで、初心者から上級者まで幅広いユーザーにとって有用なツールとなっています。また、ここまでで確認した以外にも、lazygitには多くの便利な機能が備わっています。Jessie Duffield氏自身が様々な機能について解説した動画も公開されているので、興味のある人は確認してみてください。
Stacked Branches With Lazygit - YouTube

・関連記事
リーナス・トーバルズが「Gitコミット時に時間を無駄にさせるリンクをつけるな」と不満を表明 - GIGAZINE
「Git」誕生から20周年を記念してリーナス・トーバルズ氏が開発初期の裏事情や使用頻度の高いコマンドなどを明かす - GIGAZINE
混乱を引き起こしがちなGitの用語まとめ - GIGAZINE
Gitコマンドの結果一体どうなるのかをすばやくアニメーション画像を生成して視覚的にわかりやすく見せてくれる「git-sim」 - GIGAZINE
バージョン管理システム「Git」がどのように発展してきたのかを可視化した「Git: An Interactive Development History」 - GIGAZINE
バージョン管理システム「Git」の使い方はどのように教えるのが良いのか? - GIGAZINE
・関連コンテンツ
in 動画, ソフトウェア, レビュー, Posted by log1c_sh
You can read the machine translated English article 'Lazygit' is a highly functional tool th….







