diagrams-as-code mit PlantUML
Mit PlantUML können wir Diagramme als Code schreiben. Trotz seines Namens unterstützt PlantUML nicht nur UML, sondern auch eine Vielzahl anderer Diagrammtypen und kann mit eigenen Elementen angepasst werden.
Diagrams-as-code hat mehrere Vorteile:
- Versionskontrolle: Diagramme werden als Textdateien gespeichert, die mit Git oder einem anderen Versionskontrollsystem versioniert werden können. Anhand des Diffs kann man direkt sehen, was sich in einem Diagramm geändert hat.
- Fokus auf die Modellierung: Der Fokus liegt auf dem Inhalt (Elemente und deren Beziehungen), nicht auf dem Layout. PlantUML ordnet die Elemente im Diagramm automatisch an, was viel Zeit sparen kann.
- Dokumentation-as-code: Diagramme können direkt in die Dokumentation eingebettet werden, was besonders praktisch ist, wenn man einen Dokumentation-as-code-Workflow verwendet.
Zwei Dinge sind zu beachten: Die anfängliche Lernkurve ist etwas steiler als bei GUI-basierten Tools, und das automatische Layout funktioniert nicht immer zufriedenstellend, insbesondere bei größeren Diagrammen.
ADF-Elemente für PlantUML
Wir haben alle Elemente des ADF in PlantUML definiert, sodass wir sie in unseren Diagrammen verwenden können.
Hier ist ein Beispiel-Diagramm (System-Kontext-Diagramm mit ADF-Elementen), erstellt mit PlantUML:
Der Code für dieses Diagramm sieht so aus:
@startuml example1
!include https://raw.githubusercontent.com/architecture-decomposition-framework/adf-plantuml/refs/heads/main/ADF.puml
ADFRole(user, "Benutzer")
ADFRole(admin, "Administrator")
ADFSystem(ws, "Webshop")
ADFExternalSystem(pp, "Zahlungsanbieter")
ADFRelation(admin, ws, "nutzt", "konfigurieren,\ntroubleshooten")
ADFRelation(user, ws, "nutzt", "registrieren,\nbrowsen,\nkaufen")
pp -left0)- ws : "bezahlen"
@enduml
Wir können diesen Code im PlantUML Online-Editor öffnen und testen. Für einen Offline-Workflow laden wir die ADF.puml-Datei aus dem ADF-PlantUML Repository herunter, legen sie in dasselbe Verzeichnis wie unsere PlantUML-Datei und binden sie mit !include ADF.puml
ein.
PlantUML und Markdown - Dokumentation-as-code
Es gibt im Wesentlichen zwei Möglichkeiten, PlantUML-Diagramme in die Markdown-Dokumentation einzubinden:
-
Separate .puml-Datei: Wir können den PlantUML-Code in einer separaten Datei mit der Erweiterung
.puml
schreiben (z.B.diagram.puml
), manuell in ein Bild konvertieren (z.B.diagram.png
) und in die Markdown-Datei einbinden (mit
). Dies ist empfehlenswert, wenn wir den Diagramm-Quellcode von unserem Dokumentations-Quellcode trennen möchten. Der Konvertierungsschritt kann auch über die Befehlszeile oder innerhalb einer CI/CD-Pipeline automatisiert werden (im Wesentlichen durch Aufrufen vonplantuml *.puml
im Verzeichnis mit denpuml
-Dateien). -
PlantUML-Code einbetten: Wir können den PlantUML-Code direkt in die Markdown-Datei einbetten, indem wir
plantuml
-Codeblöcke verwenden. Ein Beispiel finden wir im Quellcode. Dies ist empfehlenswert, wenn wir den Diagramm-Quellcode zusammen mit unserer Dokumentation in einem Dokument pflegen wollen. Zu beachte ist, dass die aktuelle GitHub-Version das Rendern von PlantUML-Codeblöcken beim Verarbeiten von Markdown-Dateien nicht unterstützt, sodass wir diesen Schritt zur CI/CD-Pipeline hinzufügen müssen. Das Skript replace_plantuml.py kann dabei hilfreich sein (Code prüfen, Verwendung auf eigenes Risiko).
Arbeiten mit PlantUML in VS Code
Zuerst müssen wir die VS Code PlantUML-Erweiterung installieren. Nun ist eine Vorschau für alle puml
-Dateien verfügbar. Um das Rendern von eingebetteten PlantUML-Codeblöcken in Markdown-Dateien zu aktivieren:
- die VS Code-Einstellungen öffnen
- nach “plantuml” suchen
- “Plantuml: Render” auf “Server” einstellen
- “Plantuml: Server” auf den Pfad des offiziellen Servers (https://www.plantuml.com/plantuml) setzen
- Hinweis: Alle Diagramme werden nun an den Server gesendet! In gewissen Fällen ist das nicht geeignet. Für vertrauliche Projekte oder wenn wir offline arbeiten möchten, können wir das PlantUML-Kommandozeilen-Tool installieren (
brew install plantuml
auf MacOS), den Server auf “Lokal” setzen, den Befehlplantuml -picoweb
in einem Terminal ausführen (startet einen lokalen Server) und den Serverpfad aufhttp://localhost:8080
setzen.
Um die ADF-Elemente zu verwenden, können wir einfach !include https://raw.githubusercontent.com/architecture-decomposition-framework/adf-plantuml/refs/heads/main/ADF.puml
in unsere PlantUML-Datei/Code einfügen.
Damit !include ADF.puml
für eine lokale Kopie der ADF.puml-Datei funktioniert, müssen wir das PlantUML-Plugin so konfigurieren, dass es die Datei im richtigen Verzeichnis sucht:
- “View -> Command Palette” wählen, dann “> User Preferences (JSON)” eingeben und auswählen.
-
dort Folgendes hinzufügen:
"plantuml.includepaths": [ "/pfad/zum/verzeichnis/mit/datei/" ],
Den Pfad auf das Verzeichnis anpassen, in dem sich die ADF.puml-Datei befindet.
Dokumentationswebseite mit PlantUML-Diagrammen generieren
Mehrere Site-Generatoren können eine vollständige Dokumentationsseite aus Markdown-Code erzeugen und unterstützen auch die PlantUML-Konvertierung. Siehe mkdocs-with-plantuml für ein Beispiel, das MkDocs mit der plantuml_markdown
-Erweiterung und dem build_plantuml
-Plugin konfiguriert.
Es gibt auch Unterstützung für PlantUML in Jekyll, siehe z.B. das Drittanbieter-Plugin jekyll-plantuml (dieses Plugin wurde vom Autor dieser Dokumentation nicht getestet).