Nel 2004 l’azienda americana dedita allo sviluppo di ap­pli­ca­zio­ni web 37signals (oggi Basecamp) rilasciò l’ap­pli­ca­zio­ne per la gestione dei progetti Basecamp, che conteneva, tra le altre, funzioni come la to-do list, il time tracking e un sistema per lo scambio di messaggi. Faceva parte del software un’ar­chi­tet­tu­ra in­for­ma­ti­ca di base, creata dal pro­gram­ma­to­re David Hei­ne­meier Hansson proprio per questo scopo, compilata ancora in quello stesso anno e ri­la­scia­ta nel 2005 come framework per ap­pli­ca­zio­ni web in­di­pen­den­te e open source. Il nome dell’ar­chi­tet­tu­ra svi­lup­pa­ta in Ruby e oggi più co­no­sciu­ta è Ruby on Rails, in acronimo RoR o anche solo Rails. Nessuno aveva previsto il fatto che il framework, di cui ora se ne occupa un intero team di sviluppo, sarebbe stato svi­lup­pa­to fino al punto di diventare una delle soluzioni più richieste per la creazione di nuove ap­pli­ca­zio­ni web.

Cos’è Ruby on Rails?

Dal momento che Ruby on Rails era ri­la­scia­to all’epoca con licenza MIT, i pro­gram­ma­to­ri hanno svi­lup­pa­to ul­te­rior­men­te e co­stan­te­men­te il framework. Fino ad oggi la filosofia di base è rimasta la stessa: il principio “Don’t repeat yourself” (DRY, cioè “non ripeterti”) resta sempre valido. Quindi ogni in­for­ma­zio­ne dovrebbe essere presente in un progetto basato sul framework Rails solo una volta. Così, ad esempio, basta definire le colonne di una tabella solo nel database, senza re­gi­stra­re queste in­for­ma­zio­ni anche nel codice sorgente o in un file di con­fi­gu­ra­zio­ne separato. Il modulo Ac­ti­ve­Re­cord im­ple­men­ta­to legge le direttive di­ret­ta­men­te dal database.

Il secondo paradigma del design è la “Con­ven­tion over con­fi­gu­ra­tion” (cioè “con­ven­zio­ne prima della con­fi­gu­ra­zio­ne”). Il framework RoR sta­bi­li­sce quindi precise con­ven­zio­ni, ad esempio nella de­no­mi­na­zio­ne delle classi. Se gli svi­lup­pa­to­ri si attengono a queste con­ven­zio­ni, si risparmia molto lavoro durante la con­fi­gu­ra­zio­ne. Ma Ruby on Rails permette anche con­fi­gu­ra­zio­ni al­ter­na­ti­ve, ragion per cui la fles­si­bi­li­tà resta com­ple­ta­men­te intatta nella pro­gram­ma­zio­ne della vostra web app.

Ruby: un lin­guag­gio fles­si­bi­le e mul­ti­piat­ta­for­ma del framework Rails

Nella metà degli anni ’90, il giap­po­ne­se Yukihiro Matsumoto rilasciò il lin­guag­gio di pro­gram­ma­zio­ne orientato agli oggetti Ruby. Ini­zial­men­te usato solo in Giappone, questo lin­guag­gio di scripting si è nel frattempo affermato in tutto il mondo come un’al­ter­na­ti­va amata rispetto ai leader del mercato PHP, Python, ecc. Questo successo non è però nato per puro caso: Matsumoto ha stabilito come obiettivo prin­ci­pa­le il di­ver­ti­men­to continuo nella pro­gram­ma­zio­ne e quindi ha combinato le migliori proprietà degli altri linguaggi in Ruby. In quanto lin­guag­gio di scripting in­ter­pre­ta­to, il codice viene eseguito da un in­ter­pre­te, che sebbene comporti una piccola di­mi­nu­zio­ne della velocità al contrario degli script pre­com­pi­la­ti, lo rende anche de­ci­sa­men­te più fles­si­bi­le e dinamico. Dal momento che per tutti i sistemi operativi comuni esistono in­ter­pre­ti specifici, il codice Ruby può essere uti­liz­za­to grazie a questo aspetto su tutti i tipi di piat­ta­for­ma. Una ca­rat­te­ri­sti­ca molto im­por­tan­te di Ruby è la capacità mul­ti­pa­ra­dig­ma, che con­trad­di­stin­gue ad esempio anche il lin­guag­gio C++. Quindi non siete legati ad un paradigma di pro­gram­ma­zio­ne specifico. Grazie al “principle of least asto­nish­ment” (let­te­ral­men­te “principio della minima sorpresa”) usate il lin­guag­gio di scripting in maniera intuitiva e, di regola, non incorrete in com­por­ta­men­ti ina­spet­ta­ti. Ruby, software open source con licenza libera BSD, gode di una community grande e molto attiva, che ha con­tri­bui­to a numerose e attuali librerie software, che per la maggior parte sot­to­stan­no alla stessa licenza e giocano un ruolo im­por­tan­te nella pro­gram­ma­zio­ne delle ap­pli­ca­zio­ni web più moderne, che si lasciano in­stal­la­re, uti­liz­za­re e ag­gior­na­re con l’aiuto di RubyGems. Uno di questi Gems, tra i quali si contano ad esempio anche le web API di Google e Facebook, è il framework Rails.

Model-View-Con­trol­ler (MVC)

Gli ambienti di runtime di Ruby on Rails sono sistemi chiusi, che con­ten­go­no l’in­ter­pre­te, le librerie di software ne­ces­sa­rie e i ri­spet­ti­vi script. Ogni sito con Rails sottostà ad una struttura di directory generata au­to­ma­ti­ca­men­te, nella quale gli script, le con­fi­gu­ra­zio­ni, le classi, i contenuti ecc. sono divisi tra loro. Grazie a questo modo di procedere strut­tu­ra­le per gestire se­pa­ra­ta­men­te i dati e i loro adat­ta­men­ti così come la loro forma di pre­sen­ta­zio­ne, le ap­pli­ca­zio­ni web sono facili da usare. Si parla anche di pattern ar­chi­tet­tu­ra­le Model-View-Con­trol­ler (Modello-Vista-Controllo), dove i suoi com­po­nen­ti prin­ci­pa­li si possono de­scri­ve­re come di seguito:

Model

Di solito le ap­pli­ca­zio­ni Rails sono collegate a database re­la­zio­na­li. Per co­mu­ni­ca­re con il ri­spet­ti­vo Database Ma­na­ge­ment System e preparare o ma­ni­po­la­re i dati inseriti, sono necessari i modelli del framework Ruby, che rap­pre­sen­ta­no le classi in una tabella di un database e i singoli at­tri­bui­ti sulle colonne ap­pro­pria­te. Il com­po­nen­te “Model” si basa di solito su un framework ORM (object-re­la­tio­nal mapping) Ac­ti­ve­Re­cord. A partire dalla versione Rails 3.0 potete uti­liz­za­re, grazie all’im­ple­men­ta­zio­ne dell’API per i plug-in, anche altre librerie ORM, come Sequel.

View

Il com­po­nen­te “View” ha bisogno del framework per accedere ai dati del modello e pre­sen­tar­li gra­fi­ca­men­te. Per questo scopo, Ruby on Rails usa la classe Action View, che supporta diversi formati di output. Resi sotto forma di documenti HTML, i view pre­sen­ta­no i ri­spet­ti­vi dati, ad esempio agli utenti che ne fanno richiesta. I documenti XML o JSON servono inoltre per rendere di­spo­ni­bi­le l’accesso ai dati sul database per altri programmi o servizi.

Con­trol­ler

I con­trol­ler sono il punto di contatto tra il modello e il view. Elaborano le richieste in entrata at­tra­ver­so il browser, uti­liz­za­no i modelli cor­ri­spon­den­ti del database e li inoltrano al view, che si preoccupa di renderli vi­sua­liz­za­bi­li. Inoltre, in quanto unità di controllo centrale delle ap­pli­ca­zio­ni Rails, i con­trol­ler ge­sti­sco­no anche il com­por­ta­men­to di caching o sin­te­tiz­za­no in una sessione diverse richieste di un singolo client, ef­fet­tua­te in un certo in­ter­val­lo di tempo.

Com­po­nen­ti standard del framework RoR

In quanto framework per ap­pli­ca­zio­ni web, Ruby on Rails mette già a di­spo­si­zio­ne nella con­fi­gu­ra­zio­ne standard tutti i com­po­nen­ti di cui avete bisogno per pro­gram­ma­re un’ap­pli­ca­zio­ne ricca di funzioni. Gli unici ulteriori pre­re­qui­si­ti sono che Ruby, il gestore di pacchetti RubyGems e il database SQL siano in­stal­la­ti. Per quanto riguarda l’ultimo elemento, il team di Rails consiglia SQLite, la libreria open source scritta in C, che contiene un database re­la­zio­na­le. Questi sono i moduli standard del framework di Ruby on Rails:

  • Action Con­trol­ler: con l’aiuto del modulo Action Con­trol­ler create i punti di contatto men­zio­na­ti tra i dati del database, gli utenti che vi accedono e i programmi.
  • Action View: Action View vi offre la pos­si­bi­li­tà di creare view per i singoli dati e con­trol­ler. Per quanto concerne l’as­se­gna­zio­ne del nome, per con­ven­zio­ne tutte le view devono essere ri­co­no­sciu­te dal ri­spet­ti­vo con­trol­ler.
  • Active Record: si tratta di un modulo centrale di ma­ni­po­la­zio­ne del database della vostra ap­pli­ca­zio­ne Rails. Per creare i singoli modelli con il suo aiuto, il lavoro di con­fi­gu­ra­zio­ne richiesto è minimo, se vi attenete alle con­ven­zio­ni relative alla de­no­mi­na­zio­ne e allo schema. Ruby on Rails offre per questo scopo con l’aiuto della procedura scaf­fol­ding (let­te­ral­men­te im­pal­ca­tu­ra) lo strumento ottimale per creare in­ter­fac­ce per le quattro ope­ra­zio­ni CRUD, che pre­sen­ta­no i dati ag­gior­na­ti sul livello orientato agli oggetti.
  • Active Resource: questo modulo im­ple­men­ta l’Object Re­la­tio­nal Mapping (ORM) per i servizi REST. Come Active Record si concentra su queste com­po­nen­ti anche per ri­spar­mia­re nella con­fi­gu­ra­zio­ne.
  • Action Mailer: Action Mailer permette di inviare e ricevere e-mail con la vostra ap­pli­ca­zio­ne. In questo modo potete con­fi­gu­ra­re in maniera semplice la re­gi­stra­zio­ne e il login dell’e-mail.
  • Active Support: il modulo Active Support contiene diverse classi utili di programmi di utilità ed esten­sio­ni di libreria standard.
  • Railties: affinché tutti i com­po­nen­ti del framework RoR fun­zio­ni­no insieme, ci sono i co­sid­det­ti railties. Ogni modulo ha im­ple­men­ta­to per questa ragione il proprio railtie per iniziare, ad esempio, il processo di ini­zia­liz­za­zio­ne o poter apportare modifiche alle im­po­sta­zio­ni del framework. Inoltre i railties sono necessari per ag­giun­ge­re alcuni moduli a Ruby on Rails.

Ruby on Rails: vantaggi e svantaggi del framework

Quando si parla di Ruby on Rails, ci si riferisce spesso a questa storiella:

  • Due svi­lup­pa­to­ri discutono sui diversi linguaggi di pro­gram­ma­zio­ne. Il primo dice: “Io lavoro con Java, PHP lo usano i miei figli per giocare.” E il secondo risponde: “Io gioco con i miei bambini e faccio lavorare Ruby al posto mio!”.

Na­tu­ral­men­te dietro a questa storiella c’è una buona dose di esa­ge­ra­zio­ne, ma anche un fondo di verità. Java è adatto per rea­liz­za­re siti complessi e di ottima qualità, infatti si usa spesso come framework negli e-commerce. Pro­gram­ma­re con un lin­guag­gio mul­ti­piat­ta­for­ma, è però spesso tutt’altro che semplice per via della sua struttura complessa e, di regola, richiede molto impegno e tempo. Anche Ruby, in quanto lin­guag­gio di scripting in­ter­pre­ta­to, non è legato ad alcuna piat­ta­for­ma specifica ma, allo stesso tempo, si scrive molto più ve­lo­ce­men­te, è più fa­cil­men­te per­so­na­liz­za­bi­le e molto più leggero. Ma la velocità delle ap­pli­ca­zio­ni svi­lup­pa­te con Ruby on Rails è più lenta rispetto a quelle simili rea­liz­za­te in Ja­va­Script.

Anche PHP, se con­fron­ta­to con Java, ha dei chiari vantaggi per quanto riguarda la sem­pli­ci­tà e l’impegno richiesto nello sviluppo. Non a caso infatti PHP si è stabilito come soluzione standard, che tra l’altro co­sti­tui­sce la base di diversi CMS come WordPress, TYPO3 e Joomla. Tenendo conto del fatto che PHP era composto ar­bi­tra­ria­men­te e non era sempre orientato agli oggetti, gli upgrade delle ap­pli­ca­zio­ni web, che sono stati svi­lup­pa­ti con versioni pre­ce­den­ti, si con­fi­gu­ra­no in maniera più faticosa. Fin dall’inizio Ruby on Rails era in­te­ra­men­te pro­gram­ma­to orientato agli oggetti, perciò le ap­pli­ca­zio­ni, che sono pro­gram­ma­te con l’aiuto di versioni vecchie, con­ten­go­no di solito codici più puliti rispetto ai progetti PHP simili.

Ruby on Rails contiene un framework integrato, con l’aiuto del quale si può testare in ogni momento il fun­zio­na­men­to della vostra ap­pli­ca­zio­ne, in­di­vi­duan­do ed ri­sol­ven­do fin dall’inizio gli errori. Le tecniche del web 2.0 come AJAX sono uti­liz­za­bi­li solo inserendo poche righe. Inoltre Ruby e il framework Rails godono di una community sempre più vasta e in crescita, come te­sti­mo­nia anche la maggiore scelta delle esten­sio­ni.

La filosofia in­no­va­ti­va di Rails, cioè il per­se­gui­re la sem­pli­fi­ca­zio­ne maggiore possibile per lo svi­lup­pa­to­re, che Matsumoto ha cercato sin dall’inizio con funzioni come lo scaf­fol­ding, le con­ven­zio­ni stabilite o la struttura MVC, serve da modello anche per molti altri nuovi framework. Così l’approccio si ritrova tra l’altro nei framework PHP Symfony, CakePHP e Zend.

Per chi è adatto il framework Ruby?

Ruby on Rails offre tutto ciò di cui uno svi­lup­pa­to­re ha bisogno per la creazione di una web app moderna: ar­chi­tet­tu­re di qualità per rea­liz­za­re l’in­ter­fac­cia, una con­nes­sio­ne facile da con­fi­gu­ra­re e collegare al database SQL e la pos­si­bi­li­tà di con­fi­gu­ra­re tec­no­lo­gie web come AJAX. I principi chiari “Don’t repeat yourself” e “Convetion over con­fi­gu­ra­tion” offrono le basi per pro­gram­ma­re un codice pulito, fa­cil­men­te com­pren­si­bi­le ed per­so­na­liz­za­bi­le nel migliore dei modi, che si scrive anche in fretta. Ma alcune con­fi­gu­ra­zio­ni sono possibili senza problemi perché Ruby offre tutte le libertà di cui ha bisogno un pro­gram­ma­to­re. Quindi il framework è adatto sia per i prin­ci­pian­ti che anche per i pro­gram­ma­to­ri esperti che fino a quel momento hanno lavorato con altri linguaggi di scripting, anche se in entrambi i casi dovrebbe essere messo in conto un certo dispendio di tempo per imparare ad usarlo. Grazie al sistema scaf­fol­ding sono rea­liz­za­ti prototipi dei siti web pia­ni­fi­ca­ti in po­chis­si­mo tempo: questo è chia­ra­men­te uno dei punti di forza maggiori del framework Ruby. Grazie all’ambiente di test integrato, ve­ri­fi­ca­te che le vostre ap­pli­ca­zio­ni non con­ten­ga­no possibili errori già durante la fase di sviluppo. Ruby on Rails si dimostra pre­di­spo­sto anche per ap­pli­ca­zio­ni complesse. Con l’aiuto di esten­sio­ni, chiamate RubyGems, tra le quali rientra anche il framework stesso, ag­giun­ge­te fa­cil­men­te le in­ter­fac­ce ne­ces­sa­rie, le librerie o le feature fun­zio­na­li e grafiche. Dal momento che Ruby e il framework RoR sot­to­stan­no alla licenza libera BSD, i soli costi che ne derivano sono quelli dell’hosting del sito web. Ma non dovreste presumere che per Ruby on Rails non dobbiate disporre di alcuna co­no­scen­za di pro­gram­ma­zio­ne. Na­tu­ral­men­te, a dif­fe­ren­za di quanto affermato dalla storiella degli svi­lup­pa­to­ri rac­con­ta­ta sopra, il lin­guag­gio di scripting non si fa carico di tutto. In termini di velocità, le ap­pli­ca­zio­ni svi­lup­pa­te con RoR non possono tener com­ple­ta­men­te testa alla con­cor­ren­za. Il codice si esegue solo quando l’utente accede ai contenuti, perché l’ela­bo­ra­zio­ne delle richieste in entrata dura ov­via­men­te un po’ di più rispetto alle righe di codice pre­com­pi­la­te.   Inoltre dovete fare a meno del framework Rails, se volete gestire le vostre ap­pli­ca­zio­ni con CMS come Drupal, Joomla o WordPress. Gli esempi citati si basano, come anche altre piat­ta­for­me, su PHP. Ma esistono già CMS basati su Ruby on Rails, come ad esempio Alchemy CMS. È difficile im­ma­gi­na­re che RoR si diffonda al punto tale da mettere in dif­fi­col­tà lo status dei leader del mercato PHP, Java e Python. In ogni caso, i vantaggi e la crescente po­po­la­ri­tà del framework Ruby sono in­ne­ga­bi­li.

Vai al menu prin­ci­pa­le