Vorteile der Verwaltung von Drittanbietersoftware mittels Composer

Drittanbietersoftware bzw. Software-Libraries in der Entwicklung und somit auch in der Webentwicklung sind ein unverzichtbares Instrument, um Software kostengünstig entwickeln zu können. Somit lassen sich einzelne Funktionen und Komponenten gezielt in der Software einsetzen. Doch wie kommt Drittanbietersoftware am einfachsten in das eigene Entwicklungsprojekt? Im Bereich Webentwicklung mittels PHP lässt sich dies am einfachsten mittels Composer realisieren. Composer ist so gesehen die Paketverwaltung hinter PHP. Aber was genau sind die Vorteile?

Drittanbietersoftware bzw. Komponenten davon sind leicht im Internet z.B. auf Github zu finden. Diese können einfach heruntergeladen werden und in der eigenen Software platziert werden. Hierbei entsteht aber schnell ein kleines Problem. Was, wenn die Software Abhängigkeiten zu anderen Bibliotheken hat? Schnell muss man andere Bibliotheken hinzuziehen und dabei müssen diese auch mit der eigentlich benötigten Software (bzw. der Komponenten) kompatibel sein. So kann es passieren, dass die benötigte Softwarekomponente A in der aktuellen Version nicht mit der Softwarekomponente B in der aktuellen Version kompatibel ist, was wiederum dazu führt, dass von Softwarekomponente B z.B. eine ältere Version genutzt werden muss oder auch die eigentliche Softwarekomponente nicht in der aktuellen Version benutzt werden kann. Wenn jetzt tatsächlich nur zwei fremde Bibliotheken benutzt werden müssen, dann ist dieses noch ein relativ überschaubarer Aufwand. Allerdings zeigt die Praxis, dass es mit zwei Bibliotheken meistens nicht getan ist. Oftmals werden ein oder mehrere dutzend Bibliotheken benötigt. Manuell ist dies gar nicht oder nur mit sehr viel Aufwand zu bewältigen.

Hier kommt der PHP Packagemanager Composer ins Spiel. Er installiert, die benötigte Bibliothek und kümmert sich automatisch um alle notwendigen Abhängigkeiten. Damit wird es zu einer einfachen Aufgabe mehrere dutzend Softwarekomponenten zu verwalten.

Vorteile von Composer:

  • Abhängigkeitsverwaltung: Abhängigkeiten werden zuverlässig aufgelöst und jede durch eine Softwarekomponente benötigte weitere Komponente wir automatisch installiert.
  • Automatisches Laden von Abhängigkeiten: Abhängigkeiten werden durch einen “Autoload” Mechanismus automatisch zur Verfügung gestellt und es muss kein komplexes Einbinden der Komponenten implementiert werden.
  • Versionskontrolle: Neue Versionen können leicht installiert werden, da Composer Informationen zu neuen Versionen von Drittanbieterkomponenten zur Verfügung stellt und diese auch sicher updaten kann. Auch wenn eine Komponente vom ursprünglichen Entwickler als nicht mehr weiterentwickelt markiert wird, dann stellt Composer diese Information zur Verfügung.
  • Große Community: Extrem viele Softwareentwickler die Ihre Software bzw. Softwarekomponenten mit PHP entwickeln, stellen Ihre Software per Composer zur Verfügung.
  • Leichter Einstieg: Es ist sehr leicht mit Composer zu Arbeiten, da Composer eine kleine überschaubare Palette an befehlen hat, die man auf der Commandline ausführen kann (dazu später mehr).
  • Automatisierung: Da sich alles hier auf der Commandline ausführen lässt, besteht die Möglichkeit z.B. Updates teil zu automatisieren (Updates sollten nie vollautomatisch ohne Tests in ein Produktivsystem eingespielt werden).

Nachteile von Composer:

  • Komplexität bei großen Projekten: Sehr viele Abhängigkeiten können dazu führen, dass der Überblick über die ganzen eingesetzten Komponenten verloren geht. Dies kann hier auch dazu führen, dass es zu unlösbaren Abhängigkeitskonflikten kommt. Z.B. könnte es sein, dass Komponente A eine andere Komponente C in einer definierten Version benötigt, aber Komponente B benötigt Komponente C in einer anderen Version.
  • Sicherheitsrisiken: Viele verschiedene Komponenten führen leicht dazu, dass man den Überblick verliert und damit auch in welcher Komponente sich aktuell ggf. Sicherheitsrisiken befinden. Das führt leicht dazu, dass Sicherheitsrisiken übersehen werden. Hier ist der beste Tipp (wie bereits auch in unserem Artikel über Plugins beschrieben), es sollten nur die notwendigsten Komponenten installiert werden (wie auch nur wenige Plugins installiert werden sollten).

Die Technik (grober Überblick)

Wird in einem Projekt Composer eingesetzt, dann befinden sich in der Regel zwei Dateien im Filesystem:

  1. composer.json
  2. composer.lock

composer.json beschreibt, welche Komponenten das Projekt, in dem sich die Datein befinden, benötigt. Hier kann z.B. festgelegt werden, dass Komponente A in der Version 5.3 oder neuer benötigt ist. Das kann z.B. im json wie folgt angegeben werden:

“komponenteA”: “^5.3”

Dies führt dazu, dass Composer Komponente A mindestens in der Version 5.3 installiert. Dabei könnte hier die Version 5.3.1 (insofern dies die neuste Version unter der Hauptversion 5 ist) oder die Version 5.6.4 (insofern dies die neuste Version unter der Hauptversion 5 ist) installiert werden. Nicht installiert wird hier z.B. irgendeine Version der Hauptversion 6 (insofern diese existiert).

Welche Version tatsächlich installiert wurde, wird in der zweiten Datei composer.lock festgehalten. Befindet sich die Datei mit in der Versionskontrolle (z.B. Git, da sollte sich die Datei unbedingt befinden), kann jeder Entwicker der mit an dem Projekt arbeitet mit genau der gleichen Version arbeiten. Das schafft gleiche Voraussetzungen für alle Entwickler.

Die wichtigsten Composer Befehle:

composer require komponentenName

Installiert die Komponente in der neuesten Version.

composer require kompoentenName:5.2.2

Installiert die Komponente in genau der angegebenen Version

composer install

Installiert alle Komponenten die in der Datei composer.lock vorhanden sind in der dort drin hinterlegten Version.

composer outdated

Zeigt alle Komponenten an für die neue Updates zur Verfügung stehen. Komponenten mit einem normalen Update werden dabei rot angezeigt und Komponenten mit einer neuen Hauptversion werden gelb angezeigt. Bei den gelben Komponenten muss dann händisch in der Datei composer.json die Hauptversion angepasst werden.

composer update

Updated alle Komponenten für die Updates verfügbar sind. Zuvor erwähnte, durch composer outdated gelb markierte Komponenten werden nur in der jeweiligen Hauptversion die in der composer.json steht geupdated.

Composer Dependencies
Übersicht von Webentwicklung