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