20. August 2020

Das Drupal-Group-Modul ist endlich erschienen. Ein Blick auf die Vergangenheit und die Zukunft.

Nachdem ich fast fünf Jahre lang an der Drupal-8-Version gearbeitet habe, ist das „Group“-Modul nun endlich in der Version 8.x-1.0 erschienen. Ich persönlich bin sehr stolz auf diesen wichtigen Meilenstein und bin nicht im Geringsten enttäuscht, dass die Entwicklung länger gedauert hat als der Lebenszyklus von Drupal 8. Dies ist eine jener Situationen, in denen „der Weg wichtiger ist als das Ziel“. Allerdings muss ich zugeben, dass es sich wirklich gut angefühlt hat, dieses Ziel endlich erreicht zu haben.

Bevor wir jedoch loslegen, möchte ich klarstellen, dass es in diesem Blogbeitrag um die Entwicklungsgeschichte und die Entscheidungen rund um das „Group“-Modul geht, nicht um dessen Inspiration oder Ursprünge. Wenn Sie mehr darüber lesen möchten, wie ich den Mut aufgebracht habe, die Entwicklung dieses Giganten in Angriff zu nehmen, lesen Sie bitte stattdessen den folgenden Blogbeitrag: (Organic) Groups in Four Voices

Wie wir zur Version D8 gekommen sind und was es für den Code bedeutet

Group Logo
Group Logo

Initiale Entwicklungsentscheidungen

Als ich Ende 2015 zu Deeson kam, war es das Ziel, die guten Teile aus der D7-Version von Group zu übernehmen und sie so schnell wie möglich für Drupal 8 zu veröffentlichen. Ich hatte meine Lektion gelernt, was den Versuch angeht, es allen recht zu machen, und beschloss, dass das Modul lieber funktionsarm als funktionsreich sein sollte, dies aber durch eine einfachere Erweiterbarkeit ausgleichen würde.

Ich wusste, dass ich jegliche „Sonderrechte“ für meine eigenen Funktionen vollständig abschaffen und mich stattdessen darauf konzentrieren wollte, einige APIs zu schreiben, die ich selbst implementieren würde, um die Voraussetzungen für alle, die das Modul erweitern wollten, so weit wie möglich zu vereinheitlichen.

Zu diesem Zeitpunkt schlug John Ennew vor, dass ich für alle Elemente, die einer Gruppe hinzugefügt werden, dieselbe Verbindung verwenden sollte – auch wenn dies für manche Anwendungsfälle zunächst nicht sinnvoll erschien. Nach meinen Recherchen stellte ich fest, dass dies in Drupal 8 definitiv funktionieren würde, aber ich musste angesichts des noch jungen Alters von D8 einige Hürden überwinden, um den Ball ins Rollen zu bringen. Rückblickend war dies einer der Schlüssel zum Erfolg von Group 8, und ich bin froh, dass wir diese Mühen damals auf uns genommen haben, um dorthin zu gelangen, wo wir heute stehen.

Entscheidungen, die ich bereue

Einer der größten Nachteile, wenn man schnell vorankommen muss, ist, dass es dadurch schwierig wird, weit zu kommen. Als ich anfing, „Group“ für D8 zu schreiben, hatte ich mir nicht ausreichend Zeit genommen, jedes Subsystem des Kerns gründlich zu studieren, und meine Fähigkeiten im Schreiben von Tests waren so gut wie nicht vorhanden.

Das führte dazu, dass ich manchmal Code schrieb, der oberflächlich betrachtet gut funktionierte, sich später jedoch herausstellte, dass er die APIs des „Core“ nicht korrekt nutzte, was dazu führte, dass ich einige mühsame Updates schreiben musste. Beispiel: Gruppen waren anfangs nicht übersetzbar, und dies nachträglich zu ermöglichen, war in den früheren Versionen von Drupal 8 eine enorme Herausforderung.

Zu allem Überfluss begann ich mit einer Testabdeckung von null, denn wer hat schon Zeit, Tests zu schreiben, wenn man doch eigentlich nur großartigen Code schreiben will, oder? Falsch! Bei mehreren meiner früheren Updates und sogar bei ein oder zwei der neueren stellte sich heraus, dass sie etwas kaputt machten, das zuvor einwandfrei funktioniert hatte. Das Fehlen von Tests ist ein riesiges Warnsignal, das ich mittlerweile strikt zu vermeiden versuche. Aus diesem Grund werden alle kürzlich in „Group“ eingeführten APIs oder Systeme von einer Vielzahl von Tests begleitet, um sicherzustellen, dass sie einwandfrei funktionieren.

Porträt von Kristiaan Van den Eynde, leitender Drupal-Entwickler bei Factorial und einer der Hauptakteure der Drupal-Gemeinschaft.

Kristiaan Van den Eynde

Backend Developer

Kristiaan@factorial.io
Drupal Group Image

Der Endspurt: Group -and- Subgroup in einem Schritt fertigstellen

Wir haben mit der japanischen Agentur ANNAI vereinbart, ihnen bei der Entwicklung einer Erweiterung für „Group“ zu helfen, die es ermöglicht, Gruppen innerhalb von Gruppen anzulegen – sogenannte „Subgroups“. Sie benötigten ein System, in dem Berechtigungen innerhalb einer Hierarchie nach oben oder unten vererbt werden können, und anstatt selbst eine Erweiterung für „Group“ zu schreiben, fragten sie mich, ob ich bereit wäre, dies für sie zu übernehmen.

Eine ihrer wichtigsten Anforderungen war, dass der gesamte Code vom Sicherheitsteam geprüft werden sollte, damit sie sicher sein konnten, dass ihre Anwendung künftig als sicher gelten kann. Als ich erklärte, dass noch einige knifflige Probleme bestanden, die eine vollständige Veröffentlichung von „Group“ verhinderten, erklärten sie sich bereit, auch das Budget bereitzustellen, damit ich diese Probleme endlich lösen und sowohl „Group“ als auch „Subgroup“ gleichzeitig veröffentlichen konnte.

All dies wäre nicht möglich gewesen, hätte mein Freund und ehemaliger Kollege Mori Sugimoto nicht im Herbst letzten Jahres das Treffen auf der DrupalCon Amsterdam organisiert. Und ich freue mich, sagen zu können, dass die Zusammenarbeit von Anfang bis Ende hervorragend verlief. „Group“ wurde endlich vollständig veröffentlicht, und „Subgroup“ wurde pünktlich fertiggestellt und verfügt über hochwertigen Code sowie eine vollständige Testabdeckung.

Der Release-Kandidat von „Subgroup“ ist bereits hier verfügbar und wird in Kürze zur vollständigen Version hochgestuft, sobald wir einige interne Tests abgeschlossen haben.

Wie geht es weiter?

Ein neuer Entwicklungsansatz 

Ich möchte die Codequalität von „Subgroup“ als meinen neuen Standard betrachten. Daher sollte alles, was nun in „Group“ einfließt, idealerweise dieser Art der Programmierung entsprechen. Das bedeutet, dass im Laufe der Zeit einige ältere Teile von „Group“ umgeschrieben werden müssen, damit ihnen dieselbe Aufmerksamkeit zuteilwird wie den neueren Funktionen.

Das Ziel ist nun, uns eine Zeit lang auf beliebte Feature-Anfragen zu konzentrieren und Fehler zu beheben, dabei nach und nach Releases zu veröffentlichen und anschließend mit der Arbeit an einem 2.0.x-Zweig zu beginnen. Dieser Zweig wird alle älteren Teile, die mir wirklich nicht gefallen, beseitigen und durch neuere Systeme ersetzen, die ich nicht einführen kann, ohne die Abwärtskompatibilität zu beeinträchtigen. Möglicherweise müssen auch einige schlecht benannte Systeme umbenannt werden, aber ich bin mir diesbezüglich noch unschlüssig, da dies die Migration von 8.x-1.x auf 2.0.x erschweren könnte.

Eure Mithilfe ist gefragt

Ich mache das jetzt schon viel zu lange ganz allein. Deshalb ist es derzeit mein größtes Ziel, neue Mitbetreuer zu finden, die mir dabei helfen, all das zu erreichen. Im Idealfall würde ich gerne sehen, ob die Leute hinter „Organic Groups“ und ich uns über etwas austauschen können, das uns allen gefällt, und vielleicht gemeinsam an etwas wirklich Großartigem arbeiten.

Abgesehen davon wäre ich schon sehr zufrieden, wenn sich einfach jemand melden und mithelfen möchte. Es liegt auf der Hand, dass man sich ein wenig mit „Group“ und dem Core auskennen muss, aber schon die richtige Einstellung wäre ein großer Schritt in die richtige Richtung. Ich möchte jeden, der sich dieser Aufgabe gewachsen fühlt, ermutigen, mich direkt über drupal.org oder über Drupal Slack zu kontaktieren, um zu sehen, ob wir uns irgendwie einigen können.

Ich bin auf der Suche nach neuen Projekten, denen ich mich widmen kann

Normalerweise mache ich nicht viel daraus, meine Fähigkeiten zu vermarkten oder jemandem etwas verkaufen zu wollen. Ich habe Spaß daran, coole Software zu entwickeln, und alles andere ist mir eher egal. Aber in diesem Fall möchte ich eine Ausnahme machen.

Wissen Sie, ich hatte in den letzten zwei Monaten so viel Spaß dabei, Software so zu entwickeln, wie sie entwickelt werden sollte, dass ich mir nichts sehnlicher wünsche, als das noch einmal tun zu können. Wenn Sie also Interesse an einer Erweiterung für „Group“ haben und über ein entsprechendes Budget verfügen, zögern Sie nicht, uns zu kontaktieren.

Sie werden nicht nur jemanden für Ihr Projekt gewinnen, der das „Group“-Modul in- und auswendig kennt, sondern Sie können auch sicher sein, dass diese Person wirklich motiviert ist, an Ihrem Code zu arbeiten! Wenn diese Win-Win-Situation für Sie wie Musik in den Ohren klingt, schreiben Sie uns unter hello@factorial.io und teilen Sie uns mit, was Sie benötigen.