Git hooksのpre-commitで正誤表のテキストを元に自動チェックする方法

Git hooksとは

Gitに特定のアクションが発生した時にスクリプトを実行する仕組み。

例えばコミットをするときにテキストをチェックして禁止用語が含まれている場合はコミットしないことが可能になる。

スプレッドシートで正誤表を作る

まず最初にスプレッドシートで正誤表を作る。

例: ガンダム用語正誤表

作成したら2行目以降をコピーして、~/に.git_words_checkというファイルを作成してペーストして保存する。

.git_words_checkファイルの内容(タブで区切られている)

ゲルルグ	ゲルググ
ハンムラビ	ハンブラビ
クシャトリア	クシャトリヤ

pre-commitファイルの作成

次にコミットが発生した時に実行されるスクリプトを作成する。

.git/hooks/ にある pre-commit.sample のファイル名を pre-commit にリネームして、下記のスクリプトに書き換える。

#!/bin/sh

if [ $? -eq 0 ]; then
  if [ -e ~/.git_words_check ]; then
    while read word; do
      word_a=( `echo ${word} | tr -s '\t' ' '`)
      echo ${word_a[0]} | grep ^# > /dev/null && continue
      echo ${word_a[0]} | grep '^\s*$' > /dev/null && continue
      git diff --cached -U0 | grep -i "${word_a[0]}" > /dev/null
      if [ $? -eq 0 ]; then
        echo "禁止文字が含まれています。 ☓ ${word_a[0]} ○ ${word_a[1]}" >&2
        exit 1
      fi
    done < ~/.git_words_check
  fi
fi

以上でコミットしたときに禁止文字が含まれていた場合はコミット時に表示され、修正されるまでコミットされなくなる。

<!-- index.html 例 -->
<html>
<body>
<p>ゲルルグのプラモを買った</p>
</body>
</html>
$ git add index.html
modified:   index.html
$ git commit -m "Add text"
禁止文字が含まれています。 ☓ ゲルルグ ○ ゲルググ
カテゴリーgit