2004 ver­öf­fent­lich­te das ame­ri­ka­ni­sche Web­ent­wick­lungs-Un­ter­neh­men 37signals (heute Basecamp) die Pro­jekt­ma­nage­ment-Anwendung Basecamp, die u. a. Features wie To-do-Listen, Time-Tracking oder ein Nach­rich­ten­sys­tem enthielt. Teil der Software war eine Ba­sis­ar­chi­tek­tur, die eigens zu diesem Zweck vom be­tei­lig­ten Pro­gram­mie­rer David Hei­ne­mei­er Hansson er­schaf­fen, aber noch im selben Jahr ex­tra­hiert und 2005 als ei­gen­stän­di­ges und quell­of­fe­nes Web-Ap­pli­ca­ti­on-Framework ver­öf­fent­licht wurde. Der Name des in Ruby ent­wi­ckel­ten und heute bestens bekannten Grund­ge­rüsts: Ruby on Rails – kurz RoR oder auch einfach nur Rails. Dass sich das Framework, das mitt­ler­wei­le durch ein mehr­köp­fi­ges Ent­wick­ler­team betreut wird, einmal zu einer der ge­frag­tes­ten Lösungen für die Kreation neuer Web­an­wen­dun­gen ent­wi­ckeln würde, ahnte zu diesem Zeitpunkt wohl niemand.

Was ist Ruby on Rails?

Seit Ruby on Rails damals unter der MIT-Lizenz er­schie­nen ist, haben die Ent­wick­ler das Framework stetig wei­ter­ent­wi­ckelt. Dabei ist man sich hin­sicht­lich der Phi­lo­so­phie bis heute treu geblieben: So gilt un­ver­än­dert der Grundsatz „Don’t repeat yourself“ (DRY; dt. „Wie­der­ho­le dich nicht“). Jede In­for­ma­ti­on soll in einem Projekt auf Basis des Rails-Frame­works also nur ein einziges Mal vorhanden sein. So reicht es z. B., die Spalten einer Tabelle nur in der Datenbank zu de­fi­nie­ren, ohne diese In­for­ma­ti­on auch im Quellcode oder in einer separaten Kon­fi­gu­ra­ti­ons­da­tei fest­zu­hal­ten. Das im­ple­men­tier­te Modul Active Record liest selbige nämlich direkt aus der Datenbank.

Das zweite Design-Paradigma lautet „Con­ven­ti­on over con­fi­gu­ra­ti­on“ (dt. „Kon­ven­ti­on vor Kon­fi­gu­ra­ti­on“). Das RoR-Framework gibt also bestimmte Kon­ven­tio­nen vor, bei­spiels­wei­se bei der Benennung von Klassen. Hält man sich als Ent­wick­ler an diese Kon­ven­tio­nen, spart man eine Menge Kon­fi­gu­ra­ti­ons­auf­wand. Ruby on Rails lässt al­ler­dings auch al­ter­na­ti­ve Kon­fi­gu­ra­tio­nen zu, weshalb Ihnen die Fle­xi­bi­li­tät beim Pro­gram­mie­ren Ihrer Web-App voll­stän­dig erhalten bleibt.

Ruby: Die flexible und platt­form­un­ab­hän­gi­ge Sprache des Rails-Frame­works

Mitte der 90er-Jahre ver­öf­fent­lich­te der Japaner Yukihiro Matsumoto die ob­jekt­ori­en­tier­te Sprache Ruby. Zunächst nahezu aus­schließ­lich in Japan genutzt, hat sich die Skript­spra­che mitt­ler­wei­le weltweit als beliebte Al­ter­na­ti­ve zu den Bran­chen­füh­rern PHP, Python und Co. etabliert. Von ungefähr kommt dieser Erfolg nicht: Matsumoto hat sich bei der Ent­wick­lung nämlich vor allem zum Ziel gesetzt, den Spaß am Pro­gram­mie­ren dauerhaft zu sichern und daher die besten Ei­gen­schaf­ten anderer Sprachen in Ruby vereint. Als in­ter­pre­tier­te Skript­spra­che wird der Code von einem In­ter­pre­ter aus­ge­führt, was zwar gegenüber kom­pi­lier­ten Skripten einen kleinen Ge­schwin­dig­keits­nach­teil bedeutet, Ruby auf der anderen Seite aber deutlich flexibler und dy­na­mi­scher macht. Da für alle gängigen Be­triebs­sys­te­me spe­zi­fi­sche In­ter­pre­ter exis­tie­ren, ist Ruby-Code dank dieser Tatsache platt­form­un­ab­hän­gig.

Ein ganz we­sent­li­ches Merkmal von Ruby ist die Mul­ti­pa­ra­dig­ma-Fähigkeit, die z. B. auch C++ aus­zeich­net. Sie sind also nicht an ein be­stimm­tes Pro­gram­mier­pa­ra­dig­ma gebunden. Dank des „Prinzips der ge­rings­ten Über­ra­schung“ nutzen Sie die Skript­spra­che intuitiv und – in der Regel – ohne auf un­er­war­te­tes Verhalten zu stoßen. Als Open-Source-Software unter der freien BSD-Lizenz erfreut sich Ruby einer großen und sehr aktiven Community, die zahl­rei­che aktuelle Programm-Bi­blio­the­ken bei­gesteu­ert hat, die zum Großteil ebenfalls dieser Lizenz un­ter­lie­gen und eine große Rolle bei der Ent­wick­lung moderner Web­ap­pli­ka­tio­nen spielen. Sie lassen sich mithilfe der so­ge­nann­ten RubyGems in­stal­lie­ren, nutzen und ak­tua­li­sie­ren. Einer dieser Gems, zu denen bei­spiels­wei­se auch die öf­fent­li­chen Web-APIs von Google und Facebook zählen, ist das Rails-Framework

Model-View-Con­trol­ler-Ar­chi­tek­tur (MVC)

Ruby-on-Rails-Lauf­zeit­um­ge­bun­gen sind ge­schlos­se­ne Systeme. Sie enthalten den In­ter­pre­ter, die not­wen­di­gen Pro­gramm­bi­blio­the­ken sowie die je­wei­li­gen Skripte. Jedes Rails-Projekt un­ter­liegt einer au­to­ma­tisch erzeugten Ver­zeich­nis­struk­tur, die Skripte, Kon­fi­gu­ra­tio­nen, Klassen, Inhalte etc. von­ein­an­der trennt. Dank dieser struk­tu­rel­len Vor­ge­hens­wei­se, Daten und deren An­pas­sun­gen sowie Dar­stel­lungs­form getrennt zu verwalten, sind die Web­an­wen­dun­gen leicht zu pflegen. Man spricht auch von einer Model-View-Con­trol­ler-Ar­chi­tek­tur, deren Schichten sich fol­gen­der­ma­ßen be­schrei­ben lassen:

Model

Für ge­wöhn­lich sind Rails-Ap­pli­ka­tio­nen an re­la­tio­na­le Da­ten­ban­ken geknüpft. Um mit dem je­wei­li­gen Datenbank-Ma­nage­ment-System zu kom­mu­ni­zie­ren und Einträge an­zu­fer­ti­gen bzw. zu ma­ni­pu­lie­ren, benötigt das Ruby-Framework Models. Diese bilden Klassen auf eine Da­ten­bank­ta­bel­le und einzelne Attribute auf die passenden Spalten ab. Die Model-Schicht basiert stan­dard­mä­ßig auf dem ORM-Framework (object-re­la­tio­nal mapping) Active Record. Seit Rails 3.0 können Sie dank der im­ple­men­tier­ten Plug-in-API auch andere ORM-Bi­blio­the­ken wie Sequel nutzen.

Views

Die View-Schicht oder auch Prä­sen­ta­ti­ons­schicht benötigt das Framework, um auf die Daten aus der Model-Schicht zu­zu­grei­fen und diese visuell dar­zu­stel­len. Zu diesem Zweck verwendet Ruby on Rails die Klasse Action View, die diverse Aus­ga­be­for­ma­te un­ter­stützt. In Form von HTML-Do­ku­men­ten gerendert, prä­sen­tie­ren Views die ent­spre­chen­den Daten bei­spiels­wei­se dem an­fra­gen­den Benutzer. XML- oder JSON-Dokumente dienen dazu, den Zugriff auf die Da­ten­bank­ein­trä­ge für andere Programme oder Dienste verfügbar zu machen.

Con­trol­ler

Con­trol­ler stellen die Schnitt­stel­le zwischen der Model- und der View-Schicht dar. Sie ver­ar­bei­ten die an­kom­men­den Anfragen durch den Web­brow­ser, rufen die ent­spre­chen­den Models von der Datenbank ab und leiten sie an die Views weiter, die für die Vi­sua­li­sie­rung sorgen. Als zentrale Steu­er­ein­hei­ten der Rails-Ap­pli­ka­ti­on verwalten Con­trol­ler außerdem auch das Caching-Verhalten oder fassen un­ter­schied­li­che Anfragen eines einzelnen Clients, die über einen Zeitraum hinweg getätigt werden, in einer Session zusammen.

Die Stan­dard­kom­po­nen­ten des RoR-Frame­works

Als Framework für Web­ap­pli­ka­tio­nen stellt Ruby on Rails bereits in der Stan­dard­kon­fi­gu­ra­ti­on alle Kom­po­nen­ten zur Verfügung, die Sie als Ent­wick­ler benötigen, um eine funk­ti­ons­star­ke Anwendung zu pro­gram­mie­ren. Die einzigen zu­sätz­li­chen Vor­aus­set­zun­gen sind, dass Ruby und der Pa­ket­ver­wal­ter RubyGems sowie eine SQL-Datenbank in­stal­liert sind. Für letzt­ge­nann­te empfiehlt das Rails-Team die in C ge­schrie­be­ne Open-Source-Pro­gramm­bi­blio­thek SQLite, die ein re­la­tio­na­les Da­ten­bank­sys­tem enthält. Das sind die Stan­dard­mo­du­le des Ruby-on-Rails-Frame­works:

  • Action Con­trol­ler: Mithilfe des Moduls Action Con­trol­ler erstellen Sie die erwähnten Schnitt­stel­len zwischen den Da­ten­bank­ein­trä­gen und den zu­grei­fen­den Benutzern und Pro­gram­men.
  • Action View: Action View bietet Ihnen die Mög­lich­keit, Views für die einzelnen Einträge und Con­trol­ler zu erzeugen. Hin­sicht­lich der Na­mens­ge­bung existiert die Kon­ven­ti­on, dass alle Views nach dem je­wei­li­gen Con­trol­ler benannt sein müssen.
  • Active Record: Bei Active Record handelt es sich um das zentrale Modul zur Ma­ni­pu­la­ti­on der Datenbank Ihrer Rails-Anwendung. Um mit diesem die einzelnen Models zu erzeugen, müssen Sie nur wenig kon­fi­gu­rie­ren, wenn Sie sich an die Kon­ven­tio­nen bezüglich Benennung und Schema halten. Ruby on Rails bietet zu diesem Zweck mithilfe des mächtigen Scaf­fol­ding-Systems (dt. „Gerüstbau“) das optimale Werkzeug, um In­ter­faces für die vier CRUD-Ope­ra­tio­nen zu erzeugen, die den Da­ten­be­stand auf ob­jekt­ori­en­tier­ter Ebene prä­sen­tie­ren.
  • Active Resource: Dieses Modul im­ple­men­tiert die ob­jekt­re­la­tio­na­le Abbildung (ORM) für REST-Web­ser­vices. Wie Active Record kon­zen­triert sich auch diese Kom­po­nen­te darauf, Kon­fi­gu­ra­tio­nen ein­zu­spa­ren.
  • Action Mailer: Action Mailer erlaubt es, in Ihrer Web­an­wen­dung E-Mails zu versenden und zu erhalten. Auf diese Weise können Sie un­kom­pli­ziert eine E-Mail-Re­gis­trie­rung und -Anmeldung ein­rich­ten.
  • Active Support: Das Modul Active Support enthält ver­schie­de­ne nützliche Hilfs­pro­gramm-Klassen und Standard-Bi­blio­thek-Er­wei­te­run­gen.
  • Railties: Damit alle Kom­po­nen­ten des RoR-Frame­works im Verbund funk­tio­nie­ren, exis­tie­ren die so­ge­nann­ten Railties. Jedes Modul hat aus diesem Grund sein eigenes Railtie im­ple­men­tiert, um bei­spiels­wei­se den In­itia­li­sie­rungs­pro­zess zu starten oder Kon­fi­gu­ra­tio­nen am Framework vornehmen zu können. Railties sind außerdem notwendig, um Ruby on Rails eigene Module hin­zu­zu­fü­gen.

Ruby on Rails: Vor- und Nachteile des Web­frame­works

Auf wikibooks.org findet man folgenden Witz über die Frage nach der besten Skript­spra­che:

  • Zwei Ent­wick­ler un­ter­hal­ten sich über Pro­gram­mier­spra­chen. Der Erste: „Ich arbeite mit Java, PHP gebe ich meinen Kindern zum Spielen.“ Daraufhin der zweite: „Ich spiele mit meinen Kindern und lasse Ruby für mich arbeiten!“

Natürlich steckt in diesem Witz eine gehörige Portion Über­trei­bung, doch im Grunde auch ein wahrer Kern. Java gilt für komplexe Lösungen als erst­klas­si­ge Wahl und kommt deshalb in vielen Frame­works im Business-Bereich zum Einsatz. Mit der platt­form­un­ab­hän­gi­gen Sprache zu pro­gram­mie­ren ist al­ler­dings aufgrund der oftmals sehr komplexen Struktur alles andere als einfach und in der Regel sehr aufwendig und mit einem hohen Zeit­fak­tor verbunden. Ruby ist als in­ter­pre­tier­te Skript­spra­che ebenfalls an keine bestimmte Plattform gebunden. Gleich­zei­tig ist ein Code mit Ruby we­sent­lich schneller ge­schrie­ben, leichter anpassbar und von deutlich ge­rin­ge­rem Umfang. Die In­ter­pre­ter­spra­che sorgt al­ler­dings auch dafür, dass die Ge­schwin­dig­keit ent­wi­ckel­ter Ap­pli­ka­tio­nen langsamer ist als bei ver­gleich­ba­ren Java-An­wen­dun­gen.

Auch PHP hat im Vergleich zu Java deutliche Vorteile in Sachen Sim­pli­zi­tät und Ent­wick­lungs­auf­wand. In der Web­ent­wick­lung gilt die Sprache nicht von ungefähr als eta­blier­te Stan­dard­lö­sung, die u. a. die Grundlage diverser Content-Ma­nage­ment-Systeme wie WordPress, TYPO3 oder Joomla bildet. Aufgrund der Tatsache, dass PHP eher will­kür­lich zu­sam­men­ge­stellt und nicht immer ob­jekt­ori­en­tiert war, gestalten sich Upgrades von Web­ap­pli­ka­tio­nen, die mit älteren Versionen ent­wi­ckelt worden sind, mitunter al­ler­dings ziemlich mühsam. Ruby on Rails war von Beginn an voll­stän­dig ob­jekt­ori­en­tiert, weshalb An­wen­dun­gen, die mithilfe älterer Versionen pro­gram­miert sind, stan­dard­mä­ßig sau­be­re­ren Code enthalten als ver­gleich­ba­re PHP-Projekte.

Ruby on Rails enthält ein in­te­grier­tes Framework, mit dessen Hilfe Sie die Funk­ti­ons­fä­hig­keit Ihrer Ap­pli­ka­ti­on jederzeit testen können. Fehler lassen sich dank dieser Mög­lich­keit von Anfang an fest­stel­len und beheben. Web-2.0-Techniken wie AJAX sind von Werk aus mit wenigen Zeilen nutzbar. Darüber hinaus erfreuen sich Ruby und das Rails-Framework einer riesigen und stetig wach­sen­den Community, wie auch die gewaltige Auswahl an Er­wei­te­run­gen unter Beweis stellt.

Die in­no­va­ti­ve Phi­lo­so­phie von Rails – das Streben nach der größt­mög­li­chen Ver­ein­fa­chung für den Ent­wick­ler –, die Matsumoto mit Features wie dem Scaf­fol­ding-System, festen Kon­ven­tio­nen oder der MVC-Struktur von Beginn an verfolgt hat, diente zudem vielen neueren Frame­works als Vorbild. So findet sich der Ansatz u. a. in den PHP-Frame­works Symfony, CakePHP und im Zend Framework wieder.

Für wen eignet sich das Ruby-Framework?

Ruby on Rails bietet alles, was ein Ent­wick­ler zur Kreation moderner Web­ap­pli­ka­tio­nen benötigt: Erst­klas­si­ge Struk­tu­ren zur Rea­li­sie­rung des In­ter­faces, eine leicht ein­zu­rich­ten­de Anbindung an eine SQL-Datenbank sowie die Mög­lich­keit, Web­tech­no­lo­gien wie AJAX ein­zu­set­zen. Die klaren Prin­zi­pi­en „Don’t repeat yourself“ und „Con­ven­ti­on over con­fi­gu­ra­ti­on“ liefern die Basis für sauberen, leicht über­schau­ba­ren und gut an­pass­ba­ren Code, der schnell ge­schrie­ben ist. Eigene Kon­fi­gu­ra­tio­nen sind dennoch pro­blem­los möglich, denn Ruby soll einem Pro­gram­mie­rer alle Frei­hei­ten bieten, die er benötigt. Damit ist das Framework sowohl für Neulinge, als auch für erfahrene Pro­gram­mie­rer, die bis dato mit anderen Skript­spra­chen ge­ar­bei­tet haben, geeignet – auch wenn in beiden Fällen ein gewisser Zeit­auf­wand für den Einstieg ein­ge­plant werden sollte.

Dank des Scaf­fol­ding-Systems sind Pro­to­ty­pen geplanter Web­pro­jek­te in kürzester Zeit rea­li­siert – hier liegt eindeutig eine der großen Stärken des Ruby-Frame­works. Dank der in­te­grier­ten Test­um­ge­bung über­prü­fen Sie Ihre Anwendung schon während der Ent­wick­lungs­pha­se auf mögliche Fehler. Auch für komplexe Ap­pli­ka­tio­nen zeigt sich Ruby on Rails gerüstet. Mithilfe der RubyGems genannten Er­wei­te­run­gen, zu denen das Framework im Übrigen selbst zählt, fügen Sie benötigte Schnitt­stel­len, Bi­blio­the­ken oder funk­tio­na­le und optische Features pro­blem­los hinzu. Da Ruby und das RoR-Framework der freien BSD-Lizenz un­ter­lie­gen, entstehen für Sie durch die Nutzung einzig Kosten für das Hosting Ihres Web­pro­jekts.

Sie sollten aber nicht davon ausgehen, dass Sie für Ruby on Rails über keinerlei Pro­gram­mier­fä­hig­kei­ten verfügen müssen. Die komplette Arbeit, wie es der Ruby-Ent­wick­ler im obigen Witz behauptet, nimmt Ihnen die Skript­spra­che natürlich nicht ab. Hin­sicht­lich der Ge­schwin­dig­keit können die ent­wi­ckel­ten RoR-An­wen­dun­gen nicht gänzlich mit der Kon­kur­renz mithalten. Der Code wird erst aus­ge­führt, wenn Benutzer auf den je­wei­li­gen Inhalt zugreifen, weshalb die Be­ar­bei­tung der ein­ge­hen­den Anfragen lo­gi­scher­wei­se etwas länger dauert als bei vor­kom­pi­lier­ten Code­zei­len.

Ferner müssen Sie auf einen Einsatz des Rails-Frame­works ver­zich­ten, wenn Sie Ihre Ap­pli­ka­ti­on mit Content-Ma­nage­ment-Systemen wie Drupal, Joomla oder WordPress or­ga­ni­sie­ren wollen. Die genannten Beispiele basieren, wie viele andere Platt­for­men auch, auf PHP. Es exis­tie­ren aber auch bereits CMS-Lösungen auf Basis von Ruby on Rails wie z. B. Alchemy CMS. Prognosen über die Ver­brei­tung von RoR und die Chance, den Status der Markt­füh­rer PHP, Java und Python zu gefährden, lassen sich nur schwer anstellen – die Vorzüge und steigende Be­liebt­heit des Ruby-Frame­works sprechen jedoch durchaus für sich.

Zum Hauptmenü