Tanti vantaggi con Vagrant

In questo articolo vedremo come attraverso Vagrant una macchina virtuale diventa un vantaggio per un team di sviluppo.

Il punto è semplicemente quello di avere una macchina virtuale come ambiente di sviluppo. Già il concetto è semplice, la fruizione, almeno fino all’arrivo di Vagrant un po’ meno.

La prima volta che ho cercato di applicare questo concetto ero ancora all’università. Stavo studiando per l’esame di “sistemi operativi”. Il sistema operativo in questione era linux. Parte del programma era quello di scrivere programmi in C. Io a quel tempo avevo appena acquistato un mac ( ultima versione dei RISC prima degli intel ). Il C è un linguaggio portabile, ma noi stavamo talmente tanto a basso livello che il risultato dei programmi su mac e linux era diverso. Da qui l’idea di montare una macchina virtuale con linux dentro. Tutto bene? insomma. Le performance non erano il punto forte e l’ambiente visuale era decisamente lento, non che mancante del mio IDE preferito (al tempo TextMate). Dovevo trovare un’altro modo: Attraverso ssh l’accesso alla shell era garantito, per compilare avevo risolto. Ma per l’ide, vim non era ancora mio amico. Macfuse con sshfs facevano al caso mio. Praticamente attraverso questo strumento ero riuscito a montare su una directory del Mac l’accesso ai file di Linux, in questo modo potevo aprire i file sul mio IDE preferito e compilare i sorgenti direttamente dalla shell.
Molto macchinoso ma alla file funzionante.

La seconda volta è successo presso Archebit, società nella quale ho cominciato a lavorare con Fabio. Il quale il primo giorno mi fornisce un CD contenente un’immagine di Virtualbox contenente un sistema operativo già completamente configurato per portare avanti il progetto per il quale ero stato assunto. Tutti gli sviluppatori lavoravano esattamente sulla stessa macchina e non c’era pericolo di creare conflitti. L’idea era ottima, il problema anche qui stava non solo nelle performance, ma anche nel far evolvere la macchina virtuale insieme alle necessità del progetto. Aprire una macchina virtuale e cominciare a lavorare al suo interno direttamente con l’editor lascia decisamente a desiderare. Le difficoltà aumentavano man mano che l’applicazione diventava sempre più “pesante” tanto che ad un certo punto non era possibile lavorare. Spesso la macchina si piantava e non c’era modo di andare avanti se non riavviando tutto.

Tutto questo l’ho raccontato fondamentalmente per individuare due punti a favore delle macchine virtuali:

  • Permettono di lavorare su un’unico sistema noto
  • Permettono di lavorare nel proprio ambiente

Vagrant mette a disposizione questi due aspetti, ma fa anche molto di più. Fondamentalmente si tratta di un’applicativo scritto in Ruby che sfruttando le API messe a disposizione da VirtualBox è in grado di manipolare la gestione delle macchine virtuali al suo interno. Stiamo parlando di un modo programmatico di gestire e costruire macchine virtuali.
Ma il valore aggiunto di questo strumento è il “Vagrantfile”, un file all’interno del quale si inseriscono tutte le specifiche riguardo la VM che vogliamo preparare. Si tratta in tutti i sensi di una ricetta che stabilisce cosa mettere come preparare la macchina virtuale.

Una volta scritto il “Vagrantfile” ( in rete si trovano diversi wizard per la creazione semplificata, uno fra tutti https://puphpet.com/ ) per creare la macchina virtuale sarà sufficiente lanciare il comando:

~ > vagrant up

Vagrantup

La prima volta ci vorrà un pochino in più di tempo. Oltre a scaricare la versione della iso direttamente da internet ci saranno da scaricare tutti i pacchietti relativi alle varie versioni software da installare ( in 10 minuti dovrebbe essere finito). Dopo di che il tempo di up sarà molto minore e si potra rapidamente cominciare a sviluppare.

A questo punto possiamo tirare le somme e valutare i vantaggi:

  • La configurazione necessaria per replicare l’ambiente di produzione è scritta all’interno del “Vagrantfile” (vedremo che in realtà ci sono file aggiuntivi ma il concetto non cambia) e a questo punto è anche versionabile, ovvero l’ambiente evolve cosi come evolve il progetto.
  • Integrare un nuovo sviluppatore nel team è semplice e rapido, niente di più che eseguire un vagrant up e l’ambiente è pronto
  • Diversi progetti sulla stessa macchina senza conflitti. Stiamo sviluppando contemporaneamente due progetti, ma uno lavora con PHP 5.3 e l’altro con la 5.5. Sbagliare ambiente ( ammesso che si riesca a far coesistere ) è molto semplice. Tra l’altro bisogna fare attenzione a quello che si installa sulla propria macchina perche è quella che si usa per lo sviluppo. Con Vagrant questo problema è superato, Ogni progetto ha la sua VM completamente isolata da tutte le altre.
  • Evoluzione semplificata: dobbiamo cambiare la versione di un software (per esempio passare a PHP 5.5 appena uscito). Niente di piu semplice si modifica il Vagrantfile si committa sul repository. In questo modo le modifiche arriveranno a tutti i membri del progetto che non dovranno far altro che lanciare il comando “vagrant provisioning”
  • Capacità di saper configurare un sistema non necessaria: all’interno di un progetto di sviluppo non solo gli sviluppatori devono avere l’ambiente configurato. Pensiamo ad uno sviluppatore di frontend ad un creativo o ad un copywriter. Configurare correttamente un ambiente di svilupo non è certo una loro skill. Ecco qui che con vagrant non sarà piu necessario perdere tempo a configurare le loro macchine.

Allo stato attuale non sono ancora riuscito a rendere questo strumento un elemento di default nell’azienda per la quale lavoro: ci sono ancora delle pecche di performance che vanno limate. Si tratta comunque di un prodotto decisamente giovane che non potrà far altro che migliorare con il tempo. Il dato di fatto è che Vagrant, non solo in un team di sviluppo allargato, cambia le carte in tavola.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...