Gedanken zur Softwareentwicklung und Repository-Strategie: Monorepo vs. Multi-Repo
product Software Technology

Gedanken zur Softwareentwicklung und Repository-Strategie: Monorepo vs. Multi-Repo

Bei der parallelen Entwicklung des Blogs und mehrerer Produkte (KuroCMS, KuroEditor, KuroNote) wurde das Repository-Management zunehmend komplex. Ein Erfahrungsbericht zu Monorepo vs. Multi-Repo.


Angefangen bei KuroCMS, das eigens für diesen Blog entwickelt wurde, über KuroEditor (einen WYSIWYG-Editor) und WorkerOps (einen Sicherheitswächter für Cloudflare Workers) bis hin zu aktuellen App-Projekten wie KuroNote hat Kurousagi zahlreiche eigenständige Produkte geschaffen. Obwohl es sich um eigenständige Systeme handelt, greifen sie häufig auf gemeinsame Code-Module zurück. Bislang wurde für jedes Produkt ein separates Repository angelegt – was jedoch im Entwicklungsalltag zu zahlreichen Problemen und Reibungen führte. Hier ist ein kurzer Überblick über die aufgetretenen Schwierigkeiten.

Typische Probleme beim Multi-Repo-Ansatz#

  • Uneinheitliche Release-Zyklen: Der Ablauf von der Code-Änderung bis zur Bereitstellung unterschied sich je nach Produkt und Bibliothek, was zu Verwirrung und hohem Verwaltungsaufwand führte.
  • Code-Duplikate und Versionsdrift: Systeme wie KuroCMS und KuroNote nutzen KuroEditor. Durch die Trennung in separate Repositories lag jeweils eine Kopie von KuroEditor in den Projekten, wodurch Updates auseinanderdrifteten. Beim Einsatz von KI-Programmierassistenten bearbeitete die KI oft die Projektkopie statt der Quellbibliothek, was zu Code-Konflikten führte.
  • Verstreute Geheimnisverwaltung: Konfigurationsdateien wie .env (Worker-Secrets, Deployment-Passwörter) lagen verstreut in jedem Projektordner. Die Verwaltung wurde unübersichtlich, und gleichnamige Variablen führten bei Fehlern zu langwieriger Fehlersuche.

Mit zunehmender Projektanzahl traten die Nachteile des Multi-Repo-Ansatzes deutlich zutage. Dennoch bietet dieser Ansatz auch handfeste Vorzüge.

Vorteile des Multi-Repo-Ansatzes#

  • Hohe Unabhängigkeit: Jedes Projekt kann Zugriffsrechte, CI/CD-Pipelines und Toolchains autonom optimieren. Bei Web-Apps ermöglicht die Anbindung an GitHub Actions automatische Deployments bei jedem Git-Push. Die kostenlosen GitHub-Actions-Kontingente sind jedoch begrenzt und bei hoher Frequenz schnell erschöpft. Für Einzelentwickler ist ein direktes Deployment auf Cloudflare via Wrangler oft übersichtlicher und schlanker.
  • Leichtgewichtig und schnell: Da jedes Repository nur ein Produkt umfasst, bleiben die Repository-Größen klein. Klonen, Branching und Checkouts erfolgen blitzschnell.
  • Begrenzter Fehlerradius: Fehler oder tiefgreifende Refactorings in einem Repository haben keine direkten Auswirkungen auf andere, unabhängige Systeme.

Hinweise zum Deployment mit Cloudflare Wrangler

Die größte Herausforderung beim CLI-Tool Wrangler ist der Wechsel zwischen angemeldeten Benutzerkonten. Allein der Wechsel zwischen privatem und geschäftlichem Konto erfordert häufig eine erneute OAuth-Authentifizierung. Entwicklern wird daher empfohlen, die integrierten Umgebungswechsel- und Umgebungsvariablen-Funktionen von Wrangler zu nutzen, um vorkonfigurierte Profile flexibel zu steuern.

Die Alternative: Was ist ein Monorepo?#

Wie der Name schon sagt, werden bei einem Monorepo alle Produkte, gemeinsamen Bibliotheken und Tools in einem einzigen, zentralen Repository zusammengeführt. Dieser pragmatische Ansatz löst viele typische Nachteile von Multi-Repos auf elegante Weise.

<Vorteile>

  • Einfache Code-Wiederverwendung: Keine Notwendigkeit für Code-Kopien. Da alle Projekte im selben Repository liegen, können gemeinsame Bibliotheken direkt über relative Pfade importiert werden. Die Code-Aktualität ist strukturell gewährleistet, und KI-Assistenten bearbeiten nicht versehentlich veraltete Kopien.
  • Reibungslose übergreifende Änderungen: Änderungen an Schnittstellen und abhängigen Modulen können in einem einzigen, atomaren Commit zusammengefasst werden. Bei der Zusammenarbeit mit KI ist dies ein enormer Vorteil, da getrennte Repositories zu getrennten KI-Kontexten führen, was trotz AGENTS.md häufig zu Informationsverlust und Fehlern führt.
  • Ganzheitliche Architektur-Übersicht: Durch die zentrale Ablage aller Quellen lässt sich der Gesamtzusammenhang schnell erfassen und die Konsistenz über alle Produkte hinweg wahren.

<Nachteile>

  • Wachsende Repository-Größe: Mit steigender Code-Menge können Klonen und Builds länger dauern. Dank moderner Git-Features wie Partial Clones und Sparse Checkouts lässt sich ein Monorepo heute jedoch praktisch genauso schnell bedienen wie kleine Einzel-Repos.
  • Komplexere Zugriffs- und CI-Steuerung: Übergreifende Rechteverwaltung und CI-Pipelines erfordern eine sorgfältige Strukturierung. Für Einzelentwickler und fokussierte mobile App-Projekte mit Direkt-Deployment über Wrangler fallen diese Punkte jedoch kaum ins Gewicht.

Was bedeutet CI/CD eigentlich?

CI/CD steht für Continuous Integration (Kontinuierliche Integration) und Continuous Delivery / Continuous Deployment (Kontinuierliche Auslieferung / Bereitstellung). Es beschreibt die Methode, Software kontinuierlich in Test- oder Produktionsumgebungen einzuspielen, um durch direktes Feedback die Entwicklungsgeschwindigkeit zu steigern. Typischerweise löst ein Git-Push über GitHub Actions automatische Builds und Deployments aus.

Dies knüpft an agile Methoden wie Agile Entwicklung und Extreme Programming (XP) an, wobei der Fokus bei CI/CD auf der Automatisierung der Bereitstellung liegt.

Ein seit langem bewährter Standard bei Tech-Konzernen#

Tatsächlich setzen die weltweit führenden Technologieunternehmen seit vielen Jahren auf Monorepos. Konzerne wie Google, Meta und Microsoft verwalten Milliarden von Codezeilen für zehntausende Entwickler in gigantischen Monorepos. Auch schnell wachsende Unternehmen wie Uber, Stripe, Airbnb und Spotify nutzen Monorepos, um redundante Code-Entwicklung zu vermeiden.

Während Großkonzerne dafür spezialisierte Infrastruktur und eigene Git-Erweiterungen entwickeln, ermöglichen die modernen, großzügigen GitHub-Features und leichtgewichtigen Tools auch Einzelentwicklern und kleineren Teams, die Vorteile eines Monorepos optimal zu nutzen.

Um entwickelte Code-Werte langfristig verlustfrei in Nachfolgeprojekten zu nutzen, bietet ein klares Monorepo – gerade im Zeitalter von KI-Assistenten – die ideale Basis für maximale Entwicklungsgeschwindigkeit.



この記事はいかがでしたか?