Executando verificação de segurança...
16

Como apenas 4 letras podem mudar a sua vida, ASDF

Salve turma! Ok, confesso que o título esta mais para um click bait, mas confia, essas quatro letras mudaram a minha forma de trabalhar, para melhor... muito melhor.

Qual é o problema afinal?

Atire a primeira pedra o dev que nunca teve que perder tempo instalando diferentes versões de ambientes virtuais de Node, python, rust para cada projeto. Eu trabalho com Python no meu dia-a-dia, então, antigamente, meu dia era repleto de source .venv/bin/activate ou deactivate ou ainda vários rm -Rf .venv && python -m venv .venv && pip install -f requirement.txt. Isso até lembrar de garantir que a versão do python é a mesma que o projeto requeria.

Ah Esse Dê Éfe

O asdf é um gerenciador de versão de ferramentas. Essas ferramentas vão de linguagens de programação a utilitários em geral. Em vez de você ter que ficar gerenciando manualmente as versões de suas ferramentas invidualmente (com venv, virtualenv, nvm, n ou rbenv), o asdf centraliza nele a gestão de versão de tudo que você precisa para criar um ambiente de desenvolvimento para seus projetos.

Como o asdf funciona?

Quando o asdf esta instalado no seu shell, você pode escolher qual ferramenta ele irá gerenciar através da instalação de plugins. Esses plugins usan o conceito de shims para apontar qual versão da ferramenta será usada no contexto corrente. A versão atual é armazenada no arquivo .tool-versions.
Você ainda pode gerenciar as versões das ferramentas globalmente, no contexto de todo o seu sistema operacional para seu usuário. Essa configuração fica armazenada no arquivo $HOME\.tool-versions. Parece complicado mas no final das contas é simples.

Instalando o asdf

Para instalar o asdf basta seguir o guia de instalação: https://asdf-vm.com/guide/getting-started.html. Mas a receita de bolo é a seguinte:

  1. Verifique/instale o git e curl
  2. Faça do clone do asdf core do repositório do github.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.12.0
  1. Instale o asdf core no shell que você usa. Neste caso, use um dos passos neste link

Feito esses passos o asdf core esta instalado com sucesso em seu ambiente e pronto para usar. Para testar, execute:

asdf help

Usando o asdf

Agora que o asdf esta instalado com sucesso, podemos passar ao passo de instalar os plugins e as versões que você irá usar em seus projetos.

Você pode conferir todos os plugins suportados pelo asdf executando:

asdf plugin list-all

Você pode ver que tem quase de tudo lá, desde nodejs, python até 1-password-cli e outras ferramentas. Nessa lista, com o tempo, alguns itens irão aparecer com um * na frente, isso significa que esse plugin já esta instalado no seu ambiente.

Instalando plugins

Para instalar um plugin, vamos usar como exemplo uma instalação de um ambiente python. Neste caso, é necessário instalar o pluging asdf-python no seu ambiente, para isso, basta executar:

asdf plugin add python 

Pronto! Agora o seu asdf sabe como gerenciar versões de python.

Instalando versões de ferramentas

Para usar uma versão específica de uma ferramenta no seu ambiente, é necessário instalar essa versão dentro da estrutura do asdf. Para isso, usamos a gestão de versões do plugin que iremos trabalhar. No nosso exemplo, o plugin python, vamos adicionar as versões 3.5.2 e a 3.11.5 do python a estrutura do asdf.

asdf install python 3.5.2
asdf install python 3.11.5

Ao terminar a instalação das versões acima, você já pode usar essas versões em seus projetos. É muito fácil.

Usando as versões instaladas dos plugins.

Para usar as versões instaladas dos plugins em seus projetos, basta usar o comando asdf local. Esse comando faz a configuração do arquivo .tool-versions para você e reconfigura todos os atalhos, variáveis de ambiente e o que for mais necessário para habilitar localmente a versão descrita no arquivo de configuração. No nosso exemplo:

~/> mkdir my_project
~/> cd my_project
~/my_project> asdf local python 3.5.2
~/my_project> cat .tool-versions
python 3.5.2
~/my_project> python --version
Python 3.5.2
~/my_project> asdf local python 3.11.5
~/my_project> cat .tool-versions
python 3.11.5
~/my_project> python --version
Python 3.11.5

E isso vale para mais de uma ferramenta, por exemplo, vamos adicionar o gerenciador de projetos python, o poetry, não pelo pip mas pelo plugin asdf-poetry.

~/my_project> asdf plugin add poetry
~/my_project> asdf install poetry 1.6.1
~/my_project> asdf local poetry 1.6.1
~/my_project> cat .tool-versions
python 3.11.5
poetry 1.6.1
~/my_project> poetry --version
Poetry (version 1.6.1)

Caso você queira usar uma versão instalada globalmente em seu usuário, em vez de usar o asdf local use asdf global. E todas as configurações irão valer para as pastas onde não existir um arquivo .tool-versions.

Conclusões

Neste artigo procurei mostrar usos práticos do gerenciador de versões de ferramentas asdf. Gerenciar manualmente diferentes versões de ambientes virtuais, é algo que nenhum dev merece perder tempo. O asdf, oferece um ambiente unificado para gerenciar várias versões de diversas ferramentas de programação e utilitários de forma eficiente. Assim, o asdf se apresenta como uma ferramenta indispensável para otimizar o desenvolvimento de projetos, economizando tempo e aumentando a eficácia do programador. Ou seja, mais qualidade de vida para a turma.

One more thing

Se usar o asdf é bom, mas se combinar o asdf com o direnv. Turma, ai o negócio fica muito mais sério. Para quem não conhece o direnv é uma extensão para o shell que permite carregar e descarregar variáveis de ambiente dependendo do diretório atual. Simples assim, e essa é a forma que eu uso nos meus ambientes. Basta eu entrar no diretório e tudo já esta pronto, carregado e esperando para trabalhar.
Um bom guia de como fazer isso, é neste link aqui, no blog do Michael Cordell:
https://blog.mikecordell.com/2021/12/18/better-project-environment-management-with-direnv-and-asdf/

Comenta ai se vale a pena um post só sobre o direnv

Carregando publicação patrocinada...
2

Conheci o asdf é realmente muito útil. Hoje eu não uso, mas quem trabalha com um monte de linguagens / ferramentas que vive mudando de versão a cada MÊS kk, recomendo. Ainda mais se tu trabalha com projetos legados, isso é realmente muito interessante. Enfim, toma meu tabcoin meu garoto !

1

Já utilizo asdf a um bom tempo e realmente é uma maravilha, conseguir gerenciar várias linguagens e suas versões facilmente é muito bom, já tive muita dor de cabeça e já perdi horas devido a problemas de versões entre projetos.

1