Rector: PHP-Code Refactoring mit Autopilot

Rector: PHP-Code Refactoring mit Autopilot

Unser Freelance-Kollege Sebastian Schreiber, seines Zeichens TYPO3 Urgestein und erfahrener PHP-Entwickler ist seit 2019 in die Weiterentwicklung des Open-Source-Projekts Rector involviert. Was Rector macht, wieso nahezu jeder Entwickler, wir bei PPW und auch unsere Kunden davon profitieren, und weshalb pure Faulheit manchmal ein hervorragender Antrieb ist, darum soll es in diesem Blogpost gehen. Im Interview haben wir mit Sebastian und mit dem Rector-Erfinder Tomas Votruba aus Tschechien gesprochen.

Sebastian, was macht Rector?

Rector ist ein Open-Source-Tool für jede PHP-basierte Anwendung, wie z.B. Symfony, Doctrine, Laravel. Die wesentlichen beiden Funktionen von Rector sind: Laufende Code-Qualitätsanalyse und automatische Code-Upgrades. Die Basis von Rector sind Regeln. Das sind im RectorPHP rund 700 Regeln. Im RectorTYPO3 derzeit knapp 200 Regeln. Das Ergebnis durch den Einsatz von Rector ist besser lesbarer, konsistenter Code.

An wen richtet sich Rector?

Rector richtet sich ausnahmslos an PHP-Entwickler. Allerdings muss man kein extrem erfahrener PHP-Entwickler sein. Der Konfigurationsaufwand ist überschaubar. Auch Anfänger und junge Entwickler können damit arbeiten. Aus meiner Sicht richtet es sich vor allem auch an wissbegierige Entwickler, die explorativ vorgehen. Anstatt zig Change-Logs zu studieren, gibt es hier die einfache Möglichkeit, mit Rector einige Regel-Sets durchzuspielen und zu schauen, was Rector empfiehlt – quasi ein Schulterblick eines anderen Entwicklers. Man kann Rector auch mit einer Art Lektor vergleichen, der mir dabei hilft, meine Code-Qualität zu verbessern.

Wie bist du mit Rector in Berührung gekommen?

Ich bin als TYPO3 Entwickler seit Version 3.5 dabei. Bei einem größeren TYPO3 Projekt vor ein paar Jahren habe ich allein vor mich hin entwickelt. Dann stand ein großes Upgrade an, bei dem teils veraltete Methoden eingesetzt wurden. Dabei habe ich manche Fehler wiederholt gemacht. Das war ungefähr 2017. Damals habe ich recherchiert und bin so auf RectorPHP aufmerksam geworden. Mit Tomas, dem Erfinder des Tools bin ich dann 2019 in Kontakt gekommen.

Welchen Effizienzgewinn bedeutet Rector in deiner Arbeit?

Das ist pauschal schwer zu beantworten. Ich denke, in meinen TYPO3 Projekten habe ich dank Rector eine Zeitersparnis von 30-50%. Aber wie lautet immer das schöne Bonmot “it depends”. Es kommt immer auf die Ausgangsbasis an. Ich hatte auch schon einmal den glücklichen Fall, dass ich Features von PHP 8 in einer PHP 7.3 Code-Basis binnen 10 Minuten ausrollen konnte. Für unsere Kunden bedeutet der Einsatz von Rector schnellere, weniger fehleranfällige und natürlich auch kostengünstigere Upgrade-Prozesse.

Du hast Rector TYPO3 maßgeblich entwickelt und eine Menge deiner Zeit in dieses Open-Source-Tool gesteckt. Was motiviert dich dabei?

Zuallererst bin ich total überzeugt vom Ansatz, den Tomas mit Rector begründet hat. Zeitersparnis bei Upgrade-Prozessen und das Bereinigen von Legacy-PHP sind für jeden Entwickler sehr verlockend. Grundsätzlich versuche ich mich in meinem Gebiet weiterzuentwickeln und habe auch den Anspruch, anderen Entwicklern helfen zu können. Natürlich macht das auch Spaß, wenn man auf seinem Gebiet die Expertise ausbaut und ein kompetenter Ansprechpartner für andere sein kann.

Kann man Rector mit einem Autopilot vergleichen?

Im Prinzip ja. Natürlich muss einiges überwacht werden und man sollte sich nicht blind zurücklehnen. Ein gewisses Maß an Kontrolle – wie auch bei jedem Autopiloten – ist also weiterhin erforderlich. Der wesentliche Unterschied: Rector verkürzt die „Reisezeit“ erheblich. Aber Rector kann eben auch nicht alles. Eine 100%-Lösung gibt es leider noch nicht. Es ist ein lebendes Regelwerk, das für alle transparent einsehbar ist. Alle angewendeten Regeln haben eine Erklärung. Jede vorhandene Regel lässt sich individuell anwenden oder es lassen sich eigene Regeln hinzufügen.

[Anmerkung: In diesem Moment schaltet sich etwas verspätet Tomas dazu, der am Tag des Interviews in Tschechien eigentlich einen Feiertag genießt und erstmal eine Runde durch den Park unterwegs ist.]
Interview zu Rector PHP - Thomas Votruba und Sebastian Schreiber
Hat gut lachen, weil Rector (fast) seine gesamte Arbeit übernimmt, während er eine Runde um den See spaziert: Tomas. Links: Sebastian.

Hallo Tomas! Ich habe bereits gelesen, dass du dich als „super lazy“ bezeichnest. Bitte erzähle ein bisschen von dir.

Ich bin ein PHP und Symfony-Framework Entwickler. Ich habe als Consultant andere Entwickler geschult, wie sie PHP upgraden und Legacy loswerden. Direkt an Website-Projekten arbeite ich wenig. Bei der Schulung von Entwicklern war ich mit der Arbeitsmethodik nicht wirklich glücklich und hatte auch nicht das Gefühl, dass ich den anderen Entwicklern immer gut helfen konnte. Ich habe dann begonnen, nach einer Automatisierungslösung für PHP zu suchen. So habe ich mit PHP Parser beschäftigt. Meine Idee war: Ich wollte einheitliche Coding-Standards etablieren und meine Arbeitslast zur Herstellung dieses Codes reduzieren. Alles was sich automatisieren lässt, sollte möglichst automatisiert werden.

Wie sieht deine Arbeit aktuell aus?

In der jüngsten Zeit verteilt sich meine Arbeit so, dass ich ungefähr zur Hälfte Rector weiterentwickele und zur anderen Hälfte bei Legacy-Projekten mittels Rector aufräume bzw. dabei unterstütze PHP/Symfony für Software-Anbieter upzudaten. So kann ich Rector in der freien Wildbahn testen und direkt Edge Cases bemerken.

Das mache ich mittlerweile auch nicht mehr alleine. Neben Sebastian gibt es noch einen befreundeten Entwickler, der Rector für ein tschechisches CMS einsetzt, sowie meinen Kollegen Abdul, der sich vor allem um das  GitHub Repository kümmert. Außerdem gibt es eine Person für die Drupal-spezifischen Regelsets. Mittelfristig ist das Ziel, einen Verantwortlichen für jedes PHP-Framework zu finden.

Wie ist die Zusammenarbeit mit Sebastian?

Sebastian teilt die Leidenschaft mit mir. Er möchte Rector mit weiterentwickeln und nach vorne bringen, weil er die gleichen Ziele verfolgt, wie ich. Wir pushen uns gegenseitig. Das liefert mir auch zusätzliche Energie für die weitere Arbeit an Rector.

Du hast ein Buch veröffentlicht zu Rector. Wie kam es dazu?

Das war ein ähnliches Szenario wie jetzt gerade. Matthias (Noback) hat mich zu Rector interviewt und wollte ursprünglich einen Artikel zu Rector schreiben. Letztlich ist es dann so ausgeufert, dass daraus ein gemeinsames Buch wurde. Durch dieses Projekt konnte ich zudem sehr gut lernen, wie ein einzelner User mit Rector interagiert. Matthias ist glücklicherweise in der Lage, die Inhalte sehr gut herunterzubrechen und zu erklären, so dass sie wirklich für jeden Entwickler mit grundlegenden PHP-Skills zugänglich sind. Mittlerweile haben wir jeden Tage Verkäufe und wir erhalten wertvolles Feedback von den Usern, wie sie Rector einsetzen.

Wie sieht deine Vision für Rector aus? Was wird noch folgen?

Aktuell arbeite ich mit Sebastian an einem noch geheimen Projekt, dass Entwicklern zu noch mehr Faulheit verhelfen soll 😊 So gesehen ist es auch keine Vision, sondern bereits in Arbeit. Grundsätzlich will ich Entwicklern dabei helfen, Legacy komplett loszuwerden und sie befähigen, sich um den spannenden Teil bei der Arbeit zu kümmern.

[Anmerkung Sebastian]

Rector ist für mein Verständnis auch eine Art Lektor, der dir dabei hilft, zum Beispiel die neuen Features eines Frameworks kennenzulernen. Du sparst dir die Lektüre von Changelogs und lässt Rector direkt die Arbeit übernehmen. Anschließend studierst du die vorgeschlagenen Änderungen und lernst direkt „on-the-job“, welche Code-Anpassungen sinnvoll sind.

Ich danke euch beiden für eure Zeit!


Weiterführende Links zu Rector

Rector Website: https://getrector.org

Rector auf GitHub: https://github.com/rectorphp/rector

Rector Buch: https://leanpub.com/rector-the-power-of-automated-refactoring

Tomas bei Twitter: https://twitter.com/votrubaT

Sebastian bei Twitter: https://twitter.com/schreiberten