# Criando seu ambiente com ASDF

* * *

Fala, galera, beleza? Neste artigo, vamos criar um ambiente utilizando uma ferramenta super poderosa chamada ASDF. Esta é uma ferramenta extremamente útil que utilizo no meu dia a dia. Basicamente, você consegue gerenciar múltiplas versões de aplicativos ou runtimes na sua máquina. Imagine que você está trabalhando no desenvolvimento de uma aplicação usando a nova versão do PHP 8.3, e também precisa fazer a manutenção daquele legadinho gostoso (quem nunca, né?). Com o ASDF, você consegue ter várias versões do PHP instaladas na sua máquina, e não apenas o PHP. Você pode ter Node.js, Docker Composer, .NET Core, Python, Terraform, AWS CLI, e muito mais.

*   [O que é o ASDF ?](#link-1)
    
*   [Vantagens](#link-2)
    
*   [Mão na massa!](#link-3)
    
*   [Instalando dependências para o ASDF](#link-4)
    
*   [Instalando o ASDF](#link-5)
    
*   [Instalando PHP 8.1, 8.2 e 8.3](#link-6)
    
*   [Conclusão](#link-7)
    

## O que é o ASDF?

ASDF é um gerenciador de versão de ferramentas. Todas as definições de versão estão contidas em um arquivo .tool-versions que você pode adicionar ao seu projeto Git para compartilhar com sua equipe, garantindo que todos estejam na mesma versão.

A maneira antiga de trabalhar exigia vários gerenciadores (nvm, n, rben, e phpbrew) de versão CLI, cada um com sua API, arquivos de configuração e implementação (por exemplo, manipulação de $PATH, variáveis de ambiente, etc.). ASDF fornece uma interface única e um arquivo de configuração para simplificar os fluxos de desenvolvimento e pode ser estendido a todas as ferramentas e runtimes por meio de uma interface simples.

## Vantagens

ASDF garante que as equipes usem exatamente as mesmas versões de ferramentas, com suporte para muitas ferramentas por meio de um sistema de plugin e a simplicidade e familiaridade de ser um único script shell.

*   Utilizar apenas uma ferramenta para gerenciar as versões
    
*   Plugins escritos pela comunidade
    
*   Arquivo de configuração para gerenciar versões a partir de um diretório
    

## Mão na massa!

Neste artigo, vou preparar um ambiente de desenvolvimento do zero utilizando o ASDF. Bora lá então! Para nosso ambiente, vamos instalar as seguintes ferramentas:

*   PHP 8.3
    
*   PHP 8.2
    
*   PHP 8.1
    

## Instalando dependências do ASDF

Para este ambiente, vamos seguir a instalação via Linux. Para instalar o ASDF, acesse a página oficial da documentação: [https://asdf-vm.com/](https://asdf-vm.com/)

Antes de começar, precisamos instalar as dependências para o ASDF. [https://asdf-vm.com/guide/getting-started.html#\_1-install-dependencies](https://asdf-vm.com/guide/getting-started.html#_1-install-dependencies)

```shell
sudo apt-get install curl git
```

## Instalando ASDF

A instalação do ASDF é bastante simples, utilizando o comando git clone.

Nota: O comando abaixo está usando a versão v0.13.1. Talvez esta versão esteja desatualizada; acesse o seguinte link e veja qual é a versão mais recente: [https://asdf-vm.com/guide/getting-started.html#official-download](https://asdf-vm.com/guide/getting-started.html#official-download)

```shell
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
```

Se você utiliza algum shell como zsh, fish e PowerShell, siga as configurações corretas para cada shell [https://asdf-vm.com/guide/getting-started.html#\_3-install-asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf)

Após a instalação do ASDF, você pode executar o seguinte comando para verificar se tudo ocorreu bem na instalação.

```shell
asdf --version #v0.13.1
```

Agora que temos o ASDF instalado em nosso ambiente, precisamos entender como ele funciona.

Basicamente, você precisa adicionar os plugins das ferramentas que você deseja instalar. Neste cenário, queremos instalar o PHP, então precisamos procurar um plugin do ASDF para o PHP, e assim por diante para outras ferramentas ou linguagens de programação.

## Instalando PHP 8.1, 8.2, 8.3

Para instalar o PHP, vamos utilizar o asdf-php, que é um plugin do ASDF para o PHP. [https://github.com/asdf-community/asdf-php](https://github.com/asdf-community/asdf-php)

Antes de tudo, precisamos registrar esse plugin em nosso ASDF com o seguinte comando:

```shell
asdf plugin-add php https://github.com/asdf-community/asdf-php.git
```

Após adicionar como plugin, precisamos instalar algumas dependências em nosso sistema operacional. No próprio repositório do plugin asdf-php, o autor fala sobre as dependências que precisam ser instaladas antes.

Nota: Essas dependências são do PHP e não do ASDF, pois o ASDF compila o PHP na sua máquina. Para facilitar, vou listá-las aqui.

```shell
sudo apt-get install -y \
    autoconf \
    bison \
    build-essential \
    gettext \
    libgd-dev \
    libcurl4-openssl-dev \
    libedit-dev \
    libicu-dev \
    libjpeg-dev \
    libmysqlclient-dev \
    libonig-dev \
    libpng-dev \
    libpq-dev \
    libreadline-dev \
    libsqlite3-dev \
    libssl-dev \
    libxml2-dev \
    libzip-dev \
    openssl \
    pkg-config \
    re2c \
    zlib1g-dev
```

Depois que terminar a instalação de todas as dependências, podemos instalar o PHP em nossa máquina. Para verificar quais versões existem, execute o seguinte comando.

```shell
asdf list all php
```

O comando acima retornará uma lista de todas as versões disponíveis no PHP. O interessante é que ele também retorna as versões que estão em desenvolvimento, permitindo testar recursos em desenvolvimento. Para começar, vamos instalar a versão `8.1.26`, então execute o seguinte comando.

```shell
asdf install php 8.1.26
```

A instalação pode demorar um pouco, pois o PHP será compilado na sua máquina. Além disso, é importante observar que o gerenciador de pacotes Composer e o PECL também serão instalados em cada versão.

Agora, precisamos repetir o processo para as outras versões do PHP. Vamos lá:

```shell
asdf install php 8.2.13
```

```shell
asdf install php 8.3.0
```

Quando a instalação da última versão terminar, precisamos configurar qual será a versão padrão instalada em nosso ambiente. Para isso, execute o seguinte comando.

```shell
asdf global php 8.3.0
```

Com esse comando, definimos a versão padrão do PHP em nosso ambiente. Após executar o comando acima, você pode executar o `php -v` em qualquer lugar do seu sistema operacional, obtendo a seguinte saída.

```shell
PHP 8.3.0 (cli) (built: Dec 17 2023 11:09:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend Technologies
```

Agora, a cereja do bolo: vamos criar em nosso sistema de arquivo três pastas, imaginando que cada pasta é um projeto que você está trabalhando, e cada projeto precisa executar em uma versão diferente do PHP.

Vamos acessar a raiz do nosso usuário e criar uma pasta Code. Dentro dessa pasta, vamos criar as pastas para cada projeto.

```shell
# Acessar o diretório raiz do nosso usuário
cd ~

# Criar a pasta Code
mkdir Code

# Acessar a pasta Code
cd Code

# Criar as pastas de cada projeto
mkdir projeto-1
mkdir projeto-2
mkdir projeto-3
```

Depois de criar todas as pastas de todos os projetos, vamos acessar cada pasta e configurar nossa versão do PHP desejada.

```shell
# Acessar o projeto-1
cd ~/Code/projeto-1

# Configurar a versão 8.1.26 para o projeto-1
asdf local php 8.1.26

# Verificar a versão do PHP
php -v 

# Saída
PHP 8.1.26 (cli) (built: Dec 17 2023 11:09:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend Technologies

# Acessar o projeto-2
cd ~/Code/projeto-2

# Configurar a versão 8.2.13 para o projeto-2
asdf local php 8.2.13

# Verificar a versão do PHP
php -v 

# Saída
PHP 8.2.13 (cli) (built: Dec 17 2023 11:09:15) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.0, Copyright (c) Zend Technologies
```

Como você pode ver, ao executar o comando `php -v`, ele retorna uma versão específica para a pasta e, ao executar de outra pasta qualquer, retorna a versão padrão do PHP (8.3.0). Dessa forma, podemos configurar uma versão para cada pasta específica.

## Conclusão

ASDF é uma ferramenta fantástica. Sempre que preciso instalar algum componente no meu SO, eu verifico se existe algum plugin ASDF. Lembrando que existem muitos plugins escritos para o ASDF, com certeza há algum para sua linguagem favorita. Adicionei um repositório Git que centraliza uma lista de plugins para o ASDF: [https://github.com/asdf-vm/asdf-plugins](https://github.com/asdf-vm/asdf-plugins).

Obrigado, galera!!! Qualquer dúvida ou crítica é muito bem-vinda; fiquem à vontade para adicionar comentários.
