シンプルにghq + pecoで管理しようぜ、みんな

2022年3月22日

Gitのディレクトリ管理がめちゃくちゃな人たちをみかけたので、もうghqとpecoで管理しようという記事。今更なんだけど、再度きちんと紹介してみる。

ghq とは

x-motemen/ghqgitコマンド をオーバーラップして特定のディレクトリに集約してくれるツール。 git clone したい場合は

ghq get https://github.com/aaa/bbb

のようにすると、

$HOME/.ghq/github.com/aaa/bbb

のように設置してくれる。

ghq get https://gitlab.com/xxx/yyy

をすると、

$HOME/.ghq/gitlab.com/xxx/yyy

のようにしてくれるから、GitHub と GitLab を両方使ってもきちんと分けてくれる。ghqで管理しているリポジトリを一覧表示することもでき、次に紹介するpecoと組み合わせるとショートカットでリポジトリを検索して移動できる。

peco とは

peco/peco スタイリッシュにフィルタリングしてくれるツール。ログやプロセス統計、ファイル検索をしたいときにpecoに渡すといい感じでフィルタリングできるため、活用の余地はたくさんあり。

インストール

macOSの場合

Homebrewで。

brew install ghq peco
vi ~/.zshrc

以下を下に書き込む

function peco-src () {
  local selected_dir=$(ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-src
bindkey '^g' peco-src

でシェルを再読み込み。

exec $SHELL -l

WSL(Ubuntu)の場合

asdf-vm/asdf 経由で入れる。

git clone https://github.com/asdf-vm/asdf ~/.asdf
chmod +x ~/.asdf/asdf.sh
echo ". $HOME/.asdf/asdf.sh" >> ~/.bashrc
exec $SHELL -l
asdf plugin add ghq
asdf install ghq latest

sudo apt install peco
vi ~/.bash_profile

以下を下に書き込む

function peco-src () {
  local selected_dir=$(ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}
bind -x '"\201": ghq-peco'
bind '"\C-g":"\201\C-m"'

でシェルを再読み込み。

exec $SHELL -l

使い方

GitHubなどに公開鍵を登録して

Host github
    Hostname github.com
    User git
    IdentityFile ~/.ssh/id_rsa

などと登録している場合は

ghq get github:ユーザー名/リポジトリ名

で取得して Ctrl + g を押せばフィルタリングできる。