Edited at

ghq, peco, hubで快適Gitライフを手に入れよう!

More than 3 years have passed since last update.


はじめに

peco, hubは前から使っててghqは存在は知りながらも「別にリポジトリ管理は必要ないかなー」と思ってたのですが、管理するリポジトリ数が増えてきて面倒になってきたので試しに入れてみたらかなり良かったので紹介したいと思います :smile:


ghq, peco, hubとは?


ghq

ghqは上でも軽く書いたようにリポジトリ管理ツールになります。

例えばgit cloneの代わりにghq get <repository URL>とコマンドを打つとghqルートディレクトリ(デフォルトでは~/.ghq)以下にリポジトリがcloneされ、

ghq listでghqルートディレクトリ以下のGitリポジトリ一覧を表示、

ghq look <project>で指定したリポジトリに移動する、といったように使います。


peco

pecoは文章で説明するのは難しいのですが、CLI上で例えばps auxなどのようにリスト表示されるものをインクリメンタルサーチできるようにするものです。

詳しくはGithub参照ということで

https://github.com/peco/peco


hub

hubはGithubをCLI上で操作するためのツールです。

本記事ではhub browse(Githubで指定したリポジトリを開く)をするためだけに利用します。


インストール

全てGo製のライブラリなのでgo getしていただくか、もしくは全てhomebrewでもインストールできるのでそちらでやっていただければOKです


ghq

$ brew install ghq

# or
$ go get github.com/motemen/ghq


peco

$ brew install peco

# or
$ go get github.com/peco/peco/cmd/peco


hub

$ brew install hub

# or
$ go get github.com/github/hub


やったこと

各ツールの基本的な使い方は各公式サイトをご覧ください。

今回、僕はghqで管理しているリポジトリをpecoを使って選択し、ローカル・リモート両方に移動できるようにしました。

結論から言いまして、以下2つのエイリアスでこれを実現しました。

alias g='cd $(ghq root)/$(ghq list | peco)'

alias gh='hub browse $(ghq list | peco | cut -d "/" -f 2,3)'


ローカルリポジトリへの移動: $ cd $(ghq root)/$(ghq list | peco)

g.gif

ローカルリポジトリへの移動なのですが、これは上記にもある通りghq lookでもできます。

ghq lookはプロジェクト名のサジェストもできるのでこれでもいいと言えばいいのですが、インクリメンタルサーチが欲しかったのとghq lookの動作が微妙に遅いという理由があり、このようなコマンドに至りました。


$(ghq root)

ghqのルートディレクトリを返してくれます


$(ghq list | peco)

ghq listをpecoでインクリメンタルサーチできるようにしています

ghq listは'-p'オプションでフルパスで一覧表示を、--uniqueオプションでプロジェクト名のみの一覧表示をしてくれます。

-pは個人的には冗長で嫌、--uniqueではインクリメンタルサーチする時にユーザー名で絞り込めず不便、ということでオプションは無しにしています。

フルパス表示で特に問題ないならghq rootは無しでcd $(ghq list -p | peco)で大丈夫ですし、プロジェクト名だけでよくてかつghq lookの速度が気にならないならghq look $(ghq list --unique | peco)でも良さそうです。


リモートリポジトリへの移動: $ hub browse $(ghq list | peco | cut -d "/" -f 2,3)

gh.gif


hub browse <user>/<repository>

Githubの指定したリポジトリを開きます


cut -d "/" -f 2,3

ghq listでの表示は例えばRubyのリポジトリだと"github.com/ruby/ruby"のようになります。

hub browseでは頭の'github.com/'はいらないため、cutで2~3個目の要素(ruby/ruby)を切り出しています。


まとめ

以上のようにghq, peco, hubを使うことでGitリポジトリの管理と移動を便利にすることができました!

もしリポジトリの管理が面倒だったり「あのリポジトリどこに作ったっけ・・・」みたいなことが起きているならば使ってみてはいかがでしょうか?


宣伝

クラウドワークスでは働き方に革命を起こしたいエンジニアを募集しております!

興味のある方はとりあえずお話だけでもいかがでしょうか?

お待ちしております!