Accélérer l’installation de l’environnement de dev avec Devbox
Quel dev n’a pas déjà passé des heures à essayer de lancer un nouveau projet sur sa machine ?
En tant qu’agence de développement web, nous sommes régulièrement confrontés à cette problématique. Les outils modernes ont nettement amélioré la donne ces 10 dernières années.
Comment pourrions-nous industrialiser ce processus ?
Au départ, 3 options se présentaient :
Avoir l’environnement de dev dans le cloud
Conteneuriser grâce à Docker l’environnement
Embarquer les packages dans un shell
Le cloud c'est top, mais il y a besoin d’internet
Nous sommes en remote-first.
Pouvoir se déplacer quand on le souhaite est donc un cas d’usage à prendre en compte.
La capacité de pouvoir coder sans internet n’est pas un luxe dans notre contexte. Dans l’idéal nous aimerions conserver cette capacité.
Avec Docker : belle promesse …
Nous avons très vite voulu tester cette idée.
Ça fait sens car toutes nos applications sont conteneurisées, pour les déployer en staging ou en production. En plus il existe la technologie open source DevContainer poussée par VSCode.
En pratique le projet n’est pas assez mature. Nous avons de nombreux problèmes pour stabiliser la solution avec notre stack (de nombreux conflits avec pnpm par exemple).
Peut-être y reviendrons-nous un jour !
La découverte de Devbox
Et puis nous sommes tombés sur Devbox, un autre projet open-source.
Ici la promesse est un peu différente : les packages ne sont pas conteneurisés mais bel et bien installés sur la machine.
Par contre, tout le process d’installation est transparent pour le dev : à partir d’un fichier de configuration sur le git du projet, il suffit de lancer un devbox shell pour tout installer.
Il est tout à fait possible de faire cohabiter différents projets avec différentes versions.
Comment mettre en place la solution ?
Il faut commencer par installer Devbox :
curl -fsSL <https://get.jetify.com/devbox> | bash
Ensuite on lance un devbox init dans un dossier afin d’initialiser le fichier devbox.json.
{
"packages": [],
"env": {},
"shell": {
"init_hook": "...",
"scripts": {}
},
"include": []
}
packages: contient les différents packages que l’on souhaite installer. Vous pouvez retrouver un hub juste ici.env: permet de définir des variables d’environnements.shell: permet de définir des scripts qui vont pouvoir être lancés avec la commandedevbox - run <nom script>, cela permet de lancer des commandes dans un environnement donné. La partieinit_hookquant à elle va être exécutée lorsque le shell se lance notamment avecdevbox shell.include: permet d’utiliser des plugins.
Une fois le mise en place réalisée, il est possible d’ouvrir une fenêtre VSCode au sein du shell devbox grâce à ce plugin.
Exemples de configurations
Kubernetes
{
"$schema": "<https://raw.githubusercontent.com/jetify-com/devbox/0.12.0/.schema/devbox.schema.json>",
"packages": [
"kubectl@1.30.2",
"kubernetes-helm@3.15.3",
"kubectx@0.9.5",
"k9s@0.32.5"
],
"shell": {
"init_hook": ["echo 'Welcome to devbox!' > /dev/null"],
"scripts": {}
}
}
NodeJS et Infisical
{
"$schema": "<https://raw.githubusercontent.com/jetify-com/devbox/0.12.0/.schema/devbox.schema.json>",
"packages": ["nodejs@20.14.0", "infisical@0.23.3"],
"env": {
"DEVBOX_COREPACK_ENABLED": "true"
},
"shell": {
"init_hook": ["pnpm install"],
"scripts": {
"run_test": "pnpm run start"
}
}
}
Nix, la technologie derrière Devbox
Derrière Devbox, il y a Nix et plus particulièrement Nix shell.
Nix shell permet de créer des shells spécifiques avec tous les outils que l’on souhaite avec juste un fichier de configuration.
Devbox simplifie la mise en place de Nix en cachant les parties un peu complexes.


