Fünf Tools, die bei der Migration von PHP-Projekten helfen

Im April hatten wir euch unser Projekt modernizeYourPHP vorgestellt – ein Sammelsurium von Tipps und Best Practices, Tools und vielem mehr, das euch bei der Migration eines PHP-Projekts auf eine neue Version helfen kann. So weit, so gut.

Während wir uns im ersten Post mit der Dockerisierung von (Legacy-)PHP-Applikationen auseinandergesetzt haben, wollen wir in diesem Artikel einen Blick auf verschiedene Tools werfen und euch unsere Einschätzung dazu geben.

Fünf Tools, die bei der Migration helfen sollen

Im Zuge unserer Recherche haben wir uns fünf Tools genauer angesehen: Rector, PHPDeprecationDetector, Intellij PHP Inspections, PHPStan mit Deprecation-Regelsatz und den Codesniffer mit PHPCompatibility-Regelsatz. Ohne euch spoilern zu wollen, sind uns dabei doch recht viele Dinge aufgefallen, die am Ende den Gesamteindruck der jeweiligen Tools getrübt haben.

Dennoch können wir euch beruhigen: Es gibt einen eindeutigen Gewinner!

Unsere Matrix

In unserer Vergleichsmatrix haben wir die Tools auf verschiedene Aspekte hin untersucht. Neben dem Nutzen für Migrationsprojekte – immerhin ist das das Ziel unseres Vorhabens – haben wir uns auch mit der Installation bzw. der Komplexität der Konfiguration beschäftigt. 

Des Weiteren haben wir uns angesehen, wie es um die Aktivität in den Projekten steht (sprich: wird das Tool aktiv weiterentwickelt?), ob es PHP-8-Support bietet und in welchem Format die Reports ausgegeben werden. Und natürlich gilt: ein Autofixing von Problemen gibt einen Bonuspunkt.

— modernize Your PHP —

In unserem Projekt modernizeYourPHP halten wir alle Dinge fest, die beim Migrieren eines PHP-Projektes auf eine neuere Version helfen können.

Ohne weitere Worte verlieren zu wollen, präsentieren wir euch im Folgenden unsere Ergebnisse.

ToolRectorPHPDeprecationDetectorIntelliJ PHP InspectionsPHPStan mit PHPStan-Deprecation-RegelsatzCodesniffer mit PHPCompatibility-Regelsatz
Nutzen für Migrationsprojekte
  • Versionsmigrationen als Hauptanwendungsbereich
  • Viele Regelsätze für Versionen und Frameworks
  • Hoch entwickelter Autofixer mit starkem Fokus auf Automatisierung
  • Fokus auf deprecated/deleted Sprachkonstrukte
  • Findet auch in neuen Versionen reservierte Schlüsselworte
  • Statische Codeanalyse
  • Fokus auf Codestyle, aber Regelsatz für Versionsmigrationen vorhanden
  • Statische Codeanalyse
  • Fokus auf Codestyle und Sicherheit
  • Es gibt ein Deprecation Regelsatz
  • Statische Codeanalyse
  • Regelsatz (PHPCompatibility) sucht nach deprecated/deleted Sprachkonstrukten
Konfiguration
  • Installation einfach bei nicht zu alten PHP-Versionen, sonst komplex
  • Konfiguration etwas umständlich
  • Dokumentation lässt zu wünschen übrig
  • Einfache und schnelle Installation
  • Konfiguration nur über Parameter
  • Ausreichend dokumentiert
  • Direkt in Intellij integriert
  • Installation einfach, Konfiguration etwas unübersichtlich und schwer in der Handhabung (viele, viele Checkboxen)
  • Wer den Trick kennt (customRulesetUsed: true) bekommt es schnell zum Laufen
  • Konfiguration sonst übersichtlich
  • Gut dokumentiert
Projektaktivität
  • Kritische Bugs tauchen im Master auf und werden nicht zurückgerollt
  • Wird aktiv weiterentwickelt
  • Nur ein Developer
  • Sporadische Updates
  • Wird aktiv weiterentwickelt
  • Es gibt noch eine kostenpflichtige Premiumversion mit weiteren Funktionen
  • Weit verbreitetes Tool
  • Wird aktiv weiterentwickelt
  • Weit verbreitetes Tool
  • Wird aktiv weiterentwickelt
Autofixingteilweise
(eigentlich vorhanden, aber nicht für die Deprecation Rules)
teilweise
PHP-8-Support
Reportformat
  • Konsolenoutput geclustert nach Dateien, formatiert als Diff
  • angezeigte Exportformate: .md, .json, etc. werden noch nicht unterstützt
  • Beispieloutput
  • Tabelle als Konsolenoutput, gruppiert nach PHP-Version, eine Zeile pro Codestelle
  • JSON, gruppiert nach generellen Infos, Funden, Änderungsvorschlägen und Hinweisen
  • Exportformate: Text, JSON
  • Beispieloutput
  • Direkt in Intellij, gruppiert nach Severity
  • Exportformate: HTML, XML
  • Beispieloutput
  • Konsolenoutput gruppiert nach Dateien, ein Fund pro Zeile
  • Exportformate: JSON, direkter Import in Github und Gitlab, uvm.
  • Beispieloutput
  • Konsolenoutput gruppiert nach Dateien, ein Fund pro Zeile
  • Exportformate: Git Blame, JSON, XML, CSV, uvm.
  • Beispieloutput
KommentareUnser Test wurde durch einen kritischen Bug in Master aufgehalten, der nur im devmaster gefixt war.
Fazit ★★☆☆☆
Ein Tool das viel verspricht, viel leisten kann, aber noch einige Kinderkrankheiten hat.
★★★★☆
Verspricht nicht zu viel, aber was es verspricht hält es. Aktuell fehlender PHP8 Suport ist ein Manko.
★★★★☆
Die UX der Konfiguration ist verbesserungsfähig, aber die gute Integration ermöglicht in absehbarer Zeit produktives Arbeiten.
★★☆☆☆
Prüft leider nur auf @deprecated-Tags, daher nur eingeschränkt nützlich.
★★★★★
Tut was es soll. Installation etwas holprig, hat viele sinnvolle Dinge gefunden.

Wenn ihr selbst Erfahrungen mit diesen oder anderen Tools habt, lasst es uns gerne wissen.

Für neue Blogupdates anmelden:


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.