typoしてますか?
私はしょっちゅうしてます。confitions
とかenalbe
とか。
デバッグしていて動かない原因がtypoだったときのくやしさといったら... typoを含んだコミットをプッシュしてしまったときの恥ずかしさといったら...
そんな悲しい思いをする機会を減らす方法を紹介します。
pre-commitフックを活用しよう
typoするときって大抵同じ間違いを繰り返してしまいませんか? 私の場合は冒頭のconfitions
とかenalbe
をしょっちゅうやってしまいます。そのような文字列をGitのpre-commitフックを使ってコミットする直前にファイルに中に含まれていないかをチェックさせます。
.git/hooks/pre-commitの設定
Gitリポジトリをクローンしたディレクトリ以下に.git/hooks/pre-commit
というスクリプトファイルを作成して実行権を付けておくと、コミットする直前に実行してくれます。このスクリプトがステータス0で終了したらコミットOK、ステータス0以外で終了したらコミットNGとなります。
.git/hooks/pre-commit
がなかった場合は、.git/hooks/pre-commit.sample
をコピーしましょう。そして、下記を追記してください。
...
allow_typo_error=$(git config hooks.allowtypoerror)
typo_regexp=$(git config hooks.typoregexp)
if [ "$allow_typo_error" != "true" -a -n "$typo_regexp" ]
then
for FILE in $(git diff-index --name-status --cached $against -- | cut -c3-) ; do
has_typo_error=$(egrep --color=always -na $typo_regexp $FILE)
if [ $? -eq 0 ]; then
echo
echo
echo "Typo has detected in $FILE"
echo "$has_typo_error"
echo
echo "If you know what you are doing you can disable this check using:"
echo
echo " git config hooks.allowtypoerror true"
echo
exit 1
fi
done
fi
使い方
いつも自分が間違えてしまう文字列を下記のコマンドを実行して登録しておきます。スクリプト中ではegrep
を使っていますので正規表現を利用可能です。
$ git config hooks.typoregexp "enalbe|confition|tackel|mesage|isntall|lamdba|unlick|unkown"
- 2016/09/16 typoリスト追加 (T_T
- 2017/06/09 typoリスト追加 (うんこぅん)
あとは普通にコミットするだけ。
コミットしようとするファイルに登録した文字列が含まれていた場合、下記のような警告が表示されコミットが中止されます。
なんらかの理由で一時的にtypoチェックを無効にして強制的にコミットしたい場合は、下記のコマンドを実行してください。(ブランチマージをしようとしていてtypoチェックに引っ掛かった場合など。明らかに間違いだとわかりますが一旦マージはそのまま終わらせて、そのあと改めて修正コミットをいれるとよいでしょう。)
$ git config hooks.allowtypoerror true
おわりに
Gitのpre-commitフックを利用して、typoチェックをする方法を紹介しました。
この方法は、私自身が何度も何度も同じ間違いを繰り返してしまっており、ヒドイ時には検証工程までいってからの戻りにもなってしまっていたため、再発防止策として導入しました。
test - エンジニアなら知っておきたい障害報告&再発防止策の考え方 - Qiita ← こちらの記事によれば、良い再発防止策には下記のものがあるそうです。
- その種類の問題について二度と意識することがなくなる解決策
- その種類の問題を開発時に自動的に検知することができる解決策
- その種類の問題が発生しても自動的に復旧することができる解決策
- その種類の問題が発生しても影響が局所化される、フールプルーフ、フェールセーフになる解決策
今回の方法は2つ目の「問題を自動的に検知」に該当します。常にtypoしないようにと気を張り続けるのではなく、typoしたってちゃんと検知できるからいいんだ!と思うと少しだけ普段の作業効率が上がったような気がします。(ほんとにちょっとだけね。)
一度でもtypoをしてしまった場合は、その文字列を随時登録するようにして、二度と同じ間違いをしないようにしましょう。