💻

gitを使ってるのにghqとpecoの組み合わせをまだ知らない人へ

2020/02/28に公開

こんにちは、たつきちです。

エンジニア歴12年ぐらいで今はベンチャー企業のCTOをしています。

この記事では、 ghqpeco というコマンドを組み合わせて使うとgitでのローカルリポジトリ管理がめちゃくちゃ楽になるというお話をします。

知らなかった人はこの記事で100%幸せになれるので、ぜひ最後までお付き合いください。

何ができるようになるのか

以下のように、ローカルに存在するgitリポジトリをインクリメンタルサーチして選択し、そのディレクトリにジャンプすることができるようになります。

導入手順

1. ghqをインストール

gqh は、GitHubなどのリモートgitリポジトリのローカルcloneを管理するためのツールです。

git clone の代わりに ghq get {リポジトリURL} を実行するとghqルートディレクトリ(デフォルトでは ~/ghq/ )にリポジトリがcloneされ、 ghq list でclone済みのリポジトリを一覧表示できたりします。

なお、cloneしたいリモートリポジトリがGitHUbの場合は、リポジトリURLを打ち込む代わりに単に ghq get {user}/{repo} とだけ指定すれば github.com/{user}/{repo} をcloneしてくれます。

Macの場合はhomebrewでインストールできます。

$ brew install ghq

それ以外の環境の方は、 go getmake install でインストールしましょう。

$ go get github.com/x-motemen/ghq
# または
$ git clone https://github.com/x-motemen/ghq .
$ make install

2. pecoをインストール

peco は、CLI上でリスト表示されるものをインクリメンタルサーチできるようにしてくれるツールです。

公式のデモ動画(gif) を見れば一目瞭然です。

こちらもMacの場合はhomebrewでインストールできます。

$ brew install peco

それ以外の環境の方は 公式のREADME をご参照ください🙏

3. ghqとpecoをいい感じに連動させるaliasを書く

ghqとpecoがインストールできたら、あとはこれらをいい感じに連動させるためのaliasをシェルのプロファイル(bashなら ~/.bashrc~/.bash_profile )に以下のaliasを追記しましょう。

alias gi='(){ cd $(ghq root)/$(ghq list | peco --query "$*") }'
  • ghq list の結果を peco に渡して
  • 選択されたリポジトリのパスを ghq root に繋げることでフルパスを得て
  • そこに cd する
  • という処理を gi で呼び出せるようにする

ということをやっています。

これで、冒頭に貼ったスクリーンキャプチャのような操作が可能になりました

GitHubをよく使うなら hub コマンドも組み合わせるとさらに便利に

GitHubの公式CLIツール hub コマンドも組み合わせるとさらに便利になります。

hubコマンドも、Macの方はhomebrewでインストールできます。

$ brew install hub

それ以外の環境の方は 公式のREADME をご参照ください🙏

hubコマンドをインストールした上で、以下のaliasを登録してみましょう。

alias gh='(){ hub browse $(ghq list | peco --query "$*" | cut -d "/" -f2,3) }'

こうしておくと、以下のように、ローカルに存在するgitリポジトリをインクリメンタルサーチして選択し、そのリポジトリのリモートリポジトリ(GitHubリポジトリ)をブラウザで開くことができるようになります。

便利ですね!

あと、些細ですが「 ghq get でGitHubリポジトリをcloneして、完了したらそのディレクトリに移動する」という作業も地味に面倒なので、僕は以下のようにalias化しています。

alias gg='(){ ghq get -u -p $1 && $(ghq root)/github.com/$_ }'

ghq get-u は「もしすでにclone済みだったら最新の内容に更新する」というオプション、 -p は「SSHでcloneする」というオプションです。

まとめ

  • gitを使っているなら ghqpeco を組み合わせるとローカルリポジトリの行き来がめっちゃ便利になる!
  • GitHubをよく使うなら hub コマンドも組み合わせるとさらに便利に!
GitHubで編集を提案

Discussion