1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

git commit時に、デバッグ用コードの消し忘れをチェックしたい

Last updated at Posted at 2023-09-01

概要

開発をしていると、個人的なデバッグのためにログ出力用のコードを埋め込むことがあります。
しかし、最終的な成果物としてそれらのコードは入れるべきではありません。

注意深く消し忘れを確認しているつもりでも、人間のチェックでは見落としが発生してしまいます。
そこで、プログラムを書いて自動的にチェックしてもらうことでミスを減らそう!というのが今回の記事の内容です。

やりたいこと

  1. gc “コメント”デバッグ用コードチェックgit commit "コメント"を実行する。
  2. 変更箇所の中にデバッグ用コードがあった場合、そのファイルパスを出力する。
  3. 変更箇所の中にデバッグ用コードがあった場合、コミットを実行するかどうかユーザー入力を待ち受ける。(y or n)

失敗した実装例

この方法では、3のユーザー入力の待受が実現できませんでした。待受が必要ない場合は、この実装方法で問題ありません。

VScodeの場合、.gitディレクトリは非表示になっているので設定を変更して表示させます。
https://techblog.hubbit.io/2020/10/05/visual-studio-code-show-git-folder/

Excludeに記載されている.gitを削除します。

/project-root/.git/hooks/pre-commitに実装(プログラムは後述のものと同様のため割愛します)

実行権限を付与

$ chmod +x .git/hooks/pre-push

うまく実行されない場合は、Gitが古いままのフックスクリプトをキャッシュしている可能性があるので以下のようにキャッシュクリアします。

$ git config --unset core.hooksPath

ただし、これらの方法ではユーザー入力の待受ができないため、他のアプローチを試してみました。

最終的な実現方法

1. ~/script/git-commitファイルを作成する(ファイル名やディレクトリはなんでも可)

#!/bin/sh
comment="$1"
project_root=$(git rev-parse --show-toplevel)

cd $project_root

files_with_log_info=$(git diff --cached --name-only | xargs grep -lE "(log\.Info\(|console\.log\(|litter\.Dump\()" -- $project_root)

if [ -n "$files_with_log_info" ]; then
  echo "Found log.Info() or console.log() or litter.Dump() in the following files:"
  echo "$files_with_log_info"
  read -p "Do you want to continue? (y/n): " response
  case $response in
    [yY])
      git commit -m $comment
      exit 0
      ;;
    *)
      echo "Commit aborted."
      exit 1
      ;;
  esac
fi
echo "Not found log.Info() or console.log(), exec git commit!:"
git commit -m $comment
exit 0

2. 実行権限を付与

$ chmod +x ~/script/git-commit

3. エイリアスを定義

.zshrcに以下を追加(環境によって.bash_profileの場合などもあります)

.zshrc
alias gc='~/script/git-commit'

4. 実行!

デバッグ用コードのチェックができていますね。
今回はyを入力したので、そのままコミットしています。

$ gc "test"
grep: /path/to/project: Is a directory
Found log.Info() or console.log() or litter.Dump() in the following files:
project/src/components/organisms/HogeHoge.vue
project/src/usecase/FugaFuge.go
Do you want to continue? (y/n): y
[pre-push-test 5ab3a0edd] test
 2 files changed, 6 insertions(+), 5 deletions(-)

まとめ

今回は、git commit時にデバッグ用コードの消し忘れをチェックする方法についてまとめました。
ユーザー入力(y or n)の待受が必要ない場合は、git hooksを使うこともできます。
毎度のチェックはプログラムに任せて見落としを防ぎましょう!

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?