Go言語のプログラムをgithubなどにpushする前に必要なことは?
Go言語のプログラムを編集した後、git pushする前にやっておかないといけないのが、go fmtとgo vetですね。正直、私も毎回忘れてしまうんですね。ということで、gitのpre-commitフックを使って、commit前に自動的にやってくれるようにしてみました。
今回のコード
.git/hooks/pre-commit
#!/bin/sh
DIR="<your golang project path>"
PKG=("controller" "model" "body")
ret=0
for name in ${PKG[@]}
do
goapp fmt ${DIR}/${name}
ret=$?
if [ $ret != 0 ]
then
exit $ret
fi
goapp vet ${DIR}/${name}
ret=$?
if [ $ret != 0 ]
then
exit $ret
fi
done
exit $ret
ソースコードは、goappコマンドを使っていますので、GAE/Goのプロジェクトで利用していますが、goのプロジェクトの時は、goコマンドに変更すれば問題なく利用できます。
忘れないように!
私はずっと忘れていました。実行権限をつけることを…。
コマンド
chmod +x .git/hooks/pre-commit
実行権限がないと実行しないようなので、ちょっと残念でした。
(権限チェックとかしてくれないんだろうか…)
導入後
かなり便利になりました。見落としていた所をWarningをだしてくれるので、全て修正してからcommitをすることができるようになりました。
これで、コードの書き方とかで問題が出ることは無くなりそうです(?)
問題点
- 毎回、.git/hooks/pre-commitを作らないといけないこと。これはしかたがないかな…?
- go fmtもgo vetもビルド可能なgoファイルがないと実行できないので、パッケージ(ディレクトリ名)を列挙しないといけない。ちょっと面倒かも?
- チーム開発になったら、全員に配布されるんだろうか…?
Disclaimer
- この記事は個人的なものです。私の雇用者とは全く関係はありません。(一応つけておきます)