Die Softwareentwicklung mit Swift hat in den letzten Jahren enorme Fortschritte gemacht, und speziell im Bereich der Backend-Entwicklung ist Vapor als Framework zunehmend populär geworden. Vapor ermöglicht es Entwicklern, leistungsstarke, sichere und performante HTTP-Server, APIs und Backends zu erstellen – alles in der Eleganz der Swift-Programmiersprache. Parallel dazu hat sich das Werkzeug, das zur Unterstützung dieser Entwicklungen dient, ebenfalls weiterentwickelt. Ein besonders wichtiger Bestandteil ist die Vapor Toolbox, die jetzt vollständig neu konzipiert und umgesetzt wurde, um den modernen Anforderungen der Swift-Community gerecht zu werden. Die Vapor Toolbox ist ein Kommandozeilen-Tool, das ursprünglich dazu diente, Entwickler bei typischen Aufgaben wie dem Erstellen, Bauen, Ausführen und Bereitstellen von Vapor-Projekten zu unterstützen.
In ihrer bisherigen Form wurde sie mit ConsoleKit entwickelt, einem Framework, das damals die Interaktion in der Kommandozeile erleichterte. Mit dem technischen Fortschritt und dem Erscheinen des Swift Argument Parser wurde die ConsoleKit-Architektur allerdings zunehmend obsolet. Daher war eine komplette Überarbeitung unausweichlich, um die Toolbox zukunftssicher und effizient zu gestalten. Die Neuausrichtung fokussiert sich vor allem darauf, nur die essenziellen und noch nützlichen Funktionen der Toolbox zu behalten. Während viele der alten Unterbefehle mittlerweile veraltet sind, bleibt die „new“-Funktion bestehen.
Diese Funktion dient primär dazu, neue Vapor-Projekte aus zuvor definierten Templates – sogenannten Vorlagen – zu generieren. Diese Templates sind Git-Repositories, welche komplette Vapor-Projekte bereitstellen. Dabei werden Platzhalter mit Hilfe von Mustache-Syntax durch Nutzereingaben ersetzt, was flexible und wiederverwendbare Projektskelette ermöglicht. Eine der wesentlichen Änderungen der neuen Toolbox ist der Wechsel der Mustache-Engine. Ursprünglich wurde eine C-basierte Wrapper-Bibliothek eingesetzt, die vom Vapor Community Team gepflegt wurde.
In der neuen Version kommt „swift-mustache“ von Hummingbird zum Einsatz, eine komplett in Swift Implementierung des Mustache-Renderers. Dies sorgt nicht nur für eine bessere Integration in den Swift-Stack, sondern auch für die Nutzung moderner Sprachfeatures und eine verbesserte Wartbarkeit. Darüber hinaus wurde die zugrunde liegende Basis der CLI-Interaktionen komplett modernisiert. Der Ersatz von ConsoleKit durch Swift Argument Parser bringt viele Vorteile hinsichtlich Benutzerfreundlichkeit und Codequalität mit sich. Allerdings unterstützt Swift Argument Parser keine dynamisch generierten Argumente von Haus aus, was für die Toolbox-Templates eigentlich ein Muss ist, da die Anzahl und Art der Eingabeparameter stark variieren kann.
Die Entwickler haben hierfür eine clevere Lösung implementiert, die mittels eigener Reflection-Techniken die Argumente dynamisch anhand der Manifest-Datei der Templates erzeugt. Dieses Vorgehen sorgt für maximale Flexibilität, ohne Kompromisse bei der Bedienbarkeit einzugehen. Die Manifest-Datei ist das Herzstück eines jeden Vapor Toolbox Templates. Sie ist im YAML-Format gehalten und definiert sämtliche Variablen, die der Nutzer eingeben kann, sowie die Dateien und Ordner, die basierend auf diesen Variablen gerendert werden sollen. Die grundlegende Struktur dieser Datei wurde bewusst kaum verändert, um die Kompatibilität mit bestehenden Templates sicherzustellen.
Gleichzeitig wurden erweiterte Features implementiert, wie etwa verschachtelte Variablen, die eine bedingte Erzeugung von Dateien und Verzeichnissen ermöglichen. Ein weiteres Feature ist der neue Parameter --manifest, mit dem die Manifest-Datei an einem benutzerdefinierten Ort liegen kann – standardmäßig ist weiterhin manifest.yml gesetzt. Das Umgangserlebnis in der Konsole wurde ebenfalls verbessert. Die Standardeinstellungen des neuen Tools liefern eine deutlich kompaktere und übersichtlichere Ausgabe.
Wer lieber die ausführlichen Meldungen der alten Toolbox sehen möchte, kann die neue --verbose Option nutzen, die ähnliche Informationen ausgibt wie zuvor. Eine experimentelle und versteckte Option namens --dump-variables ermöglicht es, die Template-Variablen im JSON-Format auszugeben. Diese Funktion öffnet die Tür für eine bessere Integration in andere Tools oder grafische Benutzeroberflächen, beispielsweise eine mögliche Visual Studio Code Erweiterung. Die Umstellung von der alten Toolbox bringt allerdings auch kleinere Änderungen bei den Kommandozeilen-Flags mit sich. So wurde beispielsweise der Kurzbefehl für --template von -T auf -t geändert.
Aufgrund dieser Anpassungen wurde die neue Toolbox als Major-Release mit einem Versionssprung veröffentlicht, was bedeutet, dass nicht zu 100 % volle Rückwärtskompatibilität garantiert werden kann. Dies ist jedoch ein bewusster Schritt, um die Grundlage für ein moderneres, effizienteres Tool zu legen. Die neue Vapor Toolbox ist bewusst als offen gestaltetes Werkzeug konzipiert, das sowohl mit macOS als auch mit Linux kompatibel ist. Die einfache Installation erfolgt bequem über Homebrew, oder alternativ kann sie auch aus dem Quellcode kompiliert werden. Im GitHub-Repository sind umfangreiche Anleitungen enthalten, die Nutzern helfen, das Tool zu installieren, eigene Templates zu erstellen und tiefer in die Funktionsweise einzutauchen.
Ein faszinierender Aspekt der Toolbox ist die Vielseitigkeit der Templates. Sie sind nicht ausschließlich an Vapor gebunden, sondern können theoretisch jede Art von Projekt schablonieren, egal ob Backend, Frontend oder sonstige Software. Dies macht die Toolbox zu einem mächtigen Helfer, besonders für Entwickler, die ständig ähnliche Projekte aufsetzen und so automatisierte, wiederholbare Strukturen erzeugen möchten. In der Zukunft sind daher noch erweiterte Features und verbesserte Templates zu erwarten, da die neue Version eine solide Grundlage zur Weiterentwicklung sowohl vom Framework als auch vom Ökosystem bietet. Zusammenfassend markiert die komplett neu geschriebene Vapor Toolbox einen wichtigen Meilenstein für die Swift-Community.
Sie integriert modernste Swift-Technologien, verbessert die Benutzererfahrung deutlich und setzt neue Standards für die Entwicklung von Vapor-Anwendungen. Mit Features wie dynamisch generierten Kommandozeilenargumenten, nativer Swift-Mustache-Integration und deutlich besserer Benutzerführung ist sie ein unverzichtbares Werkzeug für jeden Vapor-Entwickler. Die aktive Weiterentwicklung und die Erweiterung des Ökosystems versprechen spannende Neuerungen in naher Zukunft, die den Entwicklungsalltag weiter erleichtern und effizienter gestalten werden.