🧞

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

に公開

はじめに

Gitの操作、コマンドを覚えたり、入力したりするのが面倒だと感じたことはありませんか?
ggcは、Goで開発した直感的なGit CLIツールです。従来のコマンドライン操作に加えて、インクリメンタルサーチ機能を備えたインタラクティブモードを提供し、Gitの操作をより快適にします。

この記事では私が最近開発しているggcというツールについて紹介したいと思います。

https://github.com/bmf-san/ggc

ggcの特徴

1. インタラクティブモード

単にggcと入力するだけで、ファジー検索可能なインタラクティブUIが起動します。

Interactive Overview

検索機能

  • ファジーマッチング。コマンド名の一部を入力するだけで検索可能(例: "bd""branch delete"にマッチ)
  • 大文字小文字を区別しない。柔軟な検索が可能
  • リアルタイムフィルタリング。入力と同時に結果が更新

ナビゲーション

  • Ctrl+n / Ctrl+p で上下移動
  • / でカーソル移動
  • Ctrl+a / Ctrl+e で行頭/行末へ移動
  • Ctrl+u で入力をクリア
  • Ctrl+w で単語削除
  • Enter でコマンド実行
  • Ctrl+c で終了

2. ワークフロー機能

複数のコマンドを組み合わせて、一連の作業を自動化できます。

ワークフローの操作

  • Tab で選択中のコマンドをワークフローに追加
  • Ctrl+t でワークフロー詳細ビューの表示切替
  • c でワークフローをクリア(ワークフロービュー内)
  • Enter でワークフロー全体を実行(ワークフロービュー内)

よくあるワークフロー例

  • addcommitpush
  • fetchrebasepush force
  • pull currentadd .commitpush current

CLI Workflow

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           # 日付順でブランチ一覧

Branch Management

ステージング&コミット

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