Aloittaessasi uudessa projektissa tulee usein jo ensimetreillä vastaan tyypillinen ongelma: arvokasta työaikaa tuhlaantuu kehitysympäristön pystyttämiseen. Sama tilanne on edessä esimerkiksi uuden koneen kanssa. Jos hyvin käy, on tarvittavat ohjelmistot versioineen ja konfiguraatioineen dokumentoitu jonnekin. Hyvässä lykyssä tämä dokumentaatio on myös ajan tasalla. Silti tarvittavien ohjelmistojen etsimiseen, asentamiseen ja konfigurointiin saattaa mennä yllättävän paljon aikaa. Huonoimmassa tilanteessa, eli dokumentaation puuttuessa kokonaan, pitää vielä lisäksi ensimmäisenä selvittää tarvittavat ohjelmistot esimerkiksi työkavereita haastattelemalla tai yrityksen ja erehdyksen kautta.
Helpottaakseni ja nopeuttaakseni kehitysympäristön pystytystä olen käyttänyt monessa projektissa apuna työkalua nimeltä Vagrant. Vagrantin ideana on kaikessa lyhykäisyydessään mahdollistaa kehitysympäristön pystytys vain yhdellä komennolla: ”vagrant up”. Vagrantin toiminta perustuu konfiguraatiotiedostoon, jolla kuvataan projektin tarvitsema kehitysympäristö. Konfiguroitavia asioita ovat esimerkiksi käytettävä käyttöjärjestelmä ja asennettavat ohjelmistot. Tämän konfiguraation perusteella Vagrant sitten luo uuden virtuaalikoneen ensimmäisellä käyttökerralla ja alustaa sen konfiguraation mukaiseksi. Tämän jälkeen kehitysympäristö onkin valmiina käytettäväksi virtuaalikoneessa. Virtuaalikoneeseen saadaan yhteys esimerkiksi SSH:lla tai vaihtoehtoisesti voidaan käyttää suoraan virtuaalikoneen omaa käyttöliittymää. Projektin tiedostot saadaan helposti synkronoitua isäntäkoneen ja virtuaalikoneen välillä jaetun hakemiston kautta.
Projektin Vagrant-konfiguraatio kannattaa tallentaa projektin versionhallintaan, jolloin se on helposti kaikkien saatavilla ja projektin uudet jäsenet saavat kehitysympäristön helposti asennettua. Usein projektin aikana tulee myös tarve muuttaa Vagrant-konfiguraatiota, kun vaikka halutaan ottaa käyttöön jokin uusi työkalu. Tällöin muutokset on paras jakaa projektitiimin kesken versionhallinnan kautta. Virtuaalikoneeseen manuaalisesti tehtäviä muutoksia tulisi välttää, poikkeuksena kehittäjän henkilökohtaiset asetukset ja sovellukset. Näin varmistetaan konfiguraation pysyminen ajan tasalla. Kun kaikilla kehittäjillä on käytössä samalla konfiguraatiolla luotu virtuaalikone, pystytään kehitysympäristöt pitämään mahdollisimman samanlaisina eri kehittäjillä. Näin pystytään pääosin välttämään tilanteet, joissa kehitetty ohjelmisto toimii kehittäjän ympäristössä mutta ei tuotantoympäristössä tai työkaverin kehitysympäristössä.
Vagrantia käytettäessä on tarjolla useampikin vaihtoehto virtuaalikoneen automaattiseen provisiointiin eli esimerkiksi ohjelmistojen asentamiseen ja niiden konfigurointiin. Yksinkertaisinta on käyttää tavallista shell-skriptiä, jolla onnistuu kätevästi esimerkiksi ohjelmistopakettien asentaminen käyttöjärjestelmän pakettienhallintatyökalulla. Omissa projekteissani tämä tapa onkin riittänyt ainakin toistaiseksi. Edistyneempiä vaihtoehtoja ovat esimerkiksi Ansible, Chef ja Puppet. Näihin vaihtoehtoihin ja Vagrantin käyttöön muutenkin kannattaa tutustua Vagrantin erinomaisen dokumentaation avulla.
Omat kokemukset Vagrantista liittyvät pääosin projekteihin, joissa on kehitetty Linux-pohjaisia sulautettuja järjestelmiä. Näissä projekteissa käytettävät työkalut ovat myös tyypillisesti Linux-pohjaisia. Ainakin tämän tyyppisissä projekteissa Vagrant helpottaa ja nopeuttaa huomattavasti kehitysympäristön pystytystä ja vähentää siihen tuhlautuvaa työaikaa. Myös tarvittavan Vagrant-konfiguraation tekeminen on useimpien projektien osalta varsin suoraviivaista ja kokemuksen myötä jo melko nopeaakin.
Täysin ongelmatonta Vagrantin käyttö ei silti ole aina ollut. Esimerkiksi tiedostojen synkronointiin isäntäkoneen ja virtuaalikoneen välillä käytetyn jaetun hakemiston kanssa on välillä ollut monenlaisia ongelmia ja sen nopeuskin on varsin vaatimaton. Myös Vagrantin ja käytetyn virtualisointiohjelmiston (VirtualBox) välisessä kommunikoinnissa on välillä ollut satunnaisia ongelmia. Nämäkin ongelmat saattavat kyllä olla lähtöisin Vagrantin sijaan VirtualBoxista. Ratkaisuna näihin ongelmiin voisi olla jonkin toisen virtualisointiohjelmiston, esimerkiksi VMwaren, käyttäminen. Muiden virtualisointiohjelmistojen käyttäminen on mahdollista Vagrantin liitännäisten avulla.
Vaikka ongelmiakin on, niin Vagrant on kuitenkin erittäin hyödyllinen työkalu. Kun alussa käyttää hieman aikaa sen opetteluun, niin jatkossa sen avulla säästää sekä omaa että työkavereiden aikaa. Suosittelen kokeilemaan.