# Ruby on Rails: Das MVC-Framework für komplexe Webanwendungen

2004 veröffentlichte das amerikanische Webentwicklungs-Unternehmen 37signals (heute Basecamp) die Projektmanagement-Anwendung Basecamp, die u. a. Features wie To-do-Listen, Time-Tracking oder ein Nachrichtensystem enthielt. Teil der Software war eine **Basisarchitektur**, die eigens zu diesem Zweck vom beteiligten Programmierer David Heinemeier Hansson erschaffen, aber noch im selben Jahr extrahiert und 2005 als eigenständiges und **quelloffenes Web-Application-Framework** veröffentlicht wurde. Der Name des in Ruby entwickelten und heute bestens bekannten Grundgerüsts: Ruby on Rails – kurz RoR oder auch einfach nur Rails. Dass sich das Framework, das mittlerweile durch ein **mehrköpfiges Entwicklerteam** betreut wird, einmal zu einer der gefragtesten Lösungen für die Kreation neuer Webanwendungen entwickeln würde, ahnte zu diesem Zeitpunkt wohl niemand.

## Was ist Ruby on Rails?

Seit Ruby on Rails damals unter der MIT-Lizenz erschienen ist, haben die Entwickler das Framework stetig weiterentwickelt. Dabei ist man sich hinsichtlich der Philosophie bis heute treu geblieben: So gilt unverändert der Grundsatz „**Don’t repeat yourself**“ (DRY; dt. „Wiederhole dich nicht“). Jede Information soll in einem Projekt auf Basis des Rails-Frameworks also nur ein einziges Mal vorhanden sein. So reicht es z. B., die Spalten einer Tabelle **nur in der Datenbank zu definieren**, ohne diese Information auch im Quellcode oder in einer separaten Konfigurationsdatei festzuhalten. Das implementierte Modul Active Record liest selbige nämlich direkt aus der Datenbank. Das zweite Design-Paradigma lautet „**Convention over configuration**“ (dt. „Konvention vor Konfiguration“). Das RoR-Framework gibt also bestimmte Konventionen vor, beispielsweise bei der Benennung von Klassen. Hält man sich als Entwickler an diese Konventionen, **spart man eine Menge Konfigurationsaufwand**. Ruby on Rails lässt allerdings auch alternative Konfigurationen zu, weshalb Ihnen die Flexibilität beim Programmieren Ihrer Web-App vollständig erhalten bleibt.

## Ruby: Die flexible und plattformunabhängige Sprache des Rails-Frameworks

Mitte der 90er-Jahre veröffentlichte der Japaner Yukihiro Matsumoto die objektorientierte Sprache [Ruby](https://www.ruby-lang.org/de/ "[„Der beste Freund eines Programmierers“ – offizielle Homepage der freien Programmiersprache Ruby"). Zunächst nahezu ausschließlich in Japan genutzt, hat sich die Skriptsprache mittlerweile weltweit als beliebte Alternative zu den Branchenführern PHP, Python und Co. etabliert. Von ungefähr kommt dieser Erfolg nicht: Matsumoto hat sich bei der Entwicklung nämlich vor allem zum Ziel gesetzt, den Spaß am Programmieren dauerhaft zu sichern und daher die besten Eigenschaften anderer Sprachen in Ruby vereint. Als **interpretierte Skriptsprache** wird der Code von einem Interpreter ausgeführt, was zwar gegenüber kompilierten Skripten einen kleinen Geschwindigkeitsnachteil bedeutet, Ruby auf der anderen Seite aber deutlich flexibler und dynamischer macht. Da für alle gängigen Betriebssysteme spezifische Interpreter existieren, ist Ruby-Code dank dieser Tatsache **plattformunabhängig**.

Ein ganz wesentliches Merkmal von Ruby ist die **Multiparadigma-Fähigkeit**, die z. B. auch C++ auszeichnet. Sie sind also nicht an ein bestimmtes [Programmierparadigma](https://www.ionos.de/digitalguide/websites/web-entwicklung/programmierparadigmen/ "Programmierparadigmen") gebunden. Dank des „Prinzips der geringsten Überraschung“ nutzen Sie die Skriptsprache intuitiv und – in der Regel – ohne auf unerwartetes Verhalten zu stoßen. Als Open-Source-Software unter der freien BSD-Lizenz erfreut sich Ruby einer großen und sehr aktiven Community, die **zahlreiche aktuelle Programm-Bibliotheken** beigesteuert hat, die zum Großteil ebenfalls dieser Lizenz unterliegen und eine große Rolle bei der Entwicklung moderner Webapplikationen spielen. Sie lassen sich mithilfe der sogenannten [RubyGems](https://rubygems.org/ "Diverse Software-Pakete für Ruby zum Download auf rubygems.org") installieren, nutzen und aktualisieren. Einer dieser Gems, zu denen beispielsweise auch die öffentlichen **Web-APIs** von Google und Facebook zählen, ist das Rails-Framework

## Model-View-Controller-Architektur (MVC)

Ruby-on-Rails-Laufzeitumgebungen sind geschlossene Systeme. Sie enthalten den Interpreter, die notwendigen Programmbibliotheken sowie die jeweiligen Skripte. Jedes Rails-Projekt unterliegt einer automatisch erzeugten **Verzeichnisstruktur**, die Skripte, Konfigurationen, Klassen, Inhalte etc. voneinander trennt. Dank dieser strukturellen Vorgehensweise, Daten und deren Anpassungen sowie Darstellungsform getrennt zu verwalten, sind die Webanwendungen leicht zu pflegen. Man spricht auch von einer **Model-View-Controller-Architektur**, deren Schichten sich folgendermaßen beschreiben lassen:

### Model

Für gewöhnlich sind Rails-Applikationen an relationale Datenbanken geknüpft. Um mit dem jeweiligen Datenbank-Management-System zu kommunizieren und Einträge anzufertigen bzw. zu manipulieren, benötigt das Ruby-Framework Models. Diese bilden Klassen auf eine **Datenbanktabelle** und einzelne **Attribute** auf die passenden Spalten ab. Die Model-Schicht basiert standardmäßig auf dem **ORM-Framework** (object-relational mapping) Active Record. Seit Rails 3.0 können Sie dank der implementierten Plug-in-API auch andere ORM-Bibliotheken wie [Sequel](https://sequel.jeremyevans.net "Datenbank-Bibliothek für Ruby: Sequel") nutzen.

### Views

Die View-Schicht oder auch Präsentationsschicht benötigt das Framework, um auf die Daten aus der Model-Schicht zuzugreifen und diese visuell darzustellen. Zu diesem Zweck verwendet Ruby on Rails die Klasse Action View, die **diverse** **Ausgabeformate** unterstützt. In Form von HTML-Dokumenten gerendert, präsentieren Views die entsprechenden Daten beispielsweise dem anfragenden Benutzer. XML- oder JSON-Dokumente dienen dazu, den Zugriff auf die Datenbankeinträge für andere Programme oder Dienste verfügbar zu machen.

### Controller

Controller stellen die Schnittstelle zwischen der Model- und der View-Schicht dar. Sie verarbeiten die ankommenden Anfragen durch den Webbrowser, rufen die entsprechenden Models von der Datenbank ab und leiten sie an die Views weiter, die für die Visualisierung sorgen. Als **zentrale Steuereinheiten der Rails-Applikation** verwalten Controller außerdem auch das Caching-Verhalten oder fassen unterschiedliche Anfragen eines einzelnen Clients, die über einen Zeitraum hinweg getätigt werden, in einer **Session** zusammen.

## Die Standardkomponenten des RoR-Frameworks

Als Framework für Webapplikationen stellt Ruby on Rails bereits in der Standardkonfiguration alle Komponenten zur Verfügung, die Sie als Entwickler benötigen, um eine **funktionsstarke Anwendung zu programmieren**. Die einzigen zusätzlichen Voraussetzungen sind, dass Ruby und der Paketverwalter RubyGems sowie eine **SQL-Datenbank** installiert sind. Für letztgenannte empfiehlt das Rails-Team die in C geschriebene Open-Source-Programmbibliothek [SQLite](https://www.sqlite.org/ "SQLite – die freie Software für effiziente Datenbanksysteme"), die ein relationales Datenbanksystem enthält. Das sind die Standardmodule des Ruby-on-Rails-Frameworks:

- **Action Controller**: Mithilfe des Moduls Action Controller erstellen Sie die erwähnten Schnittstellen zwischen den Datenbankeinträgen und den zugreifenden Benutzern und Programmen.
- **Action View**: Action View bietet Ihnen die Möglichkeit, Views für die einzelnen Einträge und Controller zu erzeugen. Hinsichtlich der Namensgebung existiert die Konvention, dass alle Views nach dem jeweiligen Controller benannt sein müssen.
- **Active Record**: Bei Active Record handelt es sich um das zentrale Modul zur Manipulation der Datenbank Ihrer Rails-Anwendung. Um mit diesem die einzelnen Models zu erzeugen, müssen Sie nur wenig konfigurieren, wenn Sie sich an die Konventionen bezüglich Benennung und Schema halten. Ruby on Rails bietet zu diesem Zweck mithilfe des mächtigen Scaffolding-Systems (dt. „Gerüstbau“) das optimale Werkzeug, um Interfaces für die vier [CRUD-Operationen](https://www.ionos.de/digitalguide/websites/web-entwicklung/crud-die-wichtigsten-datenbankoperationen/ "CRUD – die wichtigsten Datenbankoperationen") zu erzeugen, die den Datenbestand auf objektorientierter Ebene präsentieren.
- **Active Resource**: Dieses Modul implementiert die objektrelationale Abbildung (ORM) für [REST-Webservices](https://www.ionos.de/digitalguide/server/knowhow/rest-die-http-loesung-fuer-webservices/). Wie Active Record konzentriert sich auch diese Komponente darauf, Konfigurationen einzusparen.
- **Action Mailer**: Action Mailer erlaubt es, in Ihrer Webanwendung E-Mails zu versenden und zu erhalten. Auf diese Weise können Sie unkompliziert eine E-Mail-Registrierung und -Anmeldung einrichten.
- **Active Support**: Das Modul Active Support enthält verschiedene nützliche Hilfsprogramm-Klassen und Standard-Bibliothek-Erweiterungen.
- **Railties**: Damit alle Komponenten des RoR-Frameworks im Verbund funktionieren, existieren die sogenannten Railties. Jedes Modul hat aus diesem Grund sein eigenes Railtie implementiert, um beispielsweise den Initialisierungsprozess zu starten oder Konfigurationen am Framework vornehmen zu können. Railties sind außerdem notwendig, um Ruby on Rails eigene Module hinzuzufügen.

## Ruby on Rails: Vor- und Nachteile des Webframeworks

Auf [wikibooks.org](https://de.wikibooks.org/wiki/Ruby_on_Rails:_Witze#Wieviele_Rails-Entwickler_braucht_man_um_eine_Gl.C3.BChbirne_zu_wechseln.3F "Freie Bibliothek für Lehr-, Fach- und Sachbücher: Wikibooks") findet man folgenden Witz über die Frage nach der besten Skriptsprache:

- Zwei Entwickler unterhalten sich über Programmiersprachen. 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 Übertreibung, doch im Grunde auch ein wahrer Kern. **Java** gilt für komplexe Lösungen als erstklassige Wahl und kommt deshalb in vielen **Frameworks im Business-Bereich** zum Einsatz. Mit der plattformunabhängigen Sprache zu programmieren ist allerdings aufgrund der oftmals sehr komplexen Struktur alles andere als einfach und in der Regel sehr aufwendig und mit einem hohen Zeitfaktor verbunden. Ruby ist als **interpretierte Skriptsprache** ebenfalls an keine bestimmte Plattform gebunden. Gleichzeitig ist ein Code mit Ruby wesentlich schneller geschrieben, leichter anpassbar und von deutlich geringerem Umfang. Die Interpretersprache sorgt allerdings auch dafür, dass die Geschwindigkeit entwickelter Applikationen langsamer ist als bei vergleichbaren Java-Anwendungen.

Auch **PHP** hat im Vergleich zu Java deutliche Vorteile in Sachen Simplizität und Entwicklungsaufwand. In der Webentwicklung gilt die Sprache nicht von ungefähr als etablierte Standardlösung, die u. a. die **Grundlage diverser Content-Management-Systeme** wie WordPress, TYPO3 oder Joomla bildet. Aufgrund der Tatsache, dass PHP eher willkürlich zusammengestellt und nicht immer objektorientiert war, gestalten sich Upgrades von Webapplikationen, die mit älteren Versionen entwickelt worden sind, mitunter allerdings ziemlich mühsam. Ruby on Rails war von Beginn an **vollständig objektorientiert**, weshalb Anwendungen, die mithilfe älterer Versionen programmiert sind, standardmäßig saubereren Code enthalten als vergleichbare PHP-Projekte.

Ruby on Rails enthält ein integriertes Framework, mit dessen Hilfe Sie die Funktionsfähigkeit Ihrer Applikation jederzeit testen können. Fehler lassen sich dank dieser Möglichkeit von Anfang an feststellen und beheben. **Web-2.0-Techniken** wie [AJAX](https://de.wikipedia.org/wiki/Ajax_(Programmierung) "Wikipedia-Artikel über das Programmierungskonzept AJAX") sind von Werk aus mit wenigen Zeilen nutzbar. Darüber hinaus erfreuen sich Ruby und das Rails-Framework **einer riesigen und stetig wachsenden Community**, wie auch die gewaltige Auswahl an Erweiterungen unter Beweis stellt.

Die innovative Philosophie von Rails – das Streben nach der größtmöglichen Vereinfachung für den Entwickler –, die Matsumoto mit Features wie dem **Scaffolding-System**, festen Konventionen oder der MVC-Struktur von Beginn an verfolgt hat, diente zudem vielen neueren Frameworks als Vorbild. So findet sich der Ansatz u. a. in den PHP-Frameworks [Symfony](https://symfony.com/ "Die PHP-Antwort auf Ruby on Rails: Symfony"), [CakePHP](https://cakephp.org/ "CakePHP – das MVC-Framework der Cake Software Foundation") und im [Zend Framework](https://www.ionos.de/digitalguide/websites/web-entwicklung/zend-framework-die-php-web-application-architektur/ "Zend Framework: Die PHP-Web-Application-Architektur") wieder.

## Für wen eignet sich das Ruby-Framework?

Ruby on Rails bietet alles, was ein Entwickler zur Kreation moderner Webapplikationen benötigt: Erstklassige **Strukturen zur Realisierung des Interfaces**, eine leicht einzurichtende Anbindung an eine SQL-Datenbank sowie die Möglichkeit, **Webtechnologien wie AJAX** einzusetzen. Die klaren Prinzipien „Don’t repeat yourself“ und „Convention over configuration“ liefern die Basis für **sauberen, leicht überschaubaren und gut anpassbaren Code**, der schnell geschrieben ist. Eigene Konfigurationen sind dennoch problemlos möglich, denn Ruby soll einem Programmierer alle **Freiheiten** bieten, die er benötigt. Damit ist das Framework sowohl für Neulinge, als auch für erfahrene Programmierer, die bis dato mit anderen [Skriptsprachen](https://www.ionos.de/digitalguide/websites/web-entwicklung/was-sind-skriptsprachen/ "Was sind Skriptsprachen?") gearbeitet haben, geeignet – auch wenn in beiden Fällen ein gewisser Zeitaufwand für den Einstieg eingeplant werden sollte.

Dank des Scaffolding-Systems sind **Prototypen** geplanter Webprojekte in kürzester Zeit realisiert – hier liegt eindeutig eine der großen Stärken des Ruby-Frameworks. Dank der integrierten Testumgebung überprüfen Sie Ihre Anwendung schon während der Entwicklungsphase auf mögliche Fehler. Auch **für komplexe Applikationen** zeigt sich Ruby on Rails gerüstet. Mithilfe der **RubyGems** genannten Erweiterungen, zu denen das Framework im Übrigen selbst zählt, fügen Sie benötigte Schnittstellen, Bibliotheken oder funktionale und optische Features problemlos hinzu. Da Ruby und das RoR-Framework der freien **BSD-Lizenz** unterliegen, entstehen für Sie durch die Nutzung einzig Kosten für das Hosting Ihres Webprojekts.

Sie sollten aber nicht davon ausgehen, dass Sie für Ruby on Rails über keinerlei Programmierfähigkeiten verfügen müssen. Die komplette Arbeit, wie es der Ruby-Entwickler im obigen Witz behauptet, nimmt Ihnen die Skriptsprache natürlich nicht ab. Hinsichtlich der Geschwindigkeit können die entwickelten RoR-Anwendungen nicht gänzlich mit der Konkurrenz mithalten. Der **Code wird erst ausgeführt, wenn Benutzer auf den jeweiligen Inhalt zugreifen**, weshalb die Bearbeitung der eingehenden Anfragen logischerweise etwas länger dauert als bei vorkompilierten Codezeilen.

Ferner müssen Sie auf einen Einsatz des Rails-Frameworks verzichten, wenn Sie Ihre **Applikation mit Content-Management-Systemen** wie Drupal, Joomla oder WordPress organisieren wollen. Die genannten Beispiele basieren, wie viele andere Plattformen auch, auf PHP. Es existieren aber auch bereits **CMS-Lösungen auf Basis von Ruby on Rails** wie z. B.[ Alchemy CMS](https://www.ionos.de/digitalguide/hosting/cms/alchemy-cms-das-ruby-system-im-kurzportraet/ "Alchemy CMS: das Ruby-System im Kurzporträt"). Prognosen über die Verbreitung von RoR und die Chance, den Status der Marktführer PHP, Java und Python zu gefährden, lassen sich nur schwer anstellen – die Vorzüge und steigende Beliebtheit des Ruby-Frameworks sprechen jedoch durchaus für sich.


This is a markdown version of: [https://www.ionos.de/digitalguide/websites/web-entwicklung/ruby-on-rails-mit-wenig-code-zur-eigenen-web-app/](https://www.ionos.de/digitalguide/websites/web-entwicklung/ruby-on-rails-mit-wenig-code-zur-eigenen-web-app/) for AI/LLM consumption.