Qualche giorno fa, parlando di Laravel Sail ed ambienti di sviluppo, ho scritto di quanto sia interessante (ed importante) avere un environment semplice da installare e configurare quando lavoriamo con i nostri progetti.
Quante volte, però, capita di aver bisogno di fare una “prova al volo”?
Magari vogliamo solo provare un nuovo package, oppure testare del codice senza troppi fronzoli. Niente database, Redis o altro. Giusto il runtime di quel linguaggio, magari in una versione specifica.
La soluzione di cui abbiamo bisogno è…
Asdf?
Per questi casi, uso uno strumento che si chiama asdf. No, non ho premuto i primi tasti a caso sulla tastiera, si chiama davvero così. Asdf è un tool che permette di installare in locale una o più versioni specifiche di qualsiasi dei linguaggi supportati. Mi piace per tre motivi:
- supporta letteralmente una marea di linguaggi (si può vedere qui la lista);
- installare un linguaggio è questione di un singolo comando, il resto viene fatto tutto automaticamente;
- è possibile installare più versioni di uno stesso linguaggio contemporaneamente, e passare da una versione all’altra è semplicissimo;
Impariamo come usarlo.
Installare Asdf
Per installare Asdf, l’unico requisito è git. Quindi, eseguiamo:
1 2 3 4 5 |
git clone https://github.com/asdf-vm/asdf.git ~/.asdf cd ~/.asdf # checkout dell'ultimo branch git checkout "$(git describe --abbrev=0 --tags)" |
Fatto questo, assicuriamoci di aggiungere asdf alla nostra shell correttamente. Consultiamo la guida sul sito in base al sistema operativo / shell usata.
Fatto? Riavviamo la shell e verifichiamo l’installazione con un
1 |
asdf |
che dovrebbe mostrarci la versione installata e l’elenco dei comandi disponibili.
Installare PHP con Asdf
Asdf lavora con un sistema a plugin. Per ogni linguaggio che si vuole installare, infatti:
- si installa il plugin dedicato;
- si installano le versioni specifiche del linguaggio di cui abbiamo bisogno;
Proviamo ad installare PHP (qui la pagina). Iniziamo dal plugin, eseguendo
1 |
asdf plugin-add php https://github.com/asdf-community/asdf-php.git |
Fatto questo, dobbiamo scegliere quale versione di PHP installare. Possiamo vedere la lista completa di tutte le versioni di PHP installabili da asdf con
1 |
asdf list all php |
che ci restituirà una listona simile a questa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
... 7.4.13 7.4.13RC1 7.4.14RC1 8.0.0 8.0.0RC2 8.0.0RC3 8.0.0RC4 8.0.0RC5 8.0.0alpha1 8.0.0alpha2 8.0.0alpha3 8.0.0beta1 8.0.0beta2 8.0.0beta3 8.0.0beta4 8.0.0rc1 8.0.1RC1 |
Possiamo dire che la scelta non manca! Proviamo ad installare la 8.0.0 eseguendo
1 |
asdf install php 8.0.0 |
ed aspettiamo qualche minuto. Asdf si occuperà di tutto il resto. A cose fatte, eseguiamo
1 2 3 4 5 |
asdf list php # che dovrebbe farci vedere... 8.0.0 |
Perfetto: PHP c’è! Non rimane che chiedere ad asdf di impostarlo in modo tale da poterlo usare “normalmente” da linea di comando.
1 2 3 4 5 6 7 8 |
asdf global php 8.0.0 # Proviamolo! php -v PHP 8.0.0 (cli) (built: Dec 24 2020 17:05:44) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies |
Funziona!
Attenzione! Il processo di installazione potrebbe dare errori, per problemi legati all’assenza di sqlite3 o di oniguruma. Se è così, installiamoli per il nostro OS e poi riproviamo. Nel mio caso, ho risolto eseguendo
1 2 |
sudo apt-get install libsqlite3-dev sudo apt-get install libonig-dev |
Cambiare Versione con Asdf
Adesso vediamo meglio una problematica in cui Asdf può aiutarci davvero. Molto spesso, infatti, lavoro con diverse versioni di PHP. Può servirmi quando scrivo un package, o magari quando voglio vedere le differenze di esecuzione di uno snippet di codice tra un linguaggio e l’altro.
Qui entra in gioco la potenza di Asdf. Abbiamo PHP 8.0: installiamo anche PHP 7.4.
1 |
asdf install php 7.4.0 |
Attendiamo un paio di minuti, dopodiché…
1 2 3 4 5 6 7 8 9 10 11 12 13 |
php -v PHP 8.0.0 (cli) (built: Dec 24 2020 17:05:44) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies # OH! Giusto, dobbiamo cambiare versione... asdf global php 7.4.0 # ok, riproviamo! php -v PHP 7.4.0 (cli) (built: Dec 24 2020 16:58:38) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies |
Perfetto. Adesso abbiamo due versioni di PHP funzionanti, in contemporanea, in locale. Passare da una versione all’altra è semplicissimo: non dobbiamo fare altro che usare il comando asdf global php X, dove X è la versione di cui abbiamo bisogno.
E non finisce qui! Prima di concludere, ci sono un altro paio di cose interessanti da considerare:
- il comando asdf global imposta la versione del linguaggio a livello dell’intera macchina;
- se ci interessa impostare una versione specifica soltanto per la sessione corrente della nostra shell, basta usare asdf shell LINGUAGGIO VERSIONE (esempio: asdf shell php 8.0.0);
- se ci interessa impostare una versione specifica soltanto per la directory in cui ci troviamo al momento, basta usare asdf local LINGUAGGIO VERSIONE (esempio: asdf local php 7.4.0). Il comando local può risultare molto comodo quando si lavora con diversi progetti con diverse versioni dello stesso linguaggio;
- di tanto in tanto, eseguite il comando asdf plugin update –all, che si occupa di aggiornare i plugin dei vari linguaggi che avete installato;
Per oggi direi che è tutto. Su Asdf in realtà c’è ancora molto da dire, magari approfondirò di più il tema in futuro. Voi lo avete usato? Che ne pensate?