🐶

マウス不要!Git 操作を爆速化する「lazygit」が手放せない

に公開

こんにちは!株式会社AI Shift で Web フロントエンドエンジニアをしている辰川です!
今回は、筆者が愛用している Git の TUI ツールである lazygit について紹介します。

https://github.com/jesseduffield/lazygit

Git 操作、こんなことで困っていませんか?

git add して git commit して git push ...。
日々の開発で繰り返す、この一連の Git 操作。
ターミナルでのコマンド入力は素早い反面、少し特殊な状況になると急に難解な呪文のように感じられますよね。

かといって、GUI ツールに切り替えるのも万能ではありません。
キーボードから手を離し、マウスに持ち替えて何度も画面をポチポチする作業は、集中力を削ぎますし、キーボード中心の操作フローに慣れていると、かえって面倒に感じることも少なくないです。

「ターミナルの速度感」と「GUI の視覚的な分かりやすさ」。
もし、この 2 つの「いいとこ取り」ができるとしたら...?

例えば、こんな経験はありませんか?

  • 「このファイルの一部分だけコミットしたい」
    git add -p を使うけれど、hunk(変更の塊)単位の操作が少し不便。できれば行単位で直感的にステージングしたいが、操作がややこしい。

  • 「あのブランチにある、あのコミットだけを今のブランチに持ってきたい」
    git log でコミットハッシュを調べてコピーし、git cherry-pick <ハッシュ> を実行。少し手間がかかるし、どのコミットだったか探すのが面倒。

  • 「さっきのコミットに不要なファイルやデバッグコードが入ってしまった」
    過去のコミットを修正するのは大変。インタラクティブリベース(git rebase -i)を行うものの、どのコミットを編集すれば良いのか、操作に自信が持てない。

  • 「このコミット、こっちのコミットより先にしておけばよかった」
    機能実装の順番を後から整理したい場合など、コミットの順序を入れ替えたいが、git rebase -i を実行し、テキストエディタでコミットの行を慎重に切り貼りする作業は、少し気を使う。

もし、これらの悩みをターミナルから一歩も出ることなく、まるで GUI ツールのように直感的なインターフェースで解決できるとしたらどうでしょうか。

その答えが「lazygit」です。

この記事では、一度使ったら手放せなくなる lazygit の魅力と、日々の Git 操作を爆速化する基本的な使い方を紹介します。

lazygit とは?

lazygit は、Go 言語で書かれた TUI の Git クライアントです。
複雑な Git コマンドを覚える必要はなく、キーボードショートカットだけでほとんどの操作を完結できます。

主な特徴:

  • 直感的な UI:変更内容、ブランチ、コミットログなどがパネルで視覚的に表示され、状況を把握しやすいです。

  • キーボード中心の操作:space でステージング、c でコミットなど、シンプルなキー操作でサクサク作業できます。

  • インタラクティブな操作:コミットの編集、並べ替えやインタラクティブリベースも簡単に行えます。

インストール

lazygit は様々なプラットフォームに対応しており、パッケージマネージャーを使って簡単にインストールできます。
今回は、macOS を用いて紹介いたします。

macOS(Homebrew):

zsh
brew install lazygit

その他の環境については、公式リポジトリの Installation をご確認ください。

基本的な使い方

インストール後、Git リポジトリのディレクトリに移動して、ターミナルで以下のコマンドを実行するだけです。

zsh
lazygit

lazygit の画面は、いくつかのパネルに分かれています。
数字キー(or hl キー)で上下パネルを移動し、jk キーでパネル内を移動します。
vim のキーバインドで移動できるのがとても嬉しいです。

パネルは 7 つの項目で構成されています。

  1. ステータス
  2. ファイル
  3. ブランチ
  4. コミット
  5. スタッシュ

そして、画面右側の最も大きなパネルです。
左側のパネルで選択した項目の詳細情報が表示されます。
「左で選び、右で確認する」が lazygit の基本的な使い方です。
また、常に右下にコマンドログが表示されています。(非表示に変更可能)

ブランチを切って PR を作ってみる

lazygit はできることが多いですが、言葉で説明するよりも実際に触ってもらうのが一番です。
そこで今回は、誰もが毎日行う「新しい機能開発のためにブランチを切り、変更をコミットして GitHub に push する」という基本的な流れを例に、その便利さを紹介します。

1. 新しいブランチを作成する

まずは機能開発用のブランチを作成します。

  1. 3 キーを押してブランチパネルに移動します。

  1. n キーを押すと、新しいブランチの作成ダイアログが表示されます。

  1. ブランチ名(例: feat/bar)を入力し、return を押します。

これだけで、新しいブランチが作成され、チェックアウトまでが完了します。

2. ファイルを編集し、ステージングする

次に、ソースコードを編集して、ステージングします。
ファイルを変更すると、lazygit が変更を検知し、ファイルパネルに変更内容が表示されます。

  1. 2 キーでファイルパネルに移動します。

  1. jk キーでステージングしたいファイルを選択します。

  1. space キーを押すと、ファイルがステージングエリアに追加されます。(ファイル名が緑色に変わります)

3. コミットする

ステージングが完了したら、変更をコミットします。

  1. c キーを押すと、コミットメッセージの入力画面が開きます。

  1. 文字を入力し、return を押すと、コミットが完了します。

4. ブランチを Push する

最後に、作成したブランチをリモートリポジトリに push して、プルリクエストを作成する準備をします。

  1. 3 キーで再びブランチパネルに戻ります。

  1. shift + p キーを押して push を実行します。

これで push は完了です!

  1. ブランチパネルで o キーを押すことで GitHub の Pull Request を作成するページに飛ぶことができます。

このように、lazygit を使えば、ターミナルから一度も出ることなく、ブランチ作成から push までの一連の作業を直感的かつ高速に実行できます。

さらに使いこなす

lazygit が本領を発揮するのは、git rebase -igit cherry-pick といった、少し複雑なコマンド操作を簡単に行える点にあります。
ここでは、その代表例を 2 つ紹介します。

🔄 コミットの順番を自由自在に入れ替える

下記の 2 つのコミットについて、前後を入れ替えてみます。

  • chore: bazに変更
  • feat: barの追加

  1. 4 キーでコミットパネルに移動します。
  2. 入れ替えたいコミット(例: chore: bazに変更)を選択し、control + j or control + k キーを押します。

これだけです!
インタラクティブリベース作業をする必要はありません。

🍒 別のブランチからコミットを拝借

「あのブランチにある、あのコミットだけを今のブランチに持ってきたい」
そんな時に便利なのが cherry-pick だと思います。

  1. 3 キーでブランチパネルに移動し、コピー元のブランチ(例: feat/bar)を選択して space でチェックアウトします。

  1. 4 キーでコミットパネルに移動し、欲しいコミットを選択します。
  2. shift + c キーを押して、コミットを「コピー」します。

  1. 再び 3 キーでブランチパネルに戻り、適用先のブランチ(例: feat/copy-bar)を space でチェックアウトします。
  2. 4 キーでコミットパネルに移動し、v キーで「ペースト」します。

これだけです!
面倒なコミットハッシュのコピー&ペーストはもう必要ありません。

自分好みにカスタマイズする

lazygit の大きな魅力の一つが、その高いカスタマイズ性です。
キーバインディングや見た目など、設定ファイルを編集することで自分だけの最強の環境を構築できます。

macOS の場合は、~/Library/Application\ Support/lazygit/config.yml をカスタマイズすることで

参考までに、自分が使っている config.yml を紹介します。
git log の表示変更とdiff表示しか変更していないですが...!)

config.yml
git:
  # git log
  branchLogCmd: "git log --graph --color=always --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' {{branchName}} --"
  # 差分表示
  paging:
    colorArg: always
    pager: delta --dark --paging=never --side-by-side
  allBranchesLogCmds:
    - git log --graph --color=always --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --all

diff表示を見やすくするために、delta を使用しています。

https://github.com/dandavison/delta

ここで紹介したのはほんの一例です。
色のテーマ変更や表示項目の調整など、非常に多くの項目がカスタマイズ可能です。
詳しくは公式のドキュメントを眺めてみると、きっとやりたいことが見つかるはずです。

まとめ

lazygit は、ターミナルでの Git 操作を劇的に効率化してくれる強力なツールです。これまで GUI ツールを使っていた方も、コマンドライン派の方も、一度試してみる価値は十分にあります。

キーボードから手を離さずに、思考を中断することなく開発に集中できる環境は、想像以上に快適です。ぜひ、あなたの開発環境にも lazygit を取り入れて、その爆速な操作感を体験してみてください!

最後に

AI Shift ではエンジニアの採用に力を入れています!
少しでも興味を持っていただけましたら、カジュアル面談でお話しませんか?
(オンライン・19 時以降の面談も可能です!)

【面談フォームはこちら】
https://hrmos.co/pages/cyberagent-group/jobs/1826557091831955459

AI Shift Tech Blog

Discussion