LoginSignup
22
16

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

Last updated at Posted at 2021-12-04

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

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

できるようになること

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

設定方法

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

2022/07/19 追記

この記事の拡張版として、typoをなくす理由と方法について、以下の記事を書きました。
「なぜtypo(スペルミス)がいけないのか?」「typoを仕組みでなくす3つの方法(実装、コミット、プルリクエスト)」について記載しています。

合わせてぜひご覧ください。

2023/06/21 追記

この記事の最終版として、以下の記事を書きました。

検知の仕組みをCSpellに変更しました。
エディタの拡張機能による開発時のチェック、Git HooksによるCommit時のチェック、GitHub ActionsによるPush時(PR上)のチェックの全てをCSpellで統一しているので、共通の設定が利用でき、同じ検知内容となります。
また、導入が楽になるようにしました。

合わせてぜひご覧ください。

22
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
16