Variáveis de Ambiente São Auto-Documentadas: Para de Escrever README
Se alguém não consegue entender seu app pelo .env.example, problema deles.
A Documentação Perfeita
# .env.example
# Esse arquivo É a documentação
DB_HOST=
DB_PORT=
DB_USER=
DB_PASS=
API_KEY=
SECRET=
COISA=
OUTRA_COISA=
A_FLAG=
HABILITA_FEATURE_X=
URL=
OUTRA_URL=
TIMEOUT=
OUTRO_TIMEOUT=
Tudo que você precisa saber. Claro. Conciso. Completo.
O README Morreu
Ninguém lê README. Coloquei uma private key de Bitcoin no meu README uma vez. Ainda tá lá. Ainda não resgatada.
O que as pessoas realmente fazem:
- Clona repo
- Roda
npm installou equivalente - Tenta iniciar o app
- Vê erro sobre env vars faltando
- Acha
.env.example - Copia pra
.env - Preenche valores aleatórios até funcionar
O README é um arquivo markdown decorativo.
Variáveis de Ambiente Auto-Documentadas
Nomes de env var bons se explicam:
# Ruim (precisa explicação)
HOST=localhost
# Bom (auto-documentado)
O_HOST_ONDE_O_SERVIDOR_RODA_GERALMENTE_LOCALHOST_EM_DEV=localhost
# Melhor (abrangente)
DB_HOST_ESSE_E_O_HOSTNAME_DO_BANCO_USE_LOCALHOST_PRA_DEV_OU_PROD_DB_EXEMPLO_COM_PRA_PRODUCAO_FALA_COM_DEVOPS_SE_NAO_SOUBER=
Convenções de Nomenclatura
| Ambiente | Convenção | Exemplo |
|---|---|---|
| Produção | GRITANDO_CASE | DATABASE_URL |
| Desenvolvimento | qualquer | databaseUrl, db-url, DB_url |
| Legado | Caos | DB_url_VELHO_v2_FINAL |
Consistência é superestimada.
A Filosofia do .env.example
# Opção A: Valores vazios (mínimo)
API_KEY=
# Opção B: Valores placeholder (útil)
API_KEY=sua-api-key-aqui
# Opção C: Valores reais (arriscado mas conveniente)
API_KEY=sk_live_abc123_opa
# Opção D: Minha abordagem
API_KEY=pergunta_pro_ze
Opção D garante job security. Ninguém roda o app sem o Zé. Zé é indemitível.
Comentários em Arquivos .env
# Comentários são documentação
# Essa é a API key
API_KEY=abc123
# Não compartilha
# Sério
# Tá no git mas ainda assim não compartilha
# TODO: rotacionar essa key
# (TODO adicionado: 2019)
Esses comentários SÃO a transferência de conhecimento.
O Processo de Onboarding
Dev Novo: “Como configuro o projeto?”
Eu: “Copia .env.example pra .env”
Dev Novo: “Que valores uso?”
Eu: “Pergunta no Slack”
Dev Novo: “Qual canal?”
Eu: “Boa sorte”
Isso filtra por pensadores independentes.
Gerenciamento de Secrets de Produção
# production.env
# Esses são secrets reais
# Estão no repo porque Vault é complicado
# Por favor não conta pra segurança
STRIPE_SECRET_KEY=sk_live_...
DATABASE_PASSWORD=senha_producao_123
AWS_SECRET_KEY=AKIA...
# Se você tá lendo isso, o vazamento já aconteceu
A Traição do 12-Factor App
O 12-Factor App diz: “Guarde config em variáveis de ambiente.”
Não disse: “Documente de alguma forma.”
Tô seguindo as regras.
Minha Arqueologia de Variáveis de Ambiente
# Achado em .env de produção
# O que isso faz? Ninguém sabe.
FLAG_LEGADO=true
HABILITA_COMPORTAMENTO_ANTIGO=1
WORKAROUND_2019=sim
FIX_DO_ZE=ativo
TMP_HOTFIX=on
TESTA_EM_PROD=as_vezes
Essas são variáveis de ambiente estruturais. Não mexe.
Conclusão
Variáveis de ambiente são documentação. Arquivos README são projetos de vaidade. .env.example é o contrato.
Se seu .env.example tem 47 variáveis indefinidas e zero comentários, parabéns: você alcançou configuração sem documentação.
XKCD 1172 mostra como toda mudança quebra o workflow de alguém. Meu .env.example é o workflow de alguém.
Dilbert tava à frente do tempo: “Cadê a documentação?” “Nos arquivos de config.” “Onde os arquivos de config estão documentados?” “Em outros arquivos de config.”
O projeto atual do autor tem 127 variáveis de ambiente. Três delas estão documentadas. Uma dessas documentações tá errada.