この記事では、私が仕事やOSSプロジェクトをセットアップする際にやっていることを紹介します。主にgit hook の設定や作業メモの作成のtipsなどです。この記事を読まれる方にとっては今更な知識が多いですが、自分のためにもまとめておきます。
ghqでリポジトリをcloneする
gitプロジェクトは基本的にghqでcloneします。ghqはリポジトリを特定のディレクトリ以下にcloneしてくれるツールです。リポジトリの管理がしやすくなるのでおすすめです。
ghqでリポジトリを管理する一番の恩恵は、なんといってもpeco等のインクリメンタルサーチが可能になるツールと組み合わせて、リポジトリ移動が便利になることです。
ghq + インクリメンタルサーチツールを使ったリポジトリ管理の記事はいくらでもあるので、詳しい説明はそちらに譲ります。
lefthookを使ったgit hookの設定
大体の場合、仕事やOSSのプロジェクトにはCIが設定されています。十分なのですが、個人的にリモートに上げてからCIがコケると面倒に感じるので、基本的にLintやテストはリモートにプッシュする前にチェックします。
ですが人間なので、ついつい忘れてしまうこともあります。そのため、git hookを使ってチェックするようにしています。
git hookは、gitのコマンドを実行する際に自動で実行されるスクリプトです。pre-commit
やpre-push
などがあります。私は主にpre-pushを使っています。一時期はpre-commitも使っていましたが、作業効率が落ちると感じたのでやめました。
git hookの設定には、lefthookを使っています。lefthookは、git hookの設定を簡単にしてくれるツールです。
以前はhuskyとlint-stagedを組み合わせて使っていたのですが、ツールが2つ必要かつ依存関係が多い1ことと、huskyはNode.jsが必要になるのが面倒に感じ、Go製のlefthookに乗り換えました。
lefthookはプロジェクト配下でlefthook install
をするとボイラープレートが生成されるので、あとは.lefthook.yml
にhookの設定を書くだけなのですが。自分は運用にいくつかの味付けをしています。
lefthook設定ファイルををgitignore globalにする
基本的にgit hookはgit管理下になりませんが、設定ファイルのlefthook.yml
(例)はプロジェクト配下に置かれます。huskyにも同じ問題を抱えていますが、個人的に使用しているツールの設定ファイルがgit管理されたくない問題があります。
まだ自分のプロジェクトなら問題ありませんが、複数人が携わる仕事のプロジェクトに導入するモチベも特にないですし、OSSでは論外です。.gitignoreに記述するにも気が引けます。
そこで、~/.config/git/ignore
にlefthook.yml
を追加し、git管理下に設定ファイルが入らないようにしています。
少し本末転倒感があり、git hookマネージャを使わずgit hookに手作業でスクリプトを追加した方が良いのではないかと思うかもしれません。
ただ、lefthookは実行時に適切なファイルに置き換えられるファイルテンプレート機能2(たとえば{push_files}
という変数を使うことで、コミットされたがpush前のファイルのみを対象にチェックできる)をはじめ、便利な機能があるのでこういった運用をしています。
あとは、lefthook.yml
のコマンドのプレフィックスを数字にして、実行順を制御するくらいでしょうか。
おわりに
個人的にやっているgitプロジェクトのセットアップ方法を紹介しました。ここで紹介したツールは全てGoで書かれています。シングルバイナリを吐き出してくれるというのと、Goで書かれているので、いざなにか問題があったときに自分で修正できるというのが理由です。