2020年1月に Leanpub で出版された「ghq handbook」を読んだ.本書は Leanpub で $4.99
から購入できる.
リポジトリ管理を楽にするコマンドラインツール ghq 自体は前から知っていたけど,今までの運用(特定のディレクトリ直下にひたすら git clone
する)で特に困ってなく,導入していなかった.本書を読みながら,今までの運用を全て ghq に移行して,今ではとにかく最高だし,もはや導入していなかった自分を悔やむ.特に ghq と peco を組み合わせた体験は本当に素晴らしい!
目次
本書は ghq の導入から活用まで網羅的に紹介されている.計24ページとなり,読むだけならすぐだし,実際に導入しながら読んでも2時間あれば終わる.個人的には導入しながら読むのが1番効果的だと思う.
- イントロダクション
- 基本的な使い方
- リポジトリ取得ディレクトリの設定 (ghq root)
- リポジトリを取得する (ghq get)
- ローカルリポジトリの一覧・パス取得をおこなう (ghq list)
- ローカルリポジトリを作成する (ghq create)
- リポジトリを一括取得のレシピ集 (STDIN | ghq get)
- ghq のこれから
インストール
今回は brew
でインストールした.最新バージョン v1.1.0
を使う.
$ brew install ghq $ ghq --version ghq version 1.1.0 (rev:057e0ff)
ghq に入門する
まず,ghq の基本的なコマンドとして ghq get
と ghq list
と ghq root
を試す.Go を実装するときは ${GOPATH}
を考慮する必要があり,git-config を使った ghq root
のカスタマイズも本書に載っている.
$ ghq get x-motemen/ghq
$ ghq list
github.com/rails/rails
github.com/x-motemen/ghq
github.com/kakakakakku/mysql-beginner-hands-on
github.com/kakakakakku/redash-hands-on
github.com/kakakakakku/sandbox-envoy-circuit-breakers
github.com/kakakakakku/sandbox-envoy-request-id
(省略)
$ ghq list --full-path
/Users/kakakakakku/ghq/github.com/rails/rails
/Users/kakakakakku/ghq/github.com/x-motemen/ghq
/Users/kakakakakku/ghq/github.com/kakakakakku/mysql-beginner-hands-on
/Users/kakakakakku/ghq/github.com/kakakakakku/redash-hands-on
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-envoy-circuit-breakers
/Users/kakakakakku/ghq/github.com/kakakakakku/sandbox-envoy-request-id
(省略)
$ ghq root
/Users/kakakakakku/ghq
ghq get
ghq get
はデフォルトだと HTTPS URL で git clone
をする.もし SSH URL を使う場合は,例えば ghq get -p
のように -p
オプションを使える.ただし,本書にも書いてある通り,ghq 側で制御するのではなく,Git 側で制御するのが良さそう.そのために git-config の設定 url.<base>.insteadOf
もしくは url.<base>.pushInsteadOf
を使う.詳しくは先週の記事に書いておいた!
また ghq get
には「オーナー検出」の機能があり,自分のリポジトリならリポジトリ名だけを指定すれば使える.実際に kakakakakku/redash-hands-on
ではなく redash-hands-on
と指定しても使えた.これは便利!
$ ghq get redash-hands-on clone https://github.com/kakakakakku/redash-hands-on -> /Users/kakakakakku/ghq/github.com/kakakakakku/redash-hands-on git clone --recursive https://github.com/kakakakakku/redash-hands-on /Users/kakakakakku/ghq/github.com/kakakakakku/redash-hands-on
他にも --shallow
や --update
や --branch
など,使うことになりそうなオプションもあり,覚えておく.
ghq list
+ peco
ghq list
は peco と組み合わせると最高の体験になる.peco は今までもずっと愛用してきたため,今回は ghq の peco 対応を追加し,今のところは ^g
にバインドした.シュッとリポジトリを検索して cd
できるようになった.
QUERY> hands-on github.com/kakakakakku/elasticsearch-hands-on github.com/kakakakakku/mysql-beginner-hands-on github.com/kakakakakku/redash-hands-on github.com/kakakakakku/docker-hands-on
一括アップデート
本書の最後には「レシピ集」があり,ghq の基本的なコマンドを活用した Tips が載っている.個人的には「標準出力からリストを受け取れる仕組み」と「--parallel
オプション」を組み合わせた「一括アップデート」をよく使いそう.全リポジトリだと流石に多すぎるため,例えば以下のように ghq list
である程度フィルタリングしてから ghq get --update --parallel
に流せる.便利!
$ ghq list hands-on | ghq get --update --parallel update /Users/kakakakakku/ghq/github.com/kakakakakku/docker-hands-on update /Users/kakakakakku/ghq/github.com/kakakakakku/elasticsearch-hands-on update /Users/kakakakakku/ghq/github.com/kakakakakku/mysql-beginner-hands-on update /Users/kakakakakku/ghq/github.com/kakakakakku/redash-hands-on
まとめ
「ghq handbook」を読みながら ghq を導入した.ghq はとにかく最高だし,もはや導入していなかった自分を悔やむ.本書は導入から活用まで網羅的に紹介されているため,まず購入してみると良いと思う.また本書は GitHub で管理されているため「実は購入せずに」読める.プルリクエストも送れる.個人的には OSS を応援する気持ちと ghq への感謝の気持ちを込めて Leanpub で購入すると良いと思う.感謝!
誤植など
本書を読んでいて,気になる誤植や表現があったけど,GitHub を見ると既に修正されていた.今回は 2020-01-05
に出版されたバージョンを読んでいるけど,定期的にリリースしてもらえると良さそう.他に気になった点を箇条書きにしておく.
- リポジトリ URL は現在は
https://github.com/x-motemen/ghq
に変更されている 本書
や本文書
やこの文書
など,表記揺れが出ている普段遣い
→普段使い