
commitlint 규격을 위한 VS Code의 커밋 메시지 생성 커스터마이징
요약
Conventional Commits 규격을 준수하기 위해 VS Code의 AI 커밋 메시지 생성 기능을 커스터마이징하는 방법을 소개합니다. settings.json에 직접 지침을 설정하여 commitlint 규칙을 완벽하게 따르는 메시지를 생성할 수 있습니다.
핵심 포인트
- Conventional Commits 표준을 따르는 커밋 메시지 작성법
- commitlint와 Husky를 활용한 커밋 메시지 린팅 자동화
- VS Code의 AI 커밋 메시지 생성 기능을 위한 settings.json 설정법
- Gemini Flash를 활용하여 커밋 메시지 생성용 프롬프트 최적화
저는 Conventional Commits 표준을 사용하여 커밋 메시지를 작성하며, Angular 리포지토리의 커밋 메시지 컨벤션을 사용합니다. 이 방식이 제가 원하는 딱 적절한 수준의 정교함을 제공하기 때문입니다.
커밋 메시지의 예시는 다음과 같습니다:
feat(auth): add OAuth2 token refresh flow
Automatically refresh expired JWT access tokens in the
...
저는 commitlint의 문서에 설명된 대로 commitlint와 Husky를 사용하여 커밋 메시지가 이 형식을 준수하는지 린트 (lint) 합니다. 이를 통해 규칙을 준수하지 않는 커밋 메시지를 작성할 경우 커밋이 실패하게 하여, 다시 돌아가 메시지를 수정하도록 강제합니다.
VS Code의 소스 제어 (Source Control) 사이드바에는 리포지토리 내의 커밋되지 않은 코드를 기반으로 LLM을 사용하여 커밋 메시지를 생성하는 멋진 반짝임 아이콘이 있습니다:
커밋 메시지 생성을 커스터마이징하는 것은 매우 까다로운 작업임이 드러났습니다. 제 commitlint 설정을 반영하기 위해 어떻게 수정해 보아도, 계속해서 규격에 맞지 않는 메시지를 생성했습니다.
최근에 이를 어떻게 설정하는지에 대한 Emmanuele Bartolesi의 포스트를 발견했습니다. 비결은 별도의 지침 파일을 사용하는 것이 아니라, settings.json에 전체 지침을 직접 선언하는 것 같았습니다. 성공했습니다!
저는 설정을 생성하기 위해 사실상 무료로 사용할 수 있는 Gemini Flash (Extended Mode)에서 이 프롬프트를 사용했습니다. 프롬프트에 제 commitlint.config.js를 복사하여 붙여넣었습니다:
based on this article:
...
보시다시피, 다음과 같은 VS Code 설정이 생성되었습니다:
{
"github.copilot.chat.commitMessageGeneration.instructions": [
{
...
저는 이를 (가장 바깥쪽 중괄호를 제거한 뒤) .vscode/settings.json에 복사하여 붙여넣었고, 아주 완벽하게 작동합니다:
제가 조정해야 했던 유일한 부분은 커밋 메시지 헤더(header)의 접두사(prefix)를 feat(github.copilot)에서 ci:로 변경하는 것이었는데, 이것이 가장 적절하다고 생각했기 때문입니다.
한 가지 짚고 넘어가고 싶은 점이 있습니다: 이전 시도들에서 VS Code의 커밋 메시지 생성 기능은 제 commitlint 설정의 최대 너비(max width)를 준수하는 데 어려움이 있었습니다. 자동 생성된 메시지에서 메시지 너비가 초과되지 않았는지 시각적으로 확인하기 위해, 커밋 메시지 박스에 희미한 수직선을 표시하는 다음 VS Code 설정을 추가했습니다. 이 부분은 위 스크린샷에서 빨간색 사각형으로 강조되어 있습니다:
"[scminput]": {
// 소스 제어 사이드바(Source Control Sidebar)의 커밋 메시지 창에서 72자보다 약간 적은 70자 기준입니다. 이 너비에서 수직선이 표시됩니다.
// 커밋 메시지 라인이 72자를 초과하지 않도록 보장하기 위해 이것이 필요하며, 이는 제가 commitlint를 통해 강제하는 규칙입니다 (commitlint.config.js 참조).
...
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
