2019-05-12

「NOCOMMIT」アノテーションを活用してコミットミスを減らす

TODOFIXME などのアノテーションコメント(もしくはコメントタグ)はみんなよく使ってると思いますが、自分は NOCOMMIT というものも使用します。

意味は単純で、コミットするべきでないデバッグ用のコードなどの行に書いておきます。

var SecretToken = "HARD_CODED" // NOCOMMIT

TODO でも良いのですが、 TODO を単にデバッグ用の行などに付けると意図が伝わりづらい感覚があります。 TODO とだけ書いてあっても一瞬「なにをすべきなんだっけ?」となりますし、ちょっと頑張って TODO: delete って書いてあったとしても「何かを削除する処理を足さなければならないんだっけ?」と誤解する可能性があります(TODO: delete this line なら完璧ですが)。なので自分は NOCOMMIT のほうが性にあっていました。

これをコミット時に感知するGit HooksGit Templateに追加しておけば、以降 clone/init するリポジトリに関してはいい感じになってくれます。

~/.config/git/templates/hooks/pre-commit:

#!/usr/bin/env bash

if git diff --staged | grep NOCOMMIT >&2; then
    echo "The diff has NOCOMMIT line." >&2
    exit 1
fi

~/.config/git/config:

+[init]
+       templatedir = ~/.config/git/templates

余談ですが最近よく go.mod の replace ディレクティブに使っています。

require (
	...
	github.com/acomagu/hoge v0.3.0
)

replace github.com/acomagu/hoge => /home/yuki/.local/src/github.com/acomagu/hoge // NOCOMMIT