gitを使ってるのにghqとpecoの組み合わせをまだ知らない人へ
こんにちは、たつきちです。
エンジニア歴12年ぐらいで今はベンチャー企業のCTOをしています。
この記事では、 ghq
と peco
というコマンドを組み合わせて使うと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 get
か make 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
で呼び出せるようにする
ということをやっています。
これで、冒頭に貼ったスクリーンキャプチャのような操作が可能になりました
hub
コマンドも組み合わせるとさらに便利に
GitHubをよく使うなら 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を使っているなら
ghq
とpeco
を組み合わせるとローカルリポジトリの行き来がめっちゃ便利になる! - GitHubをよく使うなら
hub
コマンドも組み合わせるとさらに便利に!
Discussion