Go製Git操作ツール「ggc」の紹介

アプリケーション

Go製Git操作ツール「ggc」の紹介

概要

Gitを操作するためのクライアントツールは様々便利なものがあるが、自分はずっと秘伝のタレのようなスクリプトを組んでaliasを用意して使っていた。

aliasを覚えていればCLIで最速のGIt操作ができるのだが、スクリプトの保守性やら柔軟性をずっと気にしていたので自前でスクラッチしてみた。

CLIだけでは操作性の充実に限界があると思ったのでCUIも対応してみた。

https://github.com/jonas/tig のような高機能なTUIツールもあり、利用に興味があったのだが、使い方を覚えるのが億劫で、もっとシンプルに使えるものが欲しかった。

ggcとは

ggcはGo言語で実装されたGit操作支援ツールである。CLI(コマンドラインインターフェース)としても、CUI(キャラクタユーザーインターフェース)としても利用できる。高速かつシンプルな操作性を追求し、日常的なGit作業をより快適にすることを目的としている。

主な特徴

  • CLIとして、ggc <command> [args] の形式で直接操作できる
  • 引数なしで起動すると、インクリメンタルサーチ付きのCUIが立ち上がり、コマンド選択が可能である
  • add、push、pull、branch、logなど、よく使うGitコマンドを簡単に実行できる
  • 複数のGit操作を組み合わせた複合コマンドも用意している
  • ブランチやファイルの選択、コミットメッセージの入力なども対話的に行える
  • すべてのUIやプロンプトは英語で統一されている
  • Go標準ライブラリと golang.org/x/term のみを利用し、外部依存を極力排除している

インストール方法

makeによるビルド

git clone <repository URL>
make build

ビルド後、生成されたバイナリをPATHの通ったディレクトリに配置する。

go installによるグローバルインストール

go install github.com/bmf-san/ggc@latest

インストール後、ggcコマンドが利用可能となる。

使い方

CLIとCUIのモード切替

ggcは引数の有無に応じて、CLIモードとCUIモードを自動的に切り替える。

# CUIモード(補完付きUI起動)
ggc

# CLIモード(直接コマンド指定)
ggc branch current

1つのバイナリで両モードに対応しており、用途に応じた柔軟な操作が可能である。

CUIによるコマンド選択

単にggcと入力して実行することで、インクリメンタルサーチ付きのコマンド選択UIが起動する。 コマンド名の一部をタイプすることで絞り込みができ、Enterで実行できる。 コマンドによっては追加の引数入力やファイル・ブランチ選択などの対話的操作が発生する。

代表的なコマンド例

ggcコマンド例 実際のgitコマンド 説明
ggc add git add ファイルのステージング
ggc branch current git rev-parse --abbrev-ref HEAD 現在のブランチ名を表示
ggc push current git push origin 現在のブランチをpush
ggc log simple git log --oneline シンプルなログ表示
ggc commit-push add/commit/pushを対話的に一括実行 ファイル選択→コミット→push

補完スクリプト

BashやZsh用の補完スクリプトも同梱している。 tools/completions/ggc.bash を source することで、サブコマンド補完が有効になる。

開発背景

このツールはCursorに殆どのコードを実装させた。

要件や設計を伝えてコードを書かかせたのだが、それなりに単純なツールであるためか、動作するものを精度高く実装してくれた。

コマンドの命名規則などは人間が頭を悩ますよりも規則性のあるシンプルで分かりやすいものを一発で提案してくれたのはとても良かった。

まとめ

ggcはGit操作をCLI・CUIでサポートするツールである。

まだ荒削りの部分も多いが、それなりに使える状態にはなっていると思う。

今後自分で使いつつ改善を重ねていこうと思う。


関連書籍