La importancia de los mensajes de commit
Cuando estamos desarrollando, es común escribir mensajes de commit varias veces al día. Aunque tenemos la intención de resumir correctamente los cambios en el código cada vez que redactamos un mensaje, es fácil caer en la trampa de escribir mensajes ambiguos debido a que no siempre es sencillo resumir cambios complejos.
La realidad es que los mensajes de commit juegan un papel más importante cuando revisamos el código más adelante, ya sea para entender el trabajo que hemos hecho en el pasado o para revisar el trabajo de otros miembros del equipo. Un buen mensaje de commit se convierte en una especie de seguro a largo plazo que aumenta la productividad del equipo y proporciona ayuda cuando necesitamos solucionar problemas del código.
El reto es que, sin restricciones claras, escribir mensajes de commit consistentes y claros es como intentar nombrar variables sin convenciones claras. Puede ser un verdadero desafío.
Conventional Commits
Fue entonces cuando descubrí Conventional Commits. Este enfoque propone elegir de antemano uno de varios tipos definidos de cambio de código y redactar el ámbito y el tema como parte central del mensaje.
Estas reglas, aunque sencillas, nos permiten escribir mensajes de commit más consistentes y estandarizados. Además, como se pueden integrar con el Semantic Versioning, pensé que esta práctica también sería muy útil en términos de productividad.
Las reglas básicas son las siguientes:
Reglas básicas
-
Formato: Seguir el formato
type(scope): subject.type: El tipo de cambio (ej.feat,fix,docs,style,refactor,test, etc.).scope(opcional): El ámbito o módulo donde se aplican los cambios.subject: Descripción breve del cambio.
-
Cuerpo: Se puede añadir una descripción más detallada de los cambios si es necesario.
-
Ejemplos:
feat(auth): Añadir funcionalidad de inicio de sesión de usuario
fix(api): Resolver la excepción de puntero nulo en el método fetch
docs: Actualizar README con instrucciones de instalación
Estos principios se alinean con el Semantic Versioning de la siguiente manera.
Si el proyecto utiliza Semantic Versioning, las versiones se pueden gestionar automáticamente usando solo los mensajes de commit. Por ejemplo:
feat(auth): Añadir funcionalidad de inicio de sesión de usuario→ Nueva funcionalidad añadida 👉v1.1.0fix(api): Resolver la excepción de puntero nulo→ Corrección de un bug 👉v1.1.1feat(payment): Añadir soporte para tarjetas de crédito→ Otra nueva funcionalidad añadida 👉v1.2.0
Finalmente, aquí están algunos de los beneficios de los Conventional Commits:
- Consistencia: Los mensajes de commit consistentes ayudan a entender la historia del proyecto con facilidad.
- Integración de herramientas de automatización: Se integra fácilmente con diversas herramientas de automatización, como la generación de notas de lanzamientos o la integración con CI/CD.
- Eficiencia en la revisión de código: Facilita la comprensión rápida de la intención de los cambios para llevar a cabo revisiones efectivas.
- Mejora de la escalabilidad: A medida que el proyecto crece, los mensajes de commit consistentes facilitan el mantenimiento.
Además, existe un linter (commitlint)
Las funcionalidades principales de commitlint incluyen:
- Verificación de Conventional Commits: Verifica que el mensaje siga el formato
type(scope): subject. - Personalización: Permite agregar o modificar reglas basadas en los requisitos del equipo.
- Integración con CI/CD: Aplicar commitlint en la pipeline para validar los commits.
- Integración con Husky: Usa hooks de Git para verificar automáticamente los mensajes de commit.
Implementar commitlint en un proyecto es bastante sencillo y cuenta con múltiples beneficios. Si el equipo está de acuerdo en adoptar Conventional Commits, también se recomienda incorporar commitlint. Para más detalles de implementación, visita el sitio web oficial de commitlint.
Aunque es posible que cada individuo redacte buenos mensajes de commit sin esta herramienta, los errores humanos son inevitables. A lo largo del tiempo, los commits erróneos pueden acumularse, haciendo que el historial del proyecto sea confuso e inútil.
También es más eficiente quejarse ante la máquina que bloquea un commit incorrecto, en lugar de dar retroalimentación a los compañeros de equipo por mensajes de commit extraños.
Mensajes de commit consistentes, el primer paso para mejorar la productividad del equipo
Los mensajes de commit no son simples registros de cambios. Son herramientas importantes para organizar el historial del proyecto y facilitar la colaboración efectiva entre los miembros del equipo. Especialmente cuando múltiples desarrolladores están trabajando juntos, los mensajes de commit consistentes facilitan la revisión de código y permiten una comprensión clara de los cambios.
A nivel personal, aplicar reglas consistentes puede reducir la incertidumbre al redactar mensajes claros y considerando que herramientas como commitlint validan automáticamente los mensajes, se previenen errores y se mejora la integración con CI/CD.
¿No sería bueno establecer la rutina de escribir mensajes consistentes aplicando una norma? Aunque puede parecer incómodo al principio, al final elevará significativamente la productividad del equipo.