読者です 読者をやめる 読者になる 読者になる

非golangプログラマのためのghq入門 - Re.Ra.Ku アドベントカレンダー day 1

丸山です。今年もアドベントカレンダーの季節がやってきましたね。個人的にはScalaのアドベントカレンダーと、PostgreSQLのアドベントカレンダーを楽しみにしています。

弊社も技術ブログを持っているのだから、せっかくならばアドベントカレンダーをやろうじゃないか、というわけで、これから25日まで、毎日様々な記事が書かれていきます。

ScalaやAndroid Java,SwiftやJavaScriptなど、様々なプログラミング系の話題のほかにも、弊社らしくプログラマ向けのストレッチの話など健康にまつわる話題も飛び出す予定なので、ぜひ興味のある話題のときは読んでやってください。

さて、一発目のネタはghqです。

ghqは非golangプログラマ向けにも便利なリポジトリ管理ツール

ghqは、id:motemen さんが開発した、リモートリポジトリを便利にfetchしてきたり管理するためのコマンドラインツールです。ghqのrootディレクトリをGOPATHと同じにしてくと、ghqを利用してcloneしてきたリポジトリはgolangのディレクトリ命名規則に沿った場所に展開されます。そのため、golangを利用した開発を行っているプログラマにとってとても便利なツールです。

そのような背景から、「ghqってgolang向けのツールでしょ」というような「誤解」をたまに目にすることがありますが、ghqは非golang向けのプログラマにも十分に有用なツールです。

ghqのインストール、設定

homebrewでインストールできので、それでインストールしておくと楽です。

$ brew tap motemen/ghq
$ brew install ghq

次に、ghqのrootディレクトリを設定しておきましょう。ghqで管理するリポジトリはここで設定したディレクトリ以下に展開されることになります。わたしはGOPATHが~/devなので、それに合わせて~/dev/srcghq.rootに設定していますが、golang使ってないひとはどこでもかまわないと思います。

$ git config --global ghq.root ~/dev/src

ghqでリポジトリを取得する

$ ghq get <リモートリポジトリのlocation> 

とすることで、そのリポジトリがghq.root以下に展開されます。

たとえば、

$ ghq get git@github.com:rails/rails.git

とすれば、~/dev/github.com/rails/railsにrailsのリポジトリが展開されることになります。

ちなみに、getしてくるリポジトリのlocationはかなり柔軟に解決してくれて、railsの例でいえば

$ ghq get rails/rails

というように指定するだけでも同じく~/dev/github.com/rails/railsに展開してくれます。

ghq管理してるリポジトリに一発で飛ぶ

さて、これだけなら「べつにgit cloneでよくね?深いディレクトリ掘られると逆に面倒じゃね?」という感じになるのですが、ghqはpecoと組み合わせたときにこそ真価を発揮します。

pecoのインストールがなされていない場合、インストールしておきましょう。

$ brew install peco

さて、ここからpecoとghqを組み合わせて便利にする時間です。zshをお使いの場合は、以下のような記述を.zshrcなどにしてみてください。

function peco-ghq-cd () {
    local selected_dir=$(ghq list | peco --query "$LBUFFER")
    if [ -n "$selected_dir" ]; then
        selected_dir="`ghq root`/$selected_dir"
        BUFFER="cd ${selected_dir}"
    fi
    zle clear-screen
}
zle -N peco-ghq-cd
bindkey '^f' peco-ghq-cd

この状態でターミナルを立ち上げなおし、Ctrl+fを押すと、ghq get で取得したリポジトリが一覧でできます。飛びたいリポジトリを選択すると、ターミナル上のバッファにcd <選択したディレクトリのパス>が表示されているはずです。これで、リポジトリ間を移動するときにいちいち ls して cd してみたいなことをせずにすむようになりました!

こうやって記事で書かれてしまうと「なんだかあんまり便利に見えないなあ」なんて思うかもしれませんが、一度ghqのある生活に慣れてしまうともうghqのない生活に戻りたくないくらいに便利なので、ぜひみなさん試してみてください。

参考にしたURL