Communitygithub.com

C4 Container-Diagramm-Generator

Erzeugt C4-Container-Diagramme nach C4-Modellkonventionen und exportiert sie als bearbeitbare .drawio-XML-Dateien, die direkt in draw.io (Desktop oder Web) geöffnet werden können.

Was ist C4 Container-Diagramm-Generator?

Dieses Skill generiert C4-Container-Diagramme, die die Architektur eines Systems auf Containerebene visualisieren. Es ist für Entwickler und Architekten gedacht, die ihre Systemarchitektur dokumentieren oder präsentieren möchten. Das Skill unterstützt explizite und proaktive Auslöser: Es wird aktiv, wenn ein Benutzer nach einem C4-Diagramm, einer Architekturübersicht oder einer Komponentendarstellung fragt, oder wenn im Gespräch Systeme mit mehr als drei interagierenden Komponenten diskutiert werden. Die Ausgabe erfolgt als .drawio-XML-Datei, die in draw.io geöffnet und bearbeitet werden kann. Der Prozess umfasst das Erfassen der Anforderungen, Klassifizieren der Elemente (Personen, Container, Datenbanken, Warteschlangen, externe Systeme), Planen eines strengen, schichtweisen Layouts (Personen oben, Systemgrenze in der Mitte, externe Systeme unten), Definieren der Verbindungen mit Protokollen und das Validieren des Ergebnisses. Wichtige Regeln sind: keine automatischen Layouts, alle Verbindungen müssen beschriftet sein, ein Legendeneintrag ist obligatorisch, und es werden nur integrierte draw.io-Formen (keine C4-Shape-Bibliothek) verwendet. Das Skill vermeidet Anti-Patterns wie unleserliche Beschriftungen, fehlende Legenden oder überlappende Elemente.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add ANcpLua/ancplua-skills

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht C4 Container-Diagramm-Generator?

Erzeugt C4-Container-Diagramme nach den Konventionen des C4-Modells und exportiert sie als bearbeitbare .drawio-XML-Dateien, die direkt in draw.io (Desktop oder Web) geöffnet werden können.

Verwendungszweck

Explizite Auslöser:

  • Der Benutzer fragt nach einem C4-Diagramm, Container-Diagramm oder Architekturdiagramm
  • Der Benutzer sagt „zeichne die Architektur“, „Systemdiagramm“, „zeige mir die Komponenten“
  • Der Benutzer muss die Systemarchitektur für die Dokumentation oder eine Präsentation visualisieren
  • Der Benutzer erwähnt draw.io, drawio oder möchte ein bearbeitbares Diagramm

Proaktive Auslöser:

  • Erläuterung eines Systems mit 3+ interagierenden Komponenten
  • Diskussion über Microservices, APIs, Datenbanken und deren Beziehungen
  • Überprüfung oder Entwurf der Systemarchitektur

Nicht verwenden, wenn:

  • Der Benutzer ein einfaches Flussdiagramm möchte (stattdessen Mermaid verwenden)
  • Der Benutzer UI-Wireframes oder Mockups benötigt
  • Das System weniger als 3 Komponenten hat

Ablauf

Schritt 1: Anforderungen erfassen

Ermitteln Sie aus dem Gespräch oder fragen Sie den Benutzer:

  • Welches System diagrammieren wir?
  • Wer sind die Benutzer/Akteure (Personen)?
  • Welche Container existieren (Apps, Dienste, Datenbanken, Warteschlangen, Dateispeicher)?
  • Mit welchen externen Systemen interagiert es?
  • Was sind die wichtigsten Datenflüsse und Protokolle?

Wenn der Benutzer eine Spezifikation, Codebasis-Beschreibung oder Architekturübersicht bereitstellt, extrahieren Sie die Elemente automatisch und bestätigen Sie diese vor der Generierung.

Schritt 2: Elemente klassifizieren

Ordnen Sie jedes Element einer C4-Kategorie zu:

KategorieFarbeFormBeschreibung
Person#08427B (dunkelblau)shape=actor + TextlabelBenutzer, Akteure, Rollen
Container#438DD5 (blau)Abgerundetes RechteckAnwendungen, Dienste, APIs
Datenbank#438DD5 (blau)ZylinderJeder Datenspeicher (SQL, NoSQL, Dateien)
Warteschlange/Broker#438DD5 (blau)Abgerundetes Rechteck mit LabelNachrichtenwarteschlangen, Ereignisbusse
Externes System#999999 (grau)Abgerundetes RechteckDrittanbieterdienste, APIs
Systemgrenzekeine (transparent)Gestricheltes RechteckFasst interne Container zusammen

Referenz: references/element-templates.md für exakte draw.io-XML-Vorlagen.

Schritt 3: Layout planen

Wenden Sie strenges geschichtetes Layout (von oben nach unten) an:

Schicht 1 (y ~= 20):     Personen-Elemente (Akteure)
Schicht 2 (y ~= 250):    Systemgrenze, die interne Container enthält
Schicht 3 (y ~= 700+):   Externe Systeme

Layout-Regeln:

  • Jedes Element erhält explizite x-, y-Koordinaten (kein automatisches Layout)
  • Mindestens 200px horizontaler Abstand zwischen Elementen in derselben Schicht
  • Mindestens 200px vertikaler Abstand zwischen Schichten
  • Systemgrenze = gestricheltes Rechteck, das alle internen Container mit 40px Polsterung umschließt
  • Ordnen Sie die Elemente von links nach rechts entsprechend der primären Datenflussrichtung an
  • Gruppieren Sie verwandte Container innerhalb von Untergrenzen, wenn das System ausgeprägte Subsysteme hat
  • Halten Sie die Diagrammbreite unter 1600px, um die Lesbarkeit zu gewährleisten
  • Zentrieren Sie die Elemente horizontal innerhalb ihrer Schicht

Minimierung von Linienkreuzungen:

  • Platzieren Sie Elemente, die häufig kommunizieren, nebeneinander
  • Führen Sie Verbindungen möglichst vertikal
  • Vermeiden Sie diagonale Linien, die andere Elemente kreuzen
  • Keine Pfeile durch nicht verwandte Container: Wenn A mit C verbunden ist, darf der Pfeil NICHT durch B verlaufen. Beheben Sie dies, indem Sie (a) A und C nebeneinander platzieren, (b) explizite Aus-/Eintrittspunkte verwenden oder (c) das Layout umorganisieren
  • Pfeilbeschriftungen dürfen Container-Text nicht überlappen: verwenden Sie labelBackgroundColor=#ffffff auf allen Kanten und verwenden Sie einen senkrechten Versatz (y in mxGeometry), um die Beschriftungen von den Containern wegzudrücken

Schritt 4: Verbindungen definieren

Geben Sie für jede Verbindung an:

  • Quell- und Ziel-Element
  • Beschriftung: Aktion + Protokoll (z. B. „Liest/Schreibt [SQL/TCP]“, „Sendet Ereignisse [AMQP]“)
  • Stil: durchgezogene Linie = synchroner Aufruf, gestrichelte Linie = asynchron (Ereignisse, Warteschlangen, Webhooks)
  • Richtung: immer Quelle -> Ziel (folgt dem Datenfluss)

Verbindungsregeln:

  • Jeder Pfeil muss eine Beschriftung haben (keine unbeschrifteten Verbindungen) – falls eine Beschriftung überlappt, beheben Sie das Layout oder den Versatz, entfernen Sie niemals die Beschriftung
  • Fügen Sie immer labelBackgroundColor=#ffffff in die Verbindungsstile ein
  • Verwenden Sie das Suffix [Protokoll]: [REST/JSON], [gRPC], [SQL], [AMQP], [WebSocket]
  • Bidirektionale Flüsse: verwenden Sie zwei separate Pfeile mit unterschiedlichen Beschriftungen
  • Selbstbezüge: vermeiden (strukturieren Sie das Diagramm stattdessen um)

Schritt 5: .drawio-XML erzeugen

Verwenden Sie die XML-Struktur aus references/drawio-template.md als Grundlage.

Erstellen Sie das XML nach diesen Regeln:

  1. Beginnen Sie mit dem <mxfile>-Wrapper und <mxGraphModel> mit passenden Abmessungen
  2. Fügen Sie die Stammzellen (id="0" und id="1") hinzu
  3. Fügen Sie zuerst die Systemgrenzen-Rechtecke hinzu (sie sind Eltern für die enthaltenen Elemente)
  4. Fügen Sie alle Elemente mit expliziter Geometrie (x, y, Breite, Höhe) hinzu
  5. Fügen Sie alle Verbindungen mit Quell-/Zielreferenzen hinzu
  6. Fügen Sie die Legende in der unteren rechten Ecke hinzu

Elementgrößen:

  • Person: 40 x 60px Akteur + 220 x 60px Textlabel darunter
  • Container: 240 x 120px
  • Datenbank (Zylinder): 240 x 120px
  • Externes System: 240 x 120px
  • Systemgrenze: berechnet, um die Kinder + 40px Polsterung auf jeder Seite zu umschließen

Schritt 6: Legende hinzufügen

Jedes Diagramm muss eine Legende enthalten. Platzieren Sie diese in der unteren rechten Ecke.

Die Legende muss zeigen:

  • Person = dunkelblauer Strichmännchen (#08427B)
  • Container = blaues abgerundetes Rechteck (#438DD5)
  • Datenbank = blauer Zylinder (#438DD5)
  • Externes System = graues abgerundetes Rechteck (#999999)
  • Durchgezogener Pfeil = synchroner Fluss
  • Gestrichelter Pfeil = asynchroner Fluss

Referenz: references/legend-template.md für die exakte XML.

Schritt 7: Speichern und validieren

Speichern Sie unter dem vom Benutzer angeforderten Pfad oder standardmäßig unter ./c4_[systemname].drawio.

Validierungs-Checkliste:

  • Alle Elemente haben explizite x-, y-Koordinaten
  • Schichten sind von oben nach unten: Person -> Systemgrenze -> Extern
  • Systemgrenze umschließt alle internen Container
  • Legende ist in der unteren rechten Ecke vorhanden
  • Keine überlappenden Elemente (Koordinaten + Abmessungen prüfen)
  • Minimale Linienkreuzungen
  • Jede Verbindung hat eine Beschriftung mit Protokoll
  • Durchgezogene Linien = synchron, gestrichelte Linien = asynchron
  • Schriftfarben sind weiß (#ffffff) auf farbigen Hintergründen
  • Datei öffnet sich korrekt in draw.io (gültige XML-Struktur)

C4-Modellregeln

Beachten Sie die Einschränkungen des C4-Container-Diagramms:

  • Container-Diagramm zeigt die technologischen Entscheidungen auf hoher Ebene und wie die Container kommunizieren
  • Jeder Container ist eine separat bereitstellbare/ausführbare Einheit (keine Klasse oder kein Modul)
  • Mischen Sie keine C4-Ebenen: Dieses Skill erzeugt nur die Container-Ebene
  • Für Details auf Komponentenebene innerhalb eines Containers erstellen Sie ein separates Diagramm
  • Personen-Elemente repräsentieren Rollen, keine Individuen
  • Externe Systeme sind alles außerhalb der Systemgrenze, das das Team nicht besitzt

Anti-Patterns

  • KEIN automatisches Layout – verwenden Sie immer explizite x-, y-Koordinaten für vorhersagbare Ergebnisse
  • KEINE unbeschrifteten Pfeile – jede Verbindung benötigt eine Aktion und ein Protokoll
  • KEINE fehlende Legende – Legende ist für jedes Diagramm obligatorisch
  • KEIN beengtes Layout – Mindestabstände zwischen Elementen einhalten
  • KEINE gemischten C4-Ebenen – nur Container-Ebene (keine Klassen, keine Infrastruktur)
  • KEIN unsichtbarer Text – sicherstellen, dass die Schriftfarbe mit dem Hintergrund kontrastiert
  • KEINE festcodierten Abmessungen – Größe der Systemgrenze aus den Kindern berechnen
  • KEINE mxgraph.c4.*-Formen – sie erfordern die C4-Shape-Bibliothek, die standardmäßig NICHT in draw.io geladen ist. Verwenden Sie integrierte Formen: shape=actor für Personen, shape=cylinder3 für Datenbanken
  • KEINE Pfeile, die nicht verwandte Container kreuzen – Layout so umordnen, dass jeder Pfeil einen klaren Pfad zwischen Quelle und Ziel hat
  • KEINE Beschriftungen ohne labelBackgroundColor=#ffffff – nackte Beschriftungen werden unlesbar, wenn sie andere Elemente kreuzen
  • KEIN Entfernen von Beschriftungen zur Behebung von Überlappungen – falls eine Beschriftung einen Container überlappt, beheben Sie das Layout oder den Versatz, entfernen Sie niemals Informationen

Verwandte Skills