My External Storage

Jan 11, 2020 - 5 minute read - Comments - review

[書評] ghq handbookを読んでghqコマンドに再入門する

ローカルでソースコードを効率よく管理するためのツールとして、ghqコマンドがある。
そのghqコマンドの使い方をメンテナの@songmuさんが執筆したghq handbookを読んだので感想をまとめる。

所感

コンパクトで大変わかりやすい一冊だった。私は少なくても3年以上ghqを使っている。 すでにghqコマンドを利用している人も、初めて使う人もぜひ読んでおくべき1冊だ。手を動かさなければボリューム的には30分もかからず読み終わるだろう。
やりたいことベースで節が書かれているので、さっと気になるところから読めるのもよかった。
「どんなことをしたいのか?(例:会社のリポジトリは別の場所でディレクトリで管理したい etc)」を思い浮かべながら目次をたどれば読むべきページががわかるだろう。
私はあまり英語が得意でなかったり、zshrcをうまく書けないので、pecofzfのようなfuzzy finderとの連携のベストな設定などを知れてよかった。

どんな本なのか

ghqコマンドというのは、GitHubなどのVCSサイトからのリポジトリの取得と、ローカルPC内のリポジトリ管理を劇的にラクにしてくれるツールだ。
私は、Go以外のリポジトリも全てghqコマンドで管理している。いちいちディレクトリ構造を頭に浮かべながらcdコマンドで移動することはなくなった。

ghqコマンドのv1.0.0バージョンリリースに合わせて、メンテナの@songmuさんが使い方をまとめてくださったのが本書だ。

ghq handbookはleanpub.comというサイトから購入することもできるし、GitHub上でMarkdownを読むこともできる。

なぜ読もうと思ったのか

私は今までなんとなくghq getコマンドとghq list + peco連携を使っていたので、改めてちゃんとした使い方を知るために読んだ。
私にとってghqコマンドは、jqrgpeco/fzfコマンドと並んで無くてはならないコマンドラインツールだったので日々の感謝の気持ちを込めてleanpub.comで購入させてもらった。

余談だが、初めてleanpubを使ってみたがsend to kindle(iPadなどのKindleアプリに電子書籍を送信する)がサイト上からワンクリックで簡単に出来たり、なかなか良かった。
(Amazon上で予めleanpubからのメール受信を許可しておくのと、メルアドを登録したから少し時間が必要)

読んでわかったこと

さっそく本を購入するにあたって最新のghqコマンドにした。 macOSならばbrew upgrade ghqコマンドで簡単にバージョンアップが可能だ。

複数root設定時のzhqコマンドとpecoコマンドの連携方法

まず、zshでいい感じのpecoコマンドとの連携設定を知ることが出来たのがよかった。
最近仕事用と私用のディレクトリ(ghq root)を分けてghqコマンドを使おうと思っていたのだが、うまく設定できていなかった。 本書で無事解決することが出来た。
さっそく自分のdotfilesのghq関連の設定を更新した。

function peco-src () {
    local repo=$(ghq list | peco --query "$LBUFFER" --initial-filter=Fuzzy)
    if [ -n "$repo" ]; then
        repo=$(ghq list --full-path --exact $repo)
        BUFFER="cd ${repo}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-src
bindkey '^]' peco-src

ghq look(ghq get –look)コマンドの誤った使い方

本を読むまで、「lookコマンドはシェルを改めて起動するから嫌な感じだなあ」と思っていたのだが、単にユースケースを間違えていただけだった(今までghq lookコマンドを使った間違ったディレクトリ移動方法を使っていただけだった)。なお、v1バージョンのghqコマンドではghq lookコマンドは廃止されている。
v1ではghq get --lookコマンドのみになっているので、ghq lookコマンドを使った誤った移動をrcファイルに記載している人は動かなくなっているだろう。

その他でも、自分のリポジトリを取得するとき(会社のPCで取得するなど、意外と頻度がある)、ownername(username)を省略できるのは知らなかった。 また、レシピ集としてワンライナーや他のツールと組合わせた例も提案されていた。これをヒントに自分でも応用した使い方を考えられそうだった。

今後どう活かすのか

ghqコマンドを最新にして、zshrcファイルも整理したので、前よりもさらにソースコードリーディングや開発がラクになった。
2020年はもっとコーディングしていくぞ。

ちなみに、@songmuさんはご自分のブログでもよくghqコマンドのtipsをまとめてられているので、そちらも読んでみるとよいだろう。

参考

関連記事