kakakakakku blog

Weekly Tech Blog : Keep on Learning 👍

「ghq handbook」を読んで ghq を使った最高のリポジトリ管理を体験しよう

2020年1月に Leanpub で出版された「ghq handbook」を読んだ.本書は Leanpub で $4.99 から購入できる.

leanpub.com

リポジトリ管理を楽にするコマンドラインツール ghq 自体は前から知っていたけど,今までの運用(特定のディレクトリ直下にひたすら git clone する)で特に困ってなく,導入していなかった.本書を読みながら,今までの運用を全て ghq に移行して,今ではとにかく最高だし,もはや導入していなかった自分を悔やむ.特に ghqpeco を組み合わせた体験は本当に素晴らしい!

github.com

目次

本書は 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 getghq listghq 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 URLgit clone をする.もし SSH URL を使う場合は,例えば ghq get -p のように -p オプションを使える.ただし,本書にも書いてある通り,ghq 側で制御するのではなく,Git 側で制御するのが良さそう.そのために git-config の設定 url.<base>.insteadOf もしくは url.<base>.pushInsteadOf を使う.詳しくは先週の記事に書いておいた!

kakakakakku.hatenablog.com

また 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 listpeco と組み合わせると最高の体験になる.peco は今までもずっと愛用してきたため,今回は ghqpeco 対応を追加し,今のところは ^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.com

誤植など

本書を読んでいて,気になる誤植や表現があったけど,GitHub を見ると既に修正されていた.今回は 2020-01-05 に出版されたバージョンを読んでいるけど,定期的にリリースしてもらえると良さそう.他に気になった点を箇条書きにしておく.

  • リポジトリ URL は現在は https://github.com/x-motemen/ghq に変更されている
  • 本書本文書この文書 など,表記揺れが出ている
  • 普段遣い普段使い