Gerencie todas (ou quase) ferramentas de desenvolvimento com asdf

Gerencie todas (ou quase) ferramentas de desenvolvimento com asdf

No meu dia a dia peciso lidar com diferentes instalações de Node.js, Java, Maven, PHP, Rust, Ant (só eu uso?), .net, Go, Grails, Ruby e com o tempo isto vai se tornando uma tarefa acidentalmente complexa.

Há gerenciadores de versão para estes diversos ambientes de desenvolvimento, claro: de imediato alguns me veem à memória:

  • Pra Node.js temos o NVM
  • Trabalhando com Ruby?  RVM
  • Java e diversas ferramentas do ecossistema (como Maven, Ant, JDK, etc)? SDKMan – para o qual inclusive escrevi um guia no passado.
  • Python? Pyenv!

E a lista segue. Todas estas ferramentas são muito boas quando você trabalha só com um ou dois ambientes de desenvolvimento, mas quando é necessário mais de um seu setup pode virar um caos: de repente você se vê diante de uma pletora de gerenciadores de versão instalados em seu computador. Isto sem mencionar que cada opção é mais uma ferramenta que você precisa aprender e dominar.

Asdf resolve este problema unificando todos esses gerenciadores de versão em uma única ferramenta. Tive meu primeiro contato com ele em 2022 e foi uma das melhores surpresas do ano pra mim.

Neste post vou lhe ensinar o básico do básico e lhe mostrar os caminhos para que possa se aprofundar em seu uso caso queira.

Instalação e limitações

Esta é aquela seção em que o autor do post enche linguiça mostrando como instalar a ferramenta. Adianto sua vida: este link da documentação mostra o que você deve ter instalado e como instalar o asdf no seu computador. Clique aqui.

Seguem algumas informações que considero úteis para você que vão além do link acima.

  • Usa Windows? Você só vai conseguir usar bem mesmo o asdf via WSL (de preferência 2 ou posterior). Não há suporte para WSL 1 ou mesmo interesse em desenvolver isto no futuro, tal como pode ser conferido neste link.
  • Os principais requisitos para ter o asdf executando em seu computador são a instalação do Git e curl.
  • O asdf é limitado em algumas situações: em ambientes de desenvolvimento como PHP ou Ruby que precisam de bibliotecas instaladas no sistema operacional você se verá esporadicamente precisando instalá-las no seu sistema pois não serão instaladas pelo asdf.

Como o asdf funciona: os plugins

A arquitetura do asdf se baseia no conceito de plugins, que são os responsáveis por instalar e gerenciar as diferentes versões das nossas ferramentas.

Os plugins são escritos pela própria comunidade, e são vários! Caso queira ver todos os plugins disponíveis, execute o comando abaixo:

asdf plugin list-all

O resultado pode lhe surpreender (a mim sempre surpreende). Você encontrará inclusive ferramentas como o 1password na lista, tal como pode ser visto no print a seguir extraído do meu computador.

a lista de plugins é IMENSA!

Para instalar um plugin, execute o comando a seguir:

asdf plugin add [nome do plugin]
O exemplo abaixo instala o plugin do Ant
asdf plugin add ant

O asdf só irá gerenciar para você as ferramentas para as quais há plugins instalados em seu computador. Instalados todos os plugins que você precisa, use o comando abaixo para listar o que está disponível para você:

asdf plugin list

A saída no meu computador é exposta no print abaixo:

“plugin-list” e “plugin list” tem o mesmo resultado

Dica: lembra quando disse que uma das limitações do asdf é que para algumas ferramentas que precisam de bibliotecas instaladas no sistema operacional você precisaria executar sua instalação manualmente? Na maior parte das vezes são dependências do próprio plugin. Você pode descobrir quais são estas dependências visitando o link que aprece ao lado do plugin ao executar o comando asdf plugin list-all.

Instalando versões das suas ferramentas

Com todos os pugins que você precisa instalados, basta executar o comando a seguir:

asdf install [nome do plugin] [versão que você quer instalar]

O exemplo abaixo instala a versão 8.66.0.15 do JDK disponibilizado pela Azul

asdf install java zulu-8.66.0.15

O plugin irá buscar nos repositórios que usa a versão da ferramenta e irá instalá-la em seu computador. Mas como você pode saber quais as versões disponíveis? Com o comando abaixo:

asdf list-all [nome do plugin]

Exemplo listando todas as versões do Java disponíveis:

asdf list-all java
Exemplo da listagem de versões do Maven disponíveis para uso

E pra saber quais as versões instaladas de uma ferramenta no seu computador? Você usa o comando abaixo:

asdf list [nome do plugin]

O exemplo a seguir lista as versões do JDK instaladas em seu computador:

asdf list java

Dica: a tecla tab faz auto complete no asdf. Sendo assim, se você digitar asdf install java zulu-11 e apertar a tecla tab, irão aparecer as opções disponíveis.

E o finalmente: como selecionar a versão das suas ferramentas

Você instalou a versão que precisava da sua ferramenta (Ant, por exemplo (alguém lembra dele?)) e tenta executá-la em seguida. Eis que aparece ESTA mensagem de erro:

É necessário definir qual a versão padrão da mesma antes de usá-la (meio bobo isto se estamos instalando a primeira versão, né?). Você faz isto com o comando abaixo:

asdf global [plugin] [versão]

No exemplo a seguir defino como a gloriosa versão padrão do Ant a 1.10.13.

asdf global ant 1.10.13

Agora algo lindo: cada diretório com a sua versão da ferramenta

É comum termos diferentes projetos, cada qual contendo sua próprias dependências. Um pode precisar da versão 8 do JDK enquanto outro a 7. Aqui entra um recurso muito útil do asdf: ele permite isto! Observe o print abaixo:

No diretório ant_novo, a versão do Ant é a 1.10.13, equanto no diretório ant_velho é a 1.9.11. Observe que não executo o comando asdf para mudar de versão, apenas mudo de diretório. Como faço isto?

Simples: no diretório que você quer customizar a versão da ferramenta use o comando a seguir:

asdf local [nome do plugin] [nome da versão]

Exemplo: definindo a gloriosa versão 1.9.11 do Ant no diretório ant_velho:

asdf local ant 1.9.11

O que o asdf faz é criar no diretório um arquivo chamado .tool-versions que contém as versões de todas as ferramentas usadas por aquele diretório. O print abaixo expõe o conteúdo do arquivo no diretório ant_velho:

Dica: na realidade o comando asdf global cria um arquivo .tool-versions no diretório home do usuário. Para descobrir qual versão da ferramenta a ser usada, o que o asdf faz é uma busca recursiva no diretório corrente até o diretório home buscando por este arquivo. Bem bolado, né?

Concluindo e um uso bem útil pro asdf

Dado que o asdf tem esta enormidade de plugins um uso muito interessante dele é em ambientes de integração contínua. Fica muito fácil instalar todas as ferramentas necessárias para a execução neste ambiente. Evita por exemplo a criação de imagens em ambientes dockerizados.

Asdf é uma destas ferramentas simples que no primeiro contato você não dá muita bola mas que de repente te dão um impulso imenso na produtividade. Espero que lhe seja tão útil quanto tem sido pra mim.

Se quiser um tutorial mais extenso (que mostra inclusive como desinstalar ferramentas e plugins) acesse este link da documentação oficial: https://asdf-vm.com/guide/getting-started.htm

PS: a única grande limitação pra mim é ainda não funcionar de forma nativa no Windows. Ali seria perfeito.

Posts Relacionados