git hooks로 커밋 전에 console.log 남아있는지 확인하기

git hooks로 커밋 전에 console.log 남아있는지 확인하기

커밋 전에 console.log() 지워주세요 :innocent:

코드 리뷰를 몇 번이나 받아봤다고 벌써 두 번이나 이런 코멘트를 받았다.
아마 나만 이런 코멘트를 받는 것은 아닐 것이다.
나 같아도 리뷰해야 하는 코드에 이런 부분이 보이면 집어 줄 것 같다.
이대로 운영에 배포 한다고 생각한다면 끔찍하기도 하고 개발 중인 코드에도 console.log()가 있어서 흐름을 파악하는 데에 방해가 되면 되었지 도움이 될 리는 없기 때문이다. 불필요한 console.log()는 최대한 빨리 삭제하고 순수하게 필요한 코드만 남기는 습관을 들여야 한다고 생각한다. 하지만 개발에 집중하면서 커밋하고, 수정하고, 커밋하고를 반복하다보면 console.log()를 삭제해야 한다는 걸 까먹을 때가 생기는 것 같다. 오죽하면 모니터에 포스트잇으로 제발 console.log() 좀 삭제하라고 써서 붙여두었는데, 하루도 못 가서 떨어지더라.
이렇게 편리하고 자동화 된 것이 많은 시절에 console.log()만 온전히 내 기억력이나 조심성에 의존해서 제거해야 하는 것일까?

알아서 console.log()를 삭제해주는 툴은 없을까?

분명 나 말고도 수 많은 사람들이 비슷한 고민을 하고 머리 좋은 사람들이 좋은 걸 만들어두었을 거라는 생각이 들었다. 찾아보니 정말로 있었다, 자동으로 console.log()를 삭제해주는 플러그인이.

하지만 이건 dev가 아니라 실제 배포를 할 때 적용하는 거였기 때문에 내가 찾는 것과는 달랐다.
처음에는 vscode 익스텐션, 혹은 자바스크립트 내장 기능으로 검색했다. 그런데 생각해보니 내가 진짜 원하는 건 console.log() 를 ‘삭제’하는 것이 아니라 ‘커밋 전에’ console.log()를 삭제하는 것이었다. git 과 연관하여 console.log() 삭제에 대해 검색하니 바로 내가 원하는 것이 나왔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
# Redirect output to stderr.
exec 1>&2
# enable user input
exec < /dev/tty

consoleRegexp='^[^-].*console.log'
filenameRegexp='^[^-].*console.log(\|^+++'

if test "$(git diff --cached | grep -c "$consoleRegexp")" != 0
then
exec git diff --cached | grep -ne "$filenameRegexp" | grep -B 1 "$consoleRegexp"
read -rp "There are some occurrences of console.log at your modification. Are you sure want to continue? (y/n) " yn
if echo "$yn" | grep "^[Yy]$"
then
exit 0; #THE USER WANTS TO CONTINUE
else
exit 1; # THE USER DONT WANT TO CONTINUE SO ROLLBACK
fi
fi
출처 GitHub Gist

위 코드를 .git/hooks/pre-commit 파일에 추가하면 변경사항에 console.log()가 있는 경우 커밋하려고 할 때 알려준다.

이때 n를 선택하면 커밋이 취소된다. 파일명까지 알려주니 수정하기 편할 것 같다.
(만약 pre-commit 파일의 이름이 pre-commit.sample 이라면 .sample을 없애야 적용된다)

이제 쓸데없는 코드를 깃에 올리지 않을 수 있을 것 같다.

git hooks로 커밋 전에 console.log 남아있는지 확인하기

https://tomas1876.github.io/git-hook-delete-console-log/

Author

Kahee

Posted on

2022-11-21

Updated on

2022-11-22

Licensed under

Comments