Como usar o Devbox para ambientes de desenvolvimento reproduzíveis sem Docker
1. Introdução ao Devbox: Por que substituir o Docker?
O Docker revolucionou o desenvolvimento de software ao oferecer ambientes isolados e reproduzíveis, mas sua adoção em estações de trabalho locais frequentemente gera complexidade desnecessária. Configurar volumes, gerenciar permissões, lidar com desempenho em macOS/Windows e manter múltiplos containers em execução consome tempo e recursos preciosos dos desenvolvedores.
O Devbox surge como uma alternativa elegante: ele cria shells isolados com todas as dependências necessárias sem exigir containers ou virtualização. Utilizando o Nix Package Manager por baixo dos panos, o Devbox oferece ambientes de desenvolvimento reproduzíveis que funcionam em qualquer sistema operacional Linux, macOS ou Windows (via WSL2) com overhead mínimo.
A proposta central é simples: você define as ferramentas que seu projeto precisa em um arquivo JSON, e o Devbox garante que todos na equipe tenham exatamente as mesmas versões, sem conflitos com as ferramentas já instaladas no sistema.
2. Instalação e configuração inicial do Devbox
A instalação é direta. No macOS ou Linux, execute:
curl -fsSL https://get.jetify.com/devbox | bash
No Windows, utilize WSL2 e siga o mesmo comando. Alternativamente, via gerenciadores de pacotes:
# macOS (Homebrew)
brew install devbox
# Linux (via apt)
sudo apt install devbox
Após instalar, crie seu primeiro ambiente:
mkdir meu-projeto && cd meu-projeto
devbox init
Isso gera um arquivo devbox.json com a estrutura inicial:
{
"packages": [],
"shell": {
"init_hook": [],
"scripts": {}
}
}
Para entrar no shell isolado:
devbox shell
Para executar um comando sem entrar no shell:
devbox run -- "node --version"
3. Gerenciamento de dependências com Devbox
Adicionar ferramentas ao ambiente é intuitivo. Vamos configurar um projeto Node.js com Python e utilitários comuns:
devbox add node@18 python@3.11 git curl
O arquivo devbox.json será atualizado automaticamente:
{
"packages": [
"node@18",
"python@311",
"git",
"curl"
],
"shell": {
"init_hook": [],
"scripts": {}
}
}
O Devbox permite controle granular de versões. Para versões específicas:
devbox add "node@18.17.0"
devbox add "python@3.11.5"
Dependências globais (instaladas no sistema) e locais (por projeto) coexistem sem conflitos. O Devbox gerencia o PATH automaticamente, priorizando as versões do projeto.
4. Criando ambientes de desenvolvimento reproduzíveis
O verdadeiro poder do Devbox está na reprodução consistente entre máquinas. O arquivo devbox.json e o devbox.lock (gerado automaticamente) devem ser versionados no Git.
Exemplo de devbox.json completo para um projeto web:
{
"packages": [
"node@18",
"yarn@1.22",
"postgresql@15",
"redis@7"
],
"env": {
"DATABASE_URL": "postgres://localhost:5432/meubanco",
"REDIS_URL": "redis://localhost:6379"
},
"shell": {
"init_hook": [
"echo 'Ambiente Devbox iniciado'",
"yarn install"
],
"scripts": {
"dev": "yarn dev",
"test": "yarn test",
"db:migrate": "yarn prisma migrate dev"
}
}
}
Quando um novo membro da equipe clonar o repositório, basta executar:
devbox shell
Todas as dependências serão baixadas e configuradas automaticamente, garantindo que todos trabalhem com as mesmas versões.
5. Hooks e scripts de automação no Devbox
Os hooks permitem executar comandos automaticamente ao iniciar o shell. O init_hook executa uma vez na criação do ambiente, enquanto shell_hook executa toda vez que o shell é iniciado:
{
"packages": ["node@18", "python@3.11"],
"shell": {
"init_hook": [
"npm install",
"pip install -r requirements.txt"
],
"shell_hook": [
"echo 'Bem-vindo ao projeto!'",
"export PROJECT_ENV=development"
],
"scripts": {
"start": "node server.js",
"lint": "eslint .",
"test": "jest"
}
}
}
Para executar scripts personalizados:
devbox run start
devbox run test
Isso substitui a necessidade de Makefile ou scripts npm complexos, centralizando toda a configuração do ambiente.
6. Integração com editores e IDEs
O Devbox se integra nativamente com VS Code através do Dev Containers. Crie um arquivo .devcontainer/devcontainer.json:
{
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/devbox:1": {}
},
"postCreateCommand": "devbox shell"
}
Para editores como IntelliJ, Vim ou Neovim, basta configurar o terminal integrado para iniciar automaticamente o devbox shell. Exemplo para .bashrc:
if [ -f "$PWD/devbox.json" ]; then
exec devbox shell
fi
No Vim, adicione ao .vimrc:
autocmd VimEnter * if filereadable('devbox.json') | terminal devbox shell | endif
7. Comparação com Docker e casos de uso avançados
| Característica | Devbox | Docker |
|---|---|---|
| Overhead | Mínimo (apenas shell) | Médio (container) |
| Inicialização | Instantânea | Segundos/minutos |
| Compartilhamento | devbox.json + devbox.lock |
Dockerfile + docker-compose.yml |
| Isolamento | PATH e variáveis | Namespaces do kernel |
| Portabilidade | Qualquer SO com Nix | Requer Docker Engine |
Caso prático: projeto Python com dependências específicas:
# devbox.json
{
"packages": [
"python@3.10",
"poetry",
"postgresql@14"
],
"shell": {
"init_hook": ["poetry install"],
"scripts": {
"dev": "uvicorn app.main:app --reload",
"migrate": "alembic upgrade head"
}
}
}
Para Node.js:
{
"packages": ["node@20", "yarn@1.22", "typescript"],
"shell": {
"init_hook": ["yarn install"],
"scripts": {
"build": "tsc",
"start": "node dist/index.js"
}
}
}
Para Go:
{
"packages": ["go@1.21", "golangci-lint", "protobuf"],
"shell": {
"scripts": {
"build": "go build -o bin/app",
"test": "go test ./..."
}
}
}
8. Boas práticas e resolução de problemas comuns
Versionamento: Sempre commite devbox.json e devbox.lock. Use devbox update para atualizar dependências.
Debug de conflitos: Se uma dependência falhar, use devbox shell --pure para iniciar sem hooks e diagnosticar.
Limpeza: Remova shells órfãos com devbox clean e gerencie múltiplos projetos com devbox projects list.
Cache local: O Nix armazena pacotes em /nix/store. Para liberar espaço, use nix-collect-garbage.
Ambientes complexos: Para projetos que exigem serviços como bancos de dados, combine Devbox com Docker Compose apenas para os serviços, mantendo o ambiente de desenvolvimento local.
O Devbox representa uma evolução natural na busca por ambientes de desenvolvimento reproduzíveis, oferecendo a simplicidade de um gerenciador de pacotes com o poder do Nix, sem a complexidade dos containers. Para equipes que buscam produtividade sem abrir mão da consistência, é uma ferramenta indispensável no arsenal moderno de desenvolvimento.
Referências
- Documentação oficial do Devbox — Guia completo de instalação, configuração e comandos do Devbox
- Repositório GitHub do Devbox — Código-fonte, issues e exemplos da comunidade
- Nix Package Manager - Guia de início rápido — Fundamentos do Nix, base técnica do Devbox
- Comparativo Devbox vs Docker vs Nix Shell — Análise detalhada das diferenças entre as ferramentas
- Tutorial: Ambientes reproduzíveis com Devbox — Guia prático para criar ambientes consistentes em projetos reais
- Integração Devbox com VS Code — Como configurar Dev Containers com Devbox no VS Code
- Boas práticas para Devbox em equipes — Dicas de versionamento, compartilhamento e manutenção de ambientes