Goで開発したGit CLIツール - ggc

はじめに
Gitの操作、コマンドを覚えたり、入力したりするのが面倒だと感じたことはありませんか?
ggcは、Goで開発した直感的なGit CLIツールです。従来のコマンドライン操作に加えて、インクリメンタルサーチ機能を備えたインタラクティブモードを提供し、Gitの操作をより快適にします。
この記事では私が最近開発しているggcというツールについて紹介したいと思います。
ggcの特徴
1. インタラクティブモード
単にggcと入力するだけで、ファジー検索可能なインタラクティブUIが起動します。

検索機能
- ファジーマッチング。コマンド名の一部を入力するだけで検索可能(例:
"bd"で"branch delete"にマッチ) - 大文字小文字を区別しない。柔軟な検索が可能
- リアルタイムフィルタリング。入力と同時に結果が更新
ナビゲーション
-
Ctrl+n/Ctrl+pで上下移動 -
←/→でカーソル移動 -
Ctrl+a/Ctrl+eで行頭/行末へ移動 -
Ctrl+uで入力をクリア -
Ctrl+wで単語削除 -
Enterでコマンド実行 -
Ctrl+cで終了
2. ワークフロー機能
複数のコマンドを組み合わせて、一連の作業を自動化できます。
ワークフローの操作
-
Tabで選択中のコマンドをワークフローに追加 -
Ctrl+tでワークフロー詳細ビューの表示切替 -
cでワークフローをクリア(ワークフロービュー内) -
Enterでワークフロー全体を実行(ワークフロービュー内)
よくあるワークフロー例
-
add→commit→push -
fetch→rebase→push force -
pull current→add .→commit→push current

3. 従来のCLIモード
もちろん、従来通りのコマンドライン操作も可能です。
# ブランチ一覧を表示
ggc branch list local
# 変更をステージング
ggc add .
# コミット作成
ggc commit "feat: add new feature"
# プッシュ
ggc push current
4. 統一されたシンプルな構文
ggcは-xや--longのようなフラグを使わず、スペース区切りのサブコマンドで統一されています。
# フラグなしの統一構文
ggc fetch prune
ggc commit allow empty
ggc branch delete merged
# フラグベースのGitコマンドと比較
git fetch --prune
git commit --allow-empty
5. コマンドエイリアス
よく使うコマンドの組み合わせをエイリアスとして定義できます。
# ~/.ggcconfig.yaml
aliases:
ac:
- add .
- commit tmp
sync:
- pull current
- add .
- commit
- push current
st: status
br: branch
使い方は以下の通りです。
# 単一コマンドエイリアス
ggc st # ggc status を実行
ggc br list # ggc branch list を実行
# 連続コマンドエイリアス
ggc sync # pull → add → commit → push を順次実行
インストール
Homebrew(推奨)
macOSやLinuxでは、Homebrewで簡単にインストールできます。
brew install ggc
インストールスクリプト
ワンライナーでインストールできます。
curl -sSL https://raw.githubusercontent.com/bmf-san/ggc/main/install.sh | bash
バイナリダウンロード
Releasesページから、お使いのプラットフォーム向けのバイナリをダウンロードできます。
対応プラットフォームは以下の通りです。
- macOS (Apple Silicon/Intel)
- Linux (ARM64/x86_64)
- Windows (x86_64)
go install
go install github.com/bmf-san/ggc/v7@latest
主要コマンド
ggcは豊富なGitコマンドをサポートしています。以下は主要なものの一部です。
ブランチ操作
ggc branch list local # ローカルブランチ一覧
ggc branch create # 新規ブランチ作成&チェックアウト
ggc branch checkout # ブランチ切り替え
ggc branch delete # ブランチ削除
ggc branch sort date # 日付順でブランチ一覧

ステージング&コミット
ggc add . # 全変更をステージング
ggc add interactive # インタラクティブにステージング
ggc commit "message" # コミット作成
ggc commit amend # 直前のコミットを修正
リモート操作
ggc fetch # フェッチ
ggc pull current # カレントブランチをプル
ggc push current # カレントブランチをプッシュ
ggc push force # 強制プッシュ
その他
ggc status # ステータス表示
ggc log graph # グラフ付きログ表示
ggc diff # 差分表示
ggc stash # 変更をスタッシュ
全コマンドはggc helpまたはインタラクティブモードで確認できます。
カスタマイズ可能なキーバインディング
ggcは、インタラクティブモードのキーバインディングをカスタマイズできます。
プロファイル
4つのビルトインプロファイルから選択可能です。
- default - 標準の動作
- emacs - Emacsスタイル(Ctrlベース)
- vi - Viスタイル(モーダル概念を適用)
- readline - GNU Readline互換
設定例
# ~/.ggcconfig.yaml
interactive:
profile: emacs # ベースプロファイル
keybindings:
move_up: "ctrl+p"
move_down: "ctrl+n"
move_to_beginning: "ctrl+a"
move_to_end: "ctrl+e"
delete_word: "ctrl+w"
# ワークフロー操作
add_to_workflow: "tab"
toggle_workflow_view: "ctrl+t"
clear_workflow: "c"
OS固有の設定
プラットフォームごとに異なるキーバインディングを設定できます。
interactive:
darwin: # macOS
keybindings:
move_up: "up"
move_down: "down"
linux: # Linux
keybindings:
move_up: "ctrl+p"
move_down: "ctrl+n"
シェル補完
Bash、Zsh、Fishでのタブ補完をサポートしています。
Bash
# ~/.bash_profile または ~/.bashrc
if [ -f ~/.ggc-completion.bash ]; then
. ~/.ggc-completion.bash
fi
Zsh
# ~/.zshrc
if [ -f ~/.ggc-completion.zsh ]; then
. ~/.ggc-completion.zsh
fi
Fish
# ~/.config/fish/config.fish
if test -f ~/.ggc-completion.fish
source ~/.ggc-completion.fish
end
使用例:実際のワークフロー
1. 新機能の開発
# インタラクティブモードを起動
ggc
# 以下をワークフローに追加(Tabキーで追加)
# 1. branch create
# 2. add .
# 3. commit
# 4. push current
# ワークフローを実行(Enter)
# ブランチ名やコミットメッセージは実行時にプロンプトで入力
2. リモートの変更を取り込んでリベース
# エイリアスを定義
# ~/.ggcconfig.yaml
aliases:
sync-rebase:
- fetch
- rebase
- push force
# 使用
ggc sync-rebase
3. ブランチ整理
# インタラクティブモードで "bd" と入力してファジー検索
ggc
# "branch delete merged" が見つかる
# Enterで実行し、マージ済みブランチを削除
まとめ
ggcは、Gitの操作をより直感的で効率的にするツールです。
- ファジー検索で素早くコマンドを見つけられる
- ワークフロー機能で反復作業を自動化
- 統一されたシンプルな構文
- カスタマイズ可能なキーバインディング
- 軽量で高速
- コマンドエイリアスで生産性向上
良ければぜひ試してみてください!もしよろしければ、GitHubリポジトリへのStarもお願いします!
Discussion