Tooling: commitlint, commitizen, husky e gitmoji
2 min de leitura
Convenção manual é ótima até o dia do vencimento - e aí alguém esquece o formato, e a SemVer automática quebra. Por isso o ecossistema de Conventional Commits inclui ferramentas que automatizam e reforçam a convenção. Vamos ver o essencial (a fundo em cada uma é assunto pra trilha própria).
Commitlint: valida o formato
O commitlint roda antes de o commit ser criado ou no CI e falha se a mensagem não seguir a regra. Você define regras (tipos permitidos, escopo obrigatório, tamanho máximo) num arquivo de config:
// commitlint.config.js (exemplo)
export default {
extends: ["@commitlint/config-conventional"],
rules: {
"type-enum": [2, "always", ["feat", "fix", "refactor", "docs", "test", "chore"]],
"subject-max-length": [2, "always", 72],
},
}
A partir daí, um commit fora do padrão é rejeitado na hora - o time não perde tempo revisando formato depois.
Husky: ganchos do Git
O husky roda hooks do Git (como
pre-commit, commit-msg) na sua máquina. É o jeito de ligar o commitlint ao
ato de commitar:
# .husky/commit-msg - roda commitlint na mensagem
npx --no -- commitlint --edit "$1"
E, com um prepare script no package.json, o hook é instalado pra todo
mundo que clonar o repo. Resultado: a convenção se aplica sozinha.
Commitizen: mensagens sem decorar o formato
O commitizen transforma o
git commit num formulário interativo: ele pergunta o tipo, o escopo, a
descrição e monta a mensagem pra você. Ótimo pra quem não quer decorar cada
regra, e o mesmo CLI alimenta a cz (commitizen):
npm install --save-dev commitizen
npx cz # abre o assistente interativo
# ? Selecione o tipo de mudança... -> feat
# ? Qual o escopo? ... -> auth
# ? Descreva... -> adiciona login
O commitizen normaliza a mensagem no formato certo e elimina o erro humano.
Gitmoji: emojis como extensão
O gitmoji adiciona um emoji ao início da mensagem, como convenção paralela (não substitui o Conventional Commits):
✨ feat(auth): adiciona login com GitHub
🐛 fix(cart): corrige frete
📝 docs(readme): explica instalação
Cada emoji tem um significado fixo (✨ = feature nova, 🐛 = bug fix,
📝 = docs). Muitos times adotam gitmoji em cima de Conventional Commits -
o truque é que o formato clássico continua presente (e parseável), e o emoji
adiciona semântica visual no git log.
Dica: qual escolher? Comece sem tooling (só a convenção na mão), depois adicione commitlint + husky pra forçar, e só então commitizen se quiser reduzir fricção. Se o time adota gitmoji, o emoji vai antes do type (convenção da própria ferramenta:
✨ feat(auth): ...) - o parser do CC lê o type logo depois do emoji, sem quebrar.
- commitlint = valida a mensagem (no commit ou no CI).
- husky = roda hooks do Git (ex.: dispara o commitlint).
- commitizen = assistente interativo que monta a mensagem correta.
- gitmoji = adiciona emoji como extensão visual, mantendo o formato.
Dica: configure tudo isso num
package.json(viaprepare+husky) e versionando ocommitlint.config.js- assim a convenção anda junto com o código no repositório.
No próximo (último) nó, vamos fechar com um projeto prático: reescrever um
histórico de commits bagunçado em Conventional Commits, do zero ao git log
limpo.
// Quiz
Qual a função do commitlint no ecossistema de Conventional Commits?