- Published on
Configuración de un hook de Git con phpstan y php-cs-fixer
- Authors
-
-
- Name
- Iván Portillo
- @portillo_dev
-
En el desarrollo de software, mantener un código limpio y coherente es esencial para la legibilidad, mantenibilidad y colaboración efectiva en un proyecto
En el desarrollo de proyectos de software, mantener un código limpio y de calidad es fundamental para garantizar su mantenibilidad a largo plazo. En este sentido, existen herramientas que nos ayudan a mejorar la calidad de nuestro código, como phpstan y php-cs-fixer. En esta entrada, aprenderemos cómo configurar un hook de Git para que estas herramientas se ejecuten automáticamente antes de cada confirmación de cambios, asegurando así un código limpio y sin errores.
PHPStan
De PHPStan ya hablamos en una entrada anterior pero hagamos un pequeño resumen. Es una herramienta de análisis estático para PHP que nos permite detectar posibles errores, problemas de rendimiento y mejoras en nuestro código sin necesidad de ejecutarlo. Con su análisis exhaustivo, phpstan nos brinda una mayor confianza en la calidad de nuestro código.
PHP-CS-Fixer
PHP-CS-Fixer es una herramienta de línea de comandos desarrollada por el equipo de Symfony. Su objetivo principal es corregir automáticamente el estilo y formato del código PHP de acuerdo con un conjunto predefinido de reglas. Utiliza un motor de análisis estático para recorrer los archivos PHP y aplicar las correcciones necesarias para asegurar que el código cumpla con las convenciones y estándares establecidos.
Ventajas de utilizar PHP-CS-Fixer:
-
1 - Mantenimiento de un estilo de código consistente: PHP-CS-Fixer te permite definir y aplicar un estilo de código consistente en todo tu proyecto. Al seguir un conjunto de reglas predefinidas (como PSR-12 o PSR-2) o reglas personalizadas, puedes asegurarte de que todos los desarrolladores en tu equipo sigan las mismas convenciones de codificación, lo que facilita la lectura y comprensión del código.
-
2 - Mejora de la calidad del código: Al corregir automáticamente el estilo del código, PHP-CS-Fixer ayuda a eliminar inconsistencias y errores comunes en el formato, como espacios en blanco incorrectos, indentación inconsistente, uso incorrecto de comillas, etc. Esto mejora la calidad general del código y reduce la posibilidad de errores causados por problemas de formato.
-
3 - Ahorro de tiempo y esfuerzo: Al automatizar la corrección del estilo del código, PHP-CS-Fixer ahorra tiempo y esfuerzo a los desarrolladores. En lugar de revisar manualmente cada archivo en busca de problemas de formato, la herramienta se encarga de ello, permitiendo a los desarrolladores concentrarse en escribir un código funcional y de alta calidad.
Git Hooks y sus beneficios
Los Git Hooks son scripts personalizados que se ejecutan automáticamente en eventos específicos de Git, como confirmar cambios, empujar cambios, etc. Nos permiten automatizar tareas y establecer políticas de desarrollo para garantizar un flujo de trabajo consistente en nuestro proyecto.
En este caso, configuraremos un hook pre-commit, que se ejecutará antes de cada confirmación de cambios. Utilizaremos este hook para ejecutar phpstan y php-cs-fixer, asegurando así que nuestro código cumpla con los estándares de calidad establecidos.
Instalación y configuración del hook
A continuación, detallaremos los pasos necesarios para instalar y configurar el hook. Para eso crearemos un mini proyecto en laravel
Paso 1: Crear un proyecto e instalar los linters
composer create-project laravel/laravel laravelApp
cd laravelApp
A continuación, instalamos phpstan y php-cs-fixer mediante los siguientes comandos:
composer require --dev phpstan/phpstan
composer require --dev friendsofphp/php-cs-fixer
Luego, creamos el archivo de configuración .php-cs-fixer.php en la raíz del proyecto y agregamos una configuración básica.
Paso 2: Modificar el archivo composer.json
En el archivo `composer.json`, agregamos las siguientes líneas dentro de la sección "scripts":
"php-stan": "vendor/bin/phpstan analyse app tests --level=4",
"php-fixer": "vendor/bin/php-cs-fixer fix --config .php-cs-fixer.php",
"tests": "vendor/bin/phpunit"
Estos scripts nos permitirán ejecutar phpstan, php-cs-fixer y PHPUnit respectivamente.
Paso 3: Crear un repositorio y enlazarlo con nuestro proyecto
Creamos un repositorio en la plataforma Git de tu elección y, desde la terminal, nos situamos en nuestro proyecto y ejecutamos los siguientes comandos:
git init
git remote add origin https://github.com/Username/NombreDelRepol.git
git add .
git commit -m "Primer commit"
git push origin main
Estos comandos inicializarán un repositorio Git, lo enlazarán con nuestro repositorio remoto y realizarán el primer envío de cambios.
Paso 4: Crear el hook
Para configurar el hook pre-commit, creamos la carpeta .githooks en la raíz del proyecto y dentro de ella, creamos el archivo pre-commit con el siguiente contenido:
#!/usr/bin/env bash
echo "pre commit hook start"
echo "init tests and phpstan"
bash -c "composer tests && composer run php-stan" || exit 1
CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM -- '*.php' | tr '\n' ' ')
if [ -n "$CHANGED_FILES" ]; then
echo "init php-fixer"
bash -c "composer php-fixer $CHANGED_FILES; git add $CHANGED_FILES;"
echo "finish tests and php-fixer"
fi
echo "pre commit hook finish"
Luego, le damos permisos de ejecución al archivo mediante el siguiente comando:
chmod +x .githooks/pre-commit
¡Listo! Ahora, cada vez que realices una confirmación de cambios, phpstan y php-cs-fixer se ejecutarán automáticamente, ayudándote a mantener un código limpio y de calidad.
Para finalizar, configuramos Git para que utilice nuestros hooks al realizar confirmaciones de cambios:
git config --local core.hooksPath .githooks/
Solo me queda animarte a contactarme si tienes alguna duda o sugerencia. Puedes hacerlo a través del formulario de contacto o por medio de mis perfiles en redes sociales.
Espero que este artículo te haya sido de utilidad y no dudes en compartirlo si crees que puede ser de ayuda para otr@s desarrolladores/as.
feliz código a tod@s!!
Enlaces relacionados
Configuraciones para PHP-CS-FIXER