0
0

背景

githooksをチーム開発でも活かせないか試してみました

Githooks

githook はサンプルコードが存在します

gitを使ったプロジェクト内の .git/hooks にファイルが配置されています

❯ ls -alh .git/hooks
total 128
drwxr-xr-x  16 ※**  ※**   512B Jul  9 09:36 .
drwxr-xr-x  12 ※**  ※**   384B Jul  9 09:45 ..
-rwxr-xr-x   1 ※**  ※**   478B Jul  9 09:36 applypatch-msg.sample
-rwxr-xr-x   1 ※**  ※**   896B Jul  9 09:36 commit-msg.sample
-rwxr-xr-x   1 ※**  ※**   4.6K Jul  9 09:36 fsmonitor-watchman.sample
-rwxr-xr-x   1 ※**  ※**   189B Jul  9 09:36 post-update.sample
-rwxr-xr-x   1 ※**  ※**   424B Jul  9 09:36 pre-applypatch.sample
-rwxr-xr-x   1 ※**  ※**   1.6K Jul  9 09:36 pre-commit.sample
-rwxr-xr-x   1 ※**  ※**   416B Jul  9 09:36 pre-merge-commit.sample
-rwxr-xr-x   1 ※**  ※**   1.3K Jul  9 09:36 pre-push.sample
-rwxr-xr-x   1 ※**  ※**   4.8K Jul  9 09:36 pre-rebase.sample
-rwxr-xr-x   1 ※**  ※**   544B Jul  9 09:36 pre-receive.sample
-rwxr-xr-x   1 ※**  ※**   1.5K Jul  9 09:36 prepare-commit-msg.sample
-rwxr-xr-x   1 ※**  ※**   2.7K Jul  9 09:36 push-to-checkout.sample
-rwxr-xr-x   1 ※**  ※**   2.3K Jul  9 09:36 sendemail-validate.sample
-rwxr-xr-x   1 ※**  ※**   3.6K Jul  9 09:36 update.sample

今回は commit する前と push する前に利用するので pre-commit.samplepre-push.sample を利用します。

利用するためには名前から .sample をtrim すればOKです

mv .git/hooks/pre-commit.sample .git/hooks/pre-commit
mv .git/hooks/pre-push.sample .git/hooks/pre-push

あとは必要に応じて実行権限を与えてあげれば使えるようになります

chmod +x .git/hooks/pre-commit
chmod +x .git/hooks/pre-push

pre-commitpre-push も中身はシェルスクリプトなので、あとは用途に応じてシェルを組んであげてください(AIあたりに生成させてあげると楽かも)

本題

さて上記の手順だと、チーム開発に活かそうと考えた場合、README.mdに上記の手順とhooksで利用するソースコードを記載してあげる必要がありドキュメントの保守コストやメンバーの参入障壁が上昇してしまいます

そこで今回は以下のように symboliclink を駆使してgithooksを導入できる形を検討してみました

まず、hooksを git add の対象に入れるため適当なディレクトリに配置します

私はわかりやすいように .github/hooks という名前のディレクトリを作成してそこに配置しています

mkdir -p .github/hooks
cp .git/hooks/pre-commit .github/hooks/pre-commit
cp .git/hooks/pre-push .github/hooks/pre-push

これでgit addの対象になりました

続いてメンバー参入時などを想定したレポジトリをcloneする場合について説明します

git cloneしただけだと .github/hooks にファイルが配置されているためgithooksが動きません

そこで symboliclink を用います

# set git hook
ln -s .github/hooks/pre-commit .git/hooks/pre-commit
ln -s .github/hooks/pre-push .git/hooks/pre-push

# 併せて権限も設定
chmod +x .git/hooks/pre-commit
chmod +x .git/hooks/pre-push

これで完成です

これならREADME.mdへの記述はコピペで終わるコマンドでまとめつつチーム開発にも利用できる形となったかと思います

IDEやテキストエディターを用いないユーザーやそもそもそういったツールを使いこなせていないユーザーに対して、コード保存時にlinterやformatterを実行させるということは中々にハードルが高いものかと思います

そこで、このようなCIはとても役立つと思うのでぜひ参考にしてみてください

余談

githooks, 個人的には個人開発でのCIにちょうどいいかなと思ったり

その他の候補

Github Actions

チーム開発ならやっぱりこちらを推奨します

なんといっても参入者が何もしなくて良いのが大きい

ただ、個人開発ならやりすぎ感が否めないかも

husky

npm パッケージを駆使して開発するならhuskyで良いかも

※ npm パッケージが必須となります

サンプル

githooks で commit時に eslint, prettierを、push時に commitlint を動かしていた時のコードのリンクを貼っておきます
(今はGithub Actionsの練習のため移行してしまった)

hooks
https://github.com/aecomet/aecomet.github.io/tree/b48d1ec0c3983cacec7177e8ec009946ebfd00e9/.github/hooks

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0