효율적인 commit message 작성을 위한 conventional commits

안녕하세요 휴먼스케이프 개발자 Jake 입니다.
프로젝트를 효율적으로 관리하기 위한 방법들은 여러가지가 있습니다.
그중에서도 소스코드 형상관리 프로그램( ex: git )은 필수라고 생각하는데요. 소스코드 형상관리 시스템 사용시에 commit message를 어떻게 적어야 할까 한번쯤은 고민 해보셨을 겁니다.
오늘은 commit message를 보다 명확하게 작업단위를 구분할 수 있도록 도와주는 conventional commits 에 대해 알아보도록 하겠습니다.
conventional commits 작성을 위한 commit message구조와 구성요소 는 아래와 같습니다.
구조
<타입>[적용 범위(선택 사항)]: <설명>
[본문(선택 사항)]
[꼬리말(선택 사항)]
구성요소(<타입>, 본문, 꼬리말)
build: 시스템 또는 외부 종속성에 영향을 미치는 변경사항 (npm, gulp, yarn 레벨)
ci: ci구성파일 및 스크립트 변경
chore: 패키지 매니저 설정할 경우, 코드 수정 없이 설정을 변경
docs: documentation 변경
feat: 새로운 기능
fix: 버그 수정
perf: 성능 개선
refactor: 버그를 수정하거나 기능을 추가하지 않는 코드 변경, 리팩토링
style: 코드 의미에 영향을 주지 않는 변경사항 ( white space, formatting, colons )
test: 누락된 테스트 추가 또는 기존 테스트 수정
revert: 작업 되돌리기
참고: Git Commit Msg
구성요소를 활용하여 commit message 구조를 작성할 때 알아두어야 할것(rules)에 대해서 알아보겠습니다.
- 모든 commit message는
<타입>[적용 범위(선택 사항)]: <설명>
를 포함해야합니다. - <설명>은 타입쪽에 위치한 콜론뒤에 한개의 공백을 유지하고 작성되어야 합니다. ex)
<타입>[적용 범위(선택 사항)]: 여기부터 설명 작성이 가능합니다.
- 본문(선택사항)을 작성할 경우에는 <설명> 사이에 빈행으로 구분이 되어있어야 합니다.
- 본문은 코드변경의 의도를 포함. 수정내역을 간단하게 볼 수 있어야 합니다.
- 꼬리말(선택사항)을 작성할 경우에는 <본문> 사이에 빈행으로 구분이 되어있어야 합니다.
- 프로그램의 단절적 변경이 있을 경우 <타입>뒤에 !로 표시하거나 꼬리말에 설명이 있어야 합니다.
- 단절적 변경에 대해 꼬리말로 설명할 경우 대문자 문자열 BREAKING CHANGE과 뒤따르는 콜론(:), 공백, 그리고 설명으로 구성되어야 합니다 ex) BREAKING CHANGE: api 스펙변경으로 인해 api/v2 설정값에 대해 보장하지 않습니다.
- conventional commit을 구성하는 정보의 단위는 반드시 대문자여야 하는 BREAKING CHANGE를 제외하고 구현자에 의해 대소문자를 구분하는 것으로 처리되어서는 안됩니다.
commit message 작성방법에 대해 알아보았으니 commit 을 작성하러 가볼까요?
예시)
[commit message example]
feat: 유저 전체 조회 기능 추가[commit message example]
fix!: update시 파라미터 수정
BREAKING CHANGE: deviceId 변수는 더 이상 사용되지 않습니다.

conventional commits 장점
- CHANGELOG를 자동으로 생성할 수 있습니다.
- 프로젝트를 보는 사람이 변화를 쉽게 이해할 수 있습니다.
- 빌드와 배포에 도움이 됩니다.
프로젝트에 적용하기
commitlint: helps your team adhering to a commit convention 를 활용하여 프로젝트 구성원이 조금 더 신뢰있게 사용할 수 있는 방법에 대해서 알아보겠습니다.
- install commitlint
npm install --save-dev @commitlint/{cli,config-conventional}
[package.json]
module.exports = {extends: ['@commitlint/config-conventional']};
2. install husky
npm install --save-dev husky[package.json]
{
"husky": {
"hooks": { "commit-msg": "commitlint -E
HUSKY_GIT_PARAMS"
}
}
}
위와 같이 설정하게 되면 git commit 시에 hooks를 통해 commit-msg를 검사하여 commit 여부를 결정 하게 됩니다.
옵션: commit template 만들기
저는 conventional commits 를 잘 사용하기 위해 fork의 commit template를 설정하여 사용하고 있는데요.

위와 같이 commit template를 사용하게 되면 commit message 작성시에 구조와 요소를 알 수 있어 매우 편리합니다.
프로젝트를 효율적으로 관리하기 위한 방법들은 많습니다. 오늘은 그중 commit message 작성을 위한 conventional commits에 대해서 알아 보았습니다. 다음시간에 더 알찬내용으로 찾아뵙도록 하겠습니다. 감사합니다.
references
- https://commitlint.js.org
- https://www.conventionalcommits.org
- https://ko.wikipedia.org/
- http://karma-runner.github.io/
Get to know us better!
Join our official channels below.
Telegram(EN) : t.me/Humanscape
KakaoTalk(KR) : open.kakao.com/o/gqbUQEM
Website : humanscape.io
Medium : medium.com/humanscape-ico
Facebook : www.facebook.com/humanscape
Twitter : twitter.com/Humanscape_io
Reddit : https://www.reddit.com/r/Humanscape_official
Bitcointalk announcement : https://bit.ly/2rVsP4T
Email : support@humanscape.io