【Git】typoを自動的に検出してコミットを防ぐ方法


「よし、完璧だ!」とコミットした後やPRで指摘されてtypoに気づき、fix: typoコミットするのはできるだけ避けたいです。
レビューする側にとってもtypoに意識を向けながらレビューをするのは負担になります。貴重な時間はもっと大事な確認と指摘に使いたいものです。

今回は、そんなtypoを自動的に検出してコミットを防ぐ方法を紹介します。

“悲しいfix: typoコミット”

できるようになること

コミット時に変更ファイルのtypoを自動的に検出し、typoがあった場合はtypo箇所と修正のヒントを出力してコミットを防ぎます。typoがない場合はコミットは成功します。

設定方法

typoの検出

typoの検出にはRust製のtyposを採用しました。

macの場合のインストール手順を記載します。

shell
# rustのインストール
brew install rust

# typosのインストール
cargo install typos-cli

# バージョンが出力されればOK
typos --version

※ GitHubからバイナリをダウンロードして利用する方法もあります。

コミット時に自動的にtypoを検出する

Git Hooksを利用することで実現しています。

利用したいリポジトリの.git/hooks/pre-commitを編集してください。

.git/hooks/pre-commit
#!/bin/sh

# 変更差分をチェックしたい場合
# git diff --cached --diff-filter=AM | typos -
# 変更ファイルをチェックしたい場合
git diff --cached --name-only --diff-filter=AM | xargs typos

# typoがある場合にコミットを防ぐ
if [[ $? -ne 0 ]]; then
  exit 1
fi

.git/hooks/pre-commitに実行権限がない場合は権限を付与してください。

shell
# 実行権限の付与
chmod +x .git/hooks/pre-commit

動作方法

設定が終わったリポジトリでコミットすると自動的に動作します。

これでtypoを含んだコミットを自動的に防ぐことができ、fix: typoコミットすることはなくなります。

最後に

この記事を読んで「面白かった」「学びがあった」と思っていただけた方、よろしければ Twitter や facebook、はてなブックマークにてコメントをお願いします!
また DeNA 公式 Twitter アカウント @DeNAxTech では、 Blog記事だけでなく色々な勉強会での登壇資料も発信してます。ぜひフォローして下さい!
Follow @DeNAxTech