Devbox - Cheatsheet Ambienti di Sviluppo Riproducibili
Devbox (di Jetify) crea ambienti di sviluppo isolati e riproducibili senza Docker o macchine virtuali. È alimentato da Nix ma nasconde il linguaggio Nix dietro una semplice configurazione JSON (devbox.json) e una CLI familiare — esegui devbox add nodejs@20 invece di scrivere una derivazione Nix. Il risultato: tutti nel team (e CI) ottengono la stessa toolchain esatta, fissata a versioni precise, isolata dal sistema host.
Installazione
Iniziare
| Comando | Descrizione |
|---|
devbox init | Crea un devbox.json nel progetto |
devbox add nodejs@20 python@3.12 | Aggiungi pacchetti (versioni fissate) |
devbox rm python | Rimuovi un pacchetto |
devbox install | Installa tutto in devbox.json |
devbox shell | Entra nell”ambiente isolato |
devbox run <script> | Esegui uno script definito dentro l”env |
Gestione Pacchetti
| Comando | Descrizione |
|---|
devbox add go@1.22 | Aggiungi una versione specifica |
devbox search postgresql | Cerca nel catalogo di pacchetti Nix |
devbox list | Elenca i pacchetti installati |
devbox update | Aggiorna i pacchetti ai più recenti consentiti |
devbox info nodejs | Mostra i dettagli per un pacchetto |
Le versioni risolvono in base al catalogo Nixpkgs, quindi nodejs@20 è riproducibile ovunque.
La Configurazione (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"
}
}
}
| Campo | Scopo |
|---|
packages | Versioni strumento/linguaggio fissate |
shell.init_hook | Comandi eseguiti quando si entra nella shell |
shell.scripts | Comandi denominati (devbox run dev) |
env | Variabili di ambiente per il progetto |
Shell e Script
| Comando | Descrizione |
|---|
devbox shell | Shell isolata interattiva |
devbox run dev | Esegui lo script dev |
devbox run -- npm ci | Esegui un comando arbitrario nell”env |
exit | Esci dalla shell Devbox |
Servizi (Gestione dei Processi)
Devbox può gestire i servizi in background (database, ecc.) per un progetto.
| Comando | Descrizione |
|---|
devbox services ls | Elenca i servizi configurati |
devbox services up | Avvia i servizi |
devbox services stop | Arresta i servizi |
devbox add postgresql --start-services | Aggiungi un pacchetto supportato dal servizio |
CI & Contenitori
| Usa | Come |
|---|
| CI | Installa Devbox, esegui devbox run test — env identico a locale |
| Docker | devbox generate dockerfile produce un”immagine riproducibile |
| Devcontainer | devbox generate devcontainer per VS Code |
| Direnv | devbox generate direnv per entrare auto nell”env su cd |
Flussi di Lavoro Comuni
# Prepara un ambiente di progetto riproducibile da zero
devbox init
devbox add nodejs@20 postgresql@16
devbox shell # ora node + postgres sono disponibili, fissi
# Esegui attività nello stesso modo localmente e in CI
devbox run test
# Produci un''immagine Docker dalla stessa definizione
devbox generate dockerfile
Devbox vs Alternative
| Aspetto | Devbox | Dev Containers | Nix (raw) | mise |
|---|
| Backend | Nix | Docker | Nix | Registro proprio |
| Configurazione | JSON | devcontainer.json | Linguaggio Nix | .mise.toml |
| Isolamento | Reale (negozio Nix) | Contenitore | Reale | Versioni dello strumento |
| Curva di apprendimento | Delicata | Moderata | Ripida | Delicata |
| Migliore per | Env riproducibili, facile | Sviluppo basato su contenitore | Potenza Nix completa | Gestione versione |
Vedi anche Nix per il potere sottostante, devcontainer per lo sviluppo basato su contenitore e mise per la gestione della versione dello strumento.
Risorse