Von
Nick Flückiger
/14.06.22

Bild via Chris Yang

Rails bei der Renuo

Wir bei der Renuo sind verrückt nach Rails – oder sind wir vielleicht ein bisschen verrückt wegen Rails? :)

So oder so ist Rails unsere Kernkompetenz und unser USP gegenüber der Kundschaft. Wir pflegen ausserdem einige Gems, die wir für Kundenprojekte entwickelt haben. Ein paar von uns sind auch privat in der Ruby/Rails-Community engagiert und betreuen ihre eigenen Gems und Projekte. Das bekannteste Gem von allen ist wohl cancancan, das von unserem Alessandro betreut wird. 

Da wir im Grunde eine Rails-Agentur sind, interessiert uns die Entwicklung des Frameworks und dessen Fortbestand in der sich ständig verändernden Welt der Softwareentwicklung sehr. Um so grösser war die Freude, als der erste Release Candidate (Beta) für Rails 7 veröffentlicht wurde. Das ist auch der Grund, warum wir einen grossen Teil unserer Learning Week 2021Rails 7 gewidmet haben. Der Zweck dieses Blogartikels ist es nun, die Neuerungen in Rails 7 hervorzuheben und zu zeigen, wie wir diese für die Weiterentwicklung unserer Kundenprodukte nutzen wollen. 

Neue Funktionen

Javascript

Die grösste Änderung in der Rails 7 Aktualisierung betrifft mit grosser Wahrscheinlichkeit JavaScript. Ab Rails 7 sind wir nicht mehr auf Node oder Webpack für JavaScript angewiesen. Eine massive Änderung, die uns zweifelsohne eine Menge Zeit ersparen wir, die wir bisher mit der Entschlüsselung kryptischer Webpack-Fehlermeldungen verbracht haben. Stattdessen werden künftig neue Rails-Anwendungen standardmässig mit Importmaps ausgeliefert.

Importmaps? Importmaps!

Importmaps sind eine grossartige Möglichkeit, JavaScript-Pakete in einer Anwendung mit sehr wenig JavaScript zu verwalten. Anstatt Pakete auf unseren Rechner zu installieren und sie aus einem <sub>modules</sub>-Ordner zu importieren, können wir die Versionen direkt an ein cdn anheften und Browser holen sich die entsprechenden Pakete selbst. Dies wurde durch die vielen Verbesserungen in modernen Browsern und die allgemeine Verbesserung der Code-Verteilung im Internet möglich. Für komplexere Anwendungen wird Rails eine einfache Integration mit esbuild, rollup und Webpack anbieten. Unsere Kundschaft wird sich sicherlich freuen, wenn wir mehr Zeit für ihre Features aufwenden können, statt uns um Webpack-Konfigurationen kümmern zu müssen. :)

Dynamische/reaktive Anwendungen

Seit einiger Zeit profitieren unsere Anwendungen dank Turbolinks und den anderen Verbesserungen von einer schnelleren Navigation und kürzeren Seitenladezeiten. Ein Projekt/Tool, das aus der Goldmine Basecamp gewonnen wurde. Jetzt mit Rails 7 können wir die neueste Inkarnation des Basecamp/hey-Teams nutzen: Hotwired -&gt; Stimulus und Turbo. Standardmässig wird Rails 7 mit dem ultraleichten und reaktiven JavaScript-Framework «Stimulus» ausgeliefert. Und um Reaktivität und Kontrolle aus dem Backend zu extrahieren, können wir «Turbo» verwenden. Turbo ist ein Framework für die Übertragung von Änderungen vom Server zum Client. Das Tolle und Interessante an diesem Tool ist, dass wir die Daten nicht in Form von JSON oder einer anderen Sprache senden. Wir senden HTML direkt über die Leitung. Dies ermöglicht Entwickelnden die nahtlose Integration von Live-DOM-Aktualisierungen, ohne die Seite neu laden oder navigieren zu müssen. Turbo baut auf Stimulus auf, um eine effiziente und schlanke Portion JavaScript zu liefern, die für die gesamte Interaktion benötigt wird. 

In den meisten Fällen können wir so auf das Schreiben von JavaScript verzichten! Und nicht nur das. Turbo hilft uns auch, beeindruckende Anwendungen für IOS und Android zu entwickeln. Durch die Wiederverwendung unseres Rails-Codes können wir eine native Anwendung erstellen, die ungeahnte Möglichkeiten der Wiederverwendung von Code und der einfachen Navigation bietet. Wir planen, Turbo in die meisten unserer Anwendungen zu integrieren, bei denen eine Art von Live-Aktualisierung von den Auftraggebenden geschätzt wird. Wir planen den Einsatz von Turbo auch dort, wo unsere Kundschaft mobile Anwendungen in ihre bestehende Webanwendung integrieren will. Wenn Sie eine bestehende Anwendung von Turbolinks auf Turbo umstellen möchten, werfen Sie einen Blick in diesen grossartigen Artikel von Alessandro. Sein Tutorial wurde bereits mehrfach verwendet, um ein Projekt auf Turbo zu migrieren.

Sicherheit

IT-Unternehmen haben die Pflicht, Benutzerdaten zu schützen und zu sichern, damit persönliche Daten oder wichtige Geschäftsinformationen nicht an die Öffentlichkeit gelangen. Verschlüsselung und Hashing spielen in diesem Katz- und Mausspiel eine grosse Rolle. Mit dieser Iteration von Rails werden wir in der Lage sein, ohne den bisher grossen Aufwand Informationen direkt auf der Datenbankebene zu verschlüsseln. Attribute können so einfach verschlüsselt werden wie:

  class User < ApplicationRecord
  encrypts :customer_number
end

Wir planen, diese Funktion zu nutzen, um die Sicherheit persönlicher Daten in einer Vielzahl unserer Projekte weiter zu verbessern.

Verbesserungen

Datenbank-Interaktionen

Zusätzlich zu all den neuen Funktionen verfügt Rails 7 auch über Verbesserungen und Aktualisierungen bestehender Funktionen:

ActiveRecord::Relation\#excluding

Ermöglicht die Angabe von ausgeschlossenen Einträgen in einer Datenbankabfrage.

  Post.excluding(post)

Zuvor wurde dieser Befehl erreicht, indem die ID des betreffenden Beitrags aus der Ergebnismenge ausgeschlossen wurde.

ActiveRecord::Relation\#load<sub>async</sub>

Dies ist eine Methode, die es uns ermöglicht, mehrere Abfragen in einem Thread-Pool zu planen und deren Ergebnisse nach Bedarf abzurufen. Damit können wir mehrere Werte gleichzeitig abfragen und die Seitenladezeit einiger Anwendungen stark verringern. Ein Feature, auf das wir uns sehr freuen.

ActiveRecord::Calculations.calculate

Die Durchschnittsaggregation auf Spalten berücksichtigt nun den Spaltentyp aus der Datenbank. Das bedeutet, dass es keine Ungleichheit mehr zwischen einem Spalten- und einem Rückgabetyp gibt. Diese Änderung wurde von unserem Josua implementiert und findet in Form von Rails 7 den Weg zurück zu uns.

Verwerfungen

Sprockets ist tot! Lang lebe Propshaft?

Sprockets war lange Zeit der Standard-Asset-Packing-Mechanismus für die meisten Rails-Anwendungen. Der erste Commit für das Projekt wurde 2008 gemacht. Seitdem hat es eine Vielzahl von Anwendungen gesteuert und uns gute Dienste geleistet ... Aber in den letzten 14 Jahren hat sich viel verändert und es ist nun an der Zeit, sich davon zu verabschieden. Rails 7 wird nicht mehr mit der Anforderung von Sprockets ausgeliefert. Stattdessen werden wir ermutigt, das neue Propshaft zu verwenden. Ein Tool zur Bereitstellung von Assets, das mit Blick auf die modernen Build-Tools entwickelt wurde.

Die Zukunft

Alles in allem sind wir sehr zufrieden mit den Änderungen, die Rails 7 uns bringen wird. Die Änderungen an JavaScript sind eine willkommene neue Herangehensweise an das Problem und zusammen mit der Integration von Turbo freuen wir uns darauf, dynamische und vielseitige Anwendungen zu liefern. Deshalb werden wir auch weiterhin auf Rails setzen und freuen uns auf eine grossartige Zukunft mit diesem tollen Framework.