Task runners: les alternatives à Make

Publié le 19/04/2024 - 2 minutes de lecture

Make a longtemps été le task runner privilégié pour le développement logiciel. En effet, c'est un outil éprouvé et qui a fait ses preuves. Il est ainsi fréquent d'avoir un Makefile dans les projets Symfony pour gérer l'installation initiale, les conteneurs Docker, la base de données, les assets front, les tests, etc...

Make et PHP

Pourtant, sa principale force n'est pas très utile pour un langage ne nécessitant pas de phase de compilation, comme PHP. Ajoutez à cela une syntaxe stricte et compliquée à prendre en main, et certains comportements qui ne sont pas forcément évidents pour le néophyte, la question de savoir si d'autres outils ne seraient pas mieux adaptés peut se poser.

Les alternatives

Des alternatives plus modernes existent, parmi lesquelles Task et Just. Ces deux outils ont notamment comme avantages:

  • plus faciles à prendre en main et à configurer, avec des fichiers de configuration lisibles et une syntaxe intuitive
  • facilité de passer des arguments lors de l'appel des commandes
  • inclusion native des fichiers .env contenant les variables d'environnement
  • disponibles sur d'autres plate-formes que Unix/Linux, comme Windows ou macOS

Task

Créé en 2017, Task se définit comme une alternative simple et facile à utiliser à Make, et est développé en Go.

La configuration des tâches se fait en YAML via un fichier Taskfile.yml:

version: '3'

tasks:  
    start:
        desc: Start Docker containers
        cmds:
            - docker-compose up -d

    composer:
        desc: Install Composer
        cmds:
            - composer install
        sources:
            - composer.lock
        generates:
            - vendor/**/*

La commande task --list-all permet de lister les tâches disponible: Task list all

La syntaxe pour lancer les tâches est la suivante:

task install

Repository Github: https://github.com/go-task/task

Just

Just se veut une manière pratique de lancer des commandes, à la syntaxe proche de Makefile tout en apportant son lot d'améliorations.

Task list all

Repository Github: https://github.com/casey/just

Castor, basé sur Symfony

Un dernier task runner méritant d'être mentionné: il s'agit de Castor, qui est développé depuis 2023 par JoliCode, en PHP et basé sur des composants Symfony. Pratique si vous êtes développeur PHP. La réfléxion ayant menée à la création de cet outil est expliquée ici https://jolicode.com/blog/castor-a-journey-across-the-sea-of-task-runners.

Repository Github: https://github.com/jolicode/castor

En conclusion

Expérimentant Task depuis quelques mois, je trouve que c'est un outil qui permet assez vite d'arriver à ses fins et en suis assez satisfait. Si vous êtes allergiques au YAML ou amoureux de la syntaxe des Makefile, Just est également envisageable pour vous simplifier la vie.