コンテンツにスキップ

ghq + peco でGoリポジトリ管理を快適にする

概要

ghq でリポジトリを一元管理し、peco でインタラクティブに検索して cd する開発者向けターミナル快適化ツール組み合わせ。mizdra's blog にて詳細が公開された。

詳細

ghq とは

複数のリポジトリを統一されたディレクトリ構造で管理するツール。

# インストール
brew install ghq

# 設定(~/.gitconfig)
[ghq]
  root = ~/dev

# リポジトリを clone(自動でディレクトリ構造を作る)
ghq get github.com/username/repo
# → ~/dev/github.com/username/repo/ に clone される

# 管理中のリポジトリ一覧
ghq list

メリット: - ~/projects/hoge~/work/fuga のように散らばらない - どのリポジトリがどこにあるか覚える必要がない - GitHub の URL 構造をそのままディレクトリ構造にするので直感的

peco とは

ターミナルでインタラクティブなフィルタリング検索ができるツール。Unix の grep + インタラクティブ UI。

# インストール
brew install peco

# 使い方の基本:パイプで渡してフィルタリング
ls | peco         # ファイル一覧をインタラクティブ検索
history | peco    # コマンド履歴をインタラクティブ検索

ghq + peco の組み合わせ

# ~/.zshrc または ~/.bashrc に追加
function ghq-peco() {
  local repo=$(ghq list | peco --query "$LBUFFER")
  if [ -n "$repo" ]; then
    BUFFER="cd $(ghq root)/$repo"
    zle accept-line
  fi
  zle -R -c
}
zle -N ghq-peco
bindkey '^]' ghq-peco  # Ctrl+] で起動

使い方: 1. Ctrl+] を押すと管理中の全リポジトリ一覧が出る 2. 文字を打つとインクリメンタル検索でフィルタリング 3. Enter で選択 → 自動で cd してそのリポジトリに移動

$ [Ctrl+]] を押す
> github.com/username/my-project   ← 検索してEnter
$ cd ~/dev/github.com/username/my-project

発展的な使い方

# fzf(peco の高機能版)を使う場合
function ghq-fzf() {
  local repo=$(ghq list | fzf --preview "ls $(ghq root)/{}")
  [ -n "$repo" ] && cd "$(ghq root)/$repo"
}
alias g='ghq-fzf'

なぜ重要か / いつ使うか

  • 複数プロジェクトを同時並行で扱っているとき
  • cd ~/xxx/yyy/zzz のような長いパスを毎回打つのが嫌なとき
  • リポジトリがどこに clone されているか探す時間を0にしたいとき