Composer - Der Dependency-Manager für PHP

Wenn Sie schon einmal mit PHP Web-Applikationen oder Websites entwickelt haben, kennen Sie das Problem: Web-Projekte setzen sich meist aus mehreren unabhängigen Frameworks zusammen. Eine typische Web-Applikation besteht aus einem PHP-Framework im Hintergrund, einer JavaScript-Library und einem CSS-Framework für das Frontend. Wer behält den Überblick über die Versionen dieser Fremdkomponenten und ob sie untereinander kompatibel sind? Es gibt endlich eine Lösung für dieses Problem. Lernen Sie Composer kennen!

Bereits einfache Web-Appli­kati­onen haben einen hohen Grad an Komplexität. Nehmen Sie als Beispiel unsere Website. Folgende Kompo­nenten setzen wir ein:

Dies ist bereits eine beacht­liche Liste, wenn man bedenkt, dass es sich nur um eine Website mit einfacher Blog-Funktion handelt. Wenn wir nun die Abhäng­igkeiten dazugeben, erkennen Sie das gesamte Ausmass der Problematik:

Als Entwickler hat man nun die Aufgabe - nebst dem Entwickeln der eigen­tlichen Appli­kation - Abhäng­igkeiten und Versionen der eingesetzten Fremd­kompo­nenten zu verfolgen. Das Updaten einer Komponente führt meist zu Inkom­pati­bili­täten anderer Appli­kati­onsteile. Eigentlich schon längst überfällig, gibt es nun ein Werkzeug, welches uns beim Managen der Kompo­nenten-Abhäng­igkei­ten unter die Arme greift. In den folgenden Abschnitten lernen Sie was Composer ist und wie Sie mit dem Produkt arbeiten.



1.Installation

Bevor Sie loslegen können, müssen Sie Composer in Ihrem Projekt instal­lieren. Die hier beschriebene Instal­lation ist für Windows-Systeme. Die Anleitung für sämtliche Systeme finden Sie auf der offiziellen Website.

Windows-Installation

Die einfachste Art der Installation ist der Download des Installers. Dieser findet automatisch den Installationspfad Ihrer php.exe und richtet die Einträge in Ihrer PATH-Variable ein.

Im Anschluss können Sie Composer überall in Ihrer Windows-Konsole über den composer-Befehl aufrufen. Wenn alles geklappt hat, erhalten Sie dabei folgende Ausgabe:

2.Was genau macht Composer?

Composer verwaltet zwar Pakete oder Libraries, ist aber kein Package-Manager im klas­sischen Sinne. Composer verwaltet Pakete auf Projekt­ebene. Die offizielle Website beschreibt die Kern­aufgaben folgen­dermas­sen:

  1. Sie haben ein Projekt, welches externe Libraries einsetzt
  2. Einige dieser Libraries hängen selber von weiteren Libraries ab
  3. Sie deklarieren, welche Libraries Sie effektiv benötigen
  4. Composer löst dann selbständig alle Abhängigkeiten und Versionen auf und lädt diese selbstständig in Ihr Projektverzeichnis.

Damit dies funktioniert, müssen Sie innerhalb des Projekt-Haupt­ordners eine Composer-Konfigurationsdatei anlegen. Der Dateiname lautet typischerweise composer.json und enthält ein JSON-Objekt, welches die Projekteigenschaften und -abhängigkeiten beschreibt. Die nachfolgende Datei beschreibt ein einfaches Yii-Projekt:

{
	"require": {
		"php": ">=5.3.2",
		"yiisoft/yii": "1.1.*"
	}
}

Damit Yii in der gewünschten Version läuft, setzen wir die entsprechende PHP-Version voraus (mindestens 5.3.2) und fordern die aktuellste Yii-1.1-Subversion an (1.1.*). Voilà!

3.Testprojekt

Um die korrekte Funktionsweise zu testen, können Sie im Web-Ordner htdocs Ihres Web-Servers ein neues Verzeichnis anlegen und die oben beschriebene composer.json-Datei einfügen. Nun starten Sie die Windows-Konsole und wechseln in das selbe Verzeichnis. Mit der Anweisung composer install starten Sie den Projekt-Installationsprozess:

Nachdem Composer mit den Arbeiten fertig ist, finden Sie im Verzeichnis folgende Dateien und Ordner:

Sie haben vielleicht festgestellt, dass sich im Ordner vendor eine PHP-Klasse mit dem Namen autoload.php befindet. Diese hat Composer für uns erstellt, dass wir uns nicht mehr um den Import der einzelnen PHP-Klassen der heruntergeladenen Libraries kümmern müssen. Wenn Sie nun im Projektverzeichnis eine neue PHP-Datei erstellen und eine Library-Klasse verwenden möchten, so brauchen Sie diese nicht mittels require_once() einzubinden. Einzig die vendor/autoload.php-Datei müssen Sie am Anfang der Datei einbinden und können im Anschluss Instanzen sämtlicher Klassen erstellen. Wow!

4.Das Paket-Verzeichnis

Woher kriege ich Pakete?

In der Konfigurationsdatei werden die angeforderten Pakete festgelegt. Doch woher sollen Sie wissen, welche Pakete überhaupt über Composer installiert werden können? Für diesen Zweck gibt es die Webseite Packagist. Sie können ganz einfach nach dem Namen der benötigten Library suchen und erhalten sämtliche verfügbaren Versionen und Einstellungen zur Verwendung mit der Konfigurationsdatei.

Um beispielsweise die aktuellste, stabile Version 3 von Twitter Bootstrap einzubinden, müssen Sie Ihre Konfigurationsdatei mit der Zeile "twitter/bootstrap": "v3.*" ergänzen. Wenn Sie ganz auf dem Stand der Zeit sein möchten und auch mit in Entwicklung stehenden Versionen leben können, müssen Sie @dev anhängen: "twitter/bootstrap": "v3.*"@dev.

Und umgekehrt?

Ja, es geht auch umgekehrt. Ihre eigenen Projekte können Sie ebenfalls zum Download anbieten. Sie müssen dazu einzig die composer.json-Datei ergänzen. Damit andere Benutzer Ihr Paket finden können, braucht es noch einen Namen. Zusätzlich müssen Sie definieren, wo sich der Inhalt Ihres Pakets, bzw. Ihr Repository im Internet befindet. Wenn Sie das Beispiel aus Abschnitt 3 mit den nötigen Angaben ergänzen, erhalten Sie folgende Konfigurationsdatei:

{
	"name": "asinfotrack/testproject",
	"repositories": [
		{
			"type": "vcs",
			"url": "https://github.com/asinfotrack/testproject"
		}
	],
	"require": {
		"php": ">=5.3.2",
		"yiisoft/yii": "1.1.*"
	}
}

Andere Benutzer können nun das von Ihnen erstellte Paket ganz einfach mit Composer herunterladen. Da auch Sie die Abhängigkeiten Ihres Projekts definiert haben, schliesst sich der Kreis wieder. Eine saubere Sache!

Schreibweise

Die Details zur Versionsschreibweise und den Paketnamen finden Sie auf der offiziellen Website.

5.Composer in Kombination mit Version-Control

In Kombination mit einem Versions-Kontrollsystem wird ein weiterer Vorteil sichtbar. Normalerweise wird ein Projekt als Ganzes im System eingecheckt. Mit Composer brauchen Sie nun keine Libraries einzuchecken, da ein Programmierer nach dem auschecken ganz einfach über die composer install-Anweisung die Libraries herunterladen kann. Durch die composer.lock-Datei wird zudem garantiert, dass jeder Programmierer dieselbe Version der Libraries hat. Sie sparen viel Platz im Versions-Kontrollsystem, welcher sonst durch das x-fache hochladen der selben Libraries und Frameworks verschwendet würde.

Was muss wirklich eingecheckt werden?

Diese Frage kann ganz einfach beantwortet werden: Ausschliesslich Dateien, welche Sie programmieren. Die restlichen Dateien und Ordner können ignoriert und von jedem Benutzer individuell heruntergeladen werden.

Umsetzung mit Git-Version-Control

Git sucht in jedem Verzeichnis nach einer Datei mit dem Namen .gitignore. Eine solche Datei können Sie im Verzeichnis vendor anlegen und darin den nachfolgenden Code speichern:

*
!.gitignore

Damit sagen Sie Git, dass es alles innerhalb des Ordners, ausser der .gitignore-Datei nicht versionieren und somit hochladen soll. Ihre Repositories werden so nicht mehr aufgebläht und belasten den Speed Ihres Servers nicht.

6.Schlussfolgerung

Ich bin verhältnismässig spät in den Kontakt mit Composer gekommen. Umso mehr schätze ich mittlerweile das Werkzeug. Es minimiert Fehlerquellen, spart Platz, konzentriert die Versions- und Abhängigkeitsverwaltung in der Datei composer.json und erlaubt es, den Code auf einfachste Art und Weise wiederzuverwenden.

Obwohl unabhängig davon entwickelt, verbessert Composer die Sprache PHP (und andere Skript­sprachen) erheblich, da es einem der grössten Negativargumenten dieser Sprache den Wind aus den Segeln nimmt. Das Tool ist einfach in der Bedienung und der eingesparte Zeitaufwand ist beträchtlich.

Was halten Sie von Composer? Schreiben Sie uns Ihre Meinung in einem Kommentar. Wir sind gespannt.


Pascal Müller

Bereichsleiter Software Engineering


Seit über zehn Jahren entwickle ich nun PHP-Applikationen und schätze die Sprache als hervorragendes Werkzeug für die Web-Entwicklung. Gegner der Technologie nennen stets das "Chaos" der Versionen und Abhängigkeiten zurecht als grossen Minuspunkt von PHP. Composer ist zwar keine neue Idee, aber die erste, welche sich durchsetzen konnte. Composer vereinfacht mir das Leben enorm, da ich den Fokus dadurch auf das Wesentliche legen kann: die Entwicklung der eigentlichen Kunden-Applikationen.