커밋 컨벤션! 어떤 커밋이 어떤 것을 진행했는지 쉽게 알아보기 위해
팀 내에서 컨벤션을 정해놓는 경우가 많다.
그러나, 컨벤션을 지키지 않은 경우에 이를 알려주거나 수정해줄 방법이 없다.
husky
와commitlint
를 활용하여 커밋 컨벤션을 강제로 지키도록 하는 것을 알아보자!
필자는 패키지 매니저로 yarn
을 사용했다!
husky
@commitlint/config-conventional
@commitlint/cli
yarn add -D husky @commitlint/config-conventional @commitlint/cli
여기서 잠깐! 정확히 알고 가자.
husky
는 커밋 컨벤션을 잡아주는게 아니다.git hook
을 쉽게 다룰 수 있게 해주는 도구이다.
커밋 컨벤션을 직접적으로 제한하는 것은commitlint
이다.
husky
로git commit
단계에서commitlint
가 커밋 컨벤션을 검사하도록 설정하는 것이다.
라이브러리의 목적을 헷갈리지 않도록 주의하자!
우선, husky
세팅을 위한 보일러 플레이트를 생성한다.
Husky 공식 문서에 따르면, yarn
을 사용할 때는 husky init
을 사용하지 않고,
수동으로 준비를 해줘야 한다.
우선, 스크립트를 추가해주도록 하자.
postinstall
스크립트를 다음과 같이 추가해주도록 하자.
{
// ... //
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"postinstall": "husky"
},
// ... //
}
yarn run postinstall
프로젝트 루트 디렉토리에 .husky
폴더가 생성된 것이 확인된다면 OK!
husky
는 결국 git hook
을 쉽게 다루기 위한 도구이므로,
git hook
의 어떤 단계를 트리거로 할지 설정해줘야한다.
커밋 컨벤션을 체크하는 것이 목표이므로, commit-msg
을 트리거로 하도록 하자.
.husky
에 commit-msg
파일을 생성하고 다음과 같은 코드를 작성하자.(.husky/_
가 아니다!)
#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh"
yarn commitlint --edit $1
이제 커밋 메세지에 대해 위 코드가 실행될 것이다.
husky
를 통해 commit-msg
를 체크하도록 했는데,
어떤 것을 체크할지는 아직 정하지 않았다.
이번에 그 것을 정해주도록 해보자!
루트 디렉토리에 commitlintrc.json
파일을 생성하자.
그리고 다음과 같은 코드를 입력한다.
{
"extends": ["@commitlint/config-conventional"],
"rules": {
"type-enum": [
2,
"always",
[
"ci",
"chore",
"docs",
"ticket",
"feat",
"fix",
"perf",
"refactor",
"revert",
"style"
]
]
}
}
설정해놓은 컨벤션에 맞지 않는 메세지를 작성하는 경우,
에러가 발생하면서 커밋이 취소되는 것을 확인 할 수 있다!!