📝

コマンド紹介シリーズ:ghq

に公開

コマンド紹介シリーズ第8回は、ghqというコマンドを紹介します。ghqを使うとgitレポジトリからcloneする際にとても便利に扱えるようになります。

なお、第7回は以下になりますので、ぜひご興味があればご覧ください。

https://zenn.dev/akasan/articles/3020ea9e5b54c2

ghqとは?

ghqとは公式の説明によると、

'ghq' provides a way to organize remote repository clones, like go get does. When you clone a remote repository by ghq get, ghq makes a directory under a specific root directory (by default ~/ghq) using the remote repository URL’s host and path.

ということで、まとめると以下になりますね。

  • リモートリポジトリのクローンを扱うための方法を提供
  • ghqを使ってリポジトリをcloneするとき、ghqは特定のフォルダの元にcloneするため、全てのプロジェクトを同じフォルダで管理できる

第7回で紹介したpecoと組み合わせることでとても便利に扱えるため、今回紹介させてもらいます。

https://github.com/x-motemen/ghq

使ってみる

インストール

毎度のことながらmacbookを使っているので、以下でインストールしました。

brew install ghq

また合わせてpecoを利用しますが、pecoについては以下の記事を参照ください。

https://zenn.dev/akasan/articles/3020ea9e5b54c2

環境設定

まずは保存されるフォルダの指定をします。gitのグローバル設定でghq.rootに保存するフォルダを設定します。以下のコマンドで設定してください。

git config --global ghq.root '<保存したいパス>'

レポジトリのclone

レポジトリを取得するにはghq get hogehogeと実行するだけです。試しにghqのレポジトリを取得するためには以下を実行します。

ghq get git@github.com:x-motemen/ghq.git

pecoを使った一覧表示

ghqで取得したレポジトリ一覧をみるためには以下のコマンドで実行できます。

ghq list

ただしこのコマンドでは全ての一覧が取得できるだけでそのフォルダへ移動するなどはできません。そこでpecoを利用した設定を行うことで指定したレポジトリに一瞬で移動できます。

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

この方法はghq + pecoを使っている方の中では王道中の王道の設定になっている気がします!これをshell scriptなどに実装してシェル起動時に読み込ませることで利用できます。^]を入力すると以下のようにpecoの画面が表示され、レポジトリ一覧が表示されます。移動したいレポジトリを洗濯してエンターキーを押すと該当するレポジトリにディレクトリが変更されます。誠に申し訳ないですが、フォルダ情報やレポジトリが表示されちゃうのでほとんどがマスキングされてしまいましたが、一覧でフォルダが大量に表示されます。。。

まとめ

今回はghqの紹介をさせていただきました。レポジトリをcloneする場所を考える必要もないですし、pecoと併用すると場所を忘れたとしても検索で一っ飛びできますので、ぜひghq+pecoで快適なgit環境を構築してみてください。

Discussion