Devbox - Environnements de développement reproductibles
Devbox (par Jetify) crée des environnements de développement isolés et reproductibles sans Docker ni machines virtuelles. Il est alimenté par Nix mais cache le langage Nix derrière une simple config JSON (devbox.json) et une CLI familière — vous exécutez devbox add nodejs@20 au lieu d’écrire une dérivation Nix. Le résultat : chacun de l’équipe (et CI) obtient exactement la même chaîne d’outils, épinglée à des versions précises, isolée du système hôte.
Installation
| Méthode | Commande |
|---|
| Script d’installation | `curl -fsSL https://get.jetify.com/devbox |
| Exigence | Nix (Devbox peut l’installer pour vous) |
| Vérifier | devbox version |
Démarrage
| Commande | Description |
|---|
devbox init | Créer un devbox.json dans le projet |
devbox add nodejs@20 python@3.12 | Ajouter des packages (versions épinglées) |
devbox rm python | Supprimer un package |
devbox install | Installer tout dans devbox.json |
devbox shell | Entrer dans l’environnement isolé |
devbox run <script> | Exécuter un script défini dans l’env |
Gestion des packages
| Commande | Description |
|---|
devbox add go@1.22 | Ajouter une version spécifique |
devbox search postgresql | Rechercher dans le catalogue de packages Nix |
devbox list | Lister les packages installés |
devbox update | Mettre à jour les packages aux dernières autorisées |
devbox info nodejs | Afficher les détails d’un package |
Les versions sont résolues par rapport au catalogue Nixpkgs, donc nodejs@20 est reproductible partout.
La config (devbox.json)
{
"packages": ["nodejs@20", "python@3.12", "postgresql@16"],
"shell": {
"init_hook": ["echo 'Welcome to the project env'"],
"scripts": {
"dev": "npm run dev",
"test": "npm test",
"db": "pg_ctl start"
}
}
}
| Champ | Objectif |
|---|
packages | Versions d’outils/langages épinglées |
shell.init_hook | Commandes exécutées lors de l’entrée du shell |
shell.scripts | Commandes nommées (devbox run dev) |
env | Variables d’environnement pour le projet |
Shell et scripts
| Commande | Description |
|---|
devbox shell | Shell interactif isolé |
devbox run dev | Exécuter le script dev |
devbox run -- npm ci | Exécuter une commande arbitraire dans l’env |
exit | Quitter le shell Devbox |
Services (gestion des processus)
Devbox peut gérer les services d’arrière-plan (bases de données, etc.) pour un projet.
| Commande | Description |
|---|
devbox services ls | Lister les services configurés |
devbox services up | Démarrer les services |
devbox services stop | Arrêter les services |
devbox add postgresql --start-services | Ajouter un package avec service |
CI & Conteneurs
| Utilisation | Comment |
|---|
| CI | Installer Devbox, exécuter devbox run test — env identique au local |
| Docker | devbox generate dockerfile produit une image reproductible |
| Devcontainer | devbox generate devcontainer pour VS Code |
| Direnv | devbox generate direnv pour auto-entrer l’env sur cd |
Flux de travail courants
# Stand up a reproducible project env from scratch
devbox init
devbox add nodejs@20 postgresql@16
devbox shell # now node + postgres are available, pinned
# Run tasks the same way locally and in CI
devbox run test
# Produce a Docker image from the same definition
devbox generate dockerfile
Devbox vs alternatives
| Aspect | Devbox | Dev Containers | Nix (brut) | mise |
|---|
| Backend | Nix | Docker | Nix | Registre propre |
| Config | JSON | devcontainer.json | Langage Nix | .mise.toml |
| Isolation | Réelle (magasin Nix) | Conteneur | Réelle | Versions d’outils |
| Courbe d’apprentissage | Douce | Modérée | Raide | Douce |
| Meilleur pour | Envs reproductibles, facile | Développement basé conteneur | Puissance Nix complète | Gestion version |
Voir aussi Nix pour la puissance sous-jacente, devcontainer pour le dev basé conteneur, et mise pour la gestion version outils.
Ressources