Reflexiones sobre desarrollo y gestión de repositorios: Monorepo vs. Multi-repo
product Software Technology

Reflexiones sobre desarrollo y gestión de repositorios: Monorepo vs. Multi-repo

Al desarrollar este blog y múltiples productos (KuroCMS, KuroEditor, KuroNote), la gestión de repositorios se volvió compleja. Un análisis detallado entre arquitecturas monorepo y multi-repo.


A partir de KuroCMS, desarrollado para poner en marcha este blog, seguido de KuroEditor (un editor WYSIWYG) y WorkerOps (un guardián de seguridad para Cloudflare Workers), y con el desarrollo actual de aplicaciones móviles como KuroNote, Kurousagi ha creado diversos productos independientes. Aunque cada uno funciona por separado, con frecuencia comparten módulos de código comunes. Anteriormente se creaba un repositorio individual para cada producto, pero esto ocasionó constantes inconvenientes. A continuación, un resumen de los problemas encontrados.

Problemas experimentados con el enfoque Multi-repo#

  • Flujos de despliegue fragmentados: El proceso desde la actualización del código hasta la publicación variaba según el producto y la biblioteca compartida, generando confusión y complejidad innecesaria.
  • Duplicación y desfase de versiones: Tanto KuroCMS como KuroNote integran KuroEditor. Al estar en repositorios separados, se mantenían copias locales de KuroEditor en cada proyecto, lo que causaba desfases respecto a las últimas actualizaciones. Al trabajar con asistentes de IA, esta solía modificar la copia local en lugar del repositorio principal, provocando conflictos de código.
  • Gestión dispersa de credenciales: Los archivos de configuración sensible como .env (secretos de Worker, contraseñas de despliegue, etc.) estaban repartidos en carpetas individuales. Su administración se volvió compleja, y la repetición de nombres de variables dificultaba la resolución de errores.

A medida que los desarrollos crecieron, las desventajas del esquema multi-repo se hicieron evidentes. No obstante, este esquema también cuenta con ventajas relevantes.

Ventajas del Multi-repo#

  • Alta independencia: Cada proyecto puede configurar con total libertad sus permisos, flujos de CI/CD y herramientas. En aplicaciones web, la integración con GitHub Actions permite desplegar automáticamente a producción con un simple push. Sin embargo, la cuota gratuita de GitHub Actions se agota rápidamente con despliegues continuos. Para desarrolladores independientes, el despliegue directo a Cloudflare mediante herramientas de terminal como Wrangler resulta más sencillo y directo.
  • Ligero y veloz: Al contener únicamente un producto por repositorio, el tamaño se mantiene reducido, agilizando clonaciones y operaciones entre ramas.
  • Radio de impacto acotado: Los fallos o refactorizaciones en un repositorio no afectan de forma directa a otros sistemas independientes.

Consideraciones al desplegar en Cloudflare mediante Wrangler

El principal inconveniente radica en la alternancia de cuentas de usuario autenticadas en Wrangler mediante wrangler login. Cambiar entre cuentas personales y corporativas a menudo requiere reiniciar el flujo OAuth. Para desarrolladores que necesitan alternar entornos, se recomienda aprovechar la gestión de perfiles y variables de entorno de Wrangler para agilizar la ejecución.

La alternativa: ¿Qué es un Monorepo?#

Como su nombre indica, un monorepo reúne todos los productos, librerías compartidas y herramientas dentro de un único repositorio consolidado. Este enfoque resuelve de manera directa muchas de las dificultades del multi-repo.

<Ventajas>

  • Reutilización de código simplificada: Sin necesidad de crear copias. Al coexistir todos los proyectos en el mismo repositorio, las librerías se importan directamente mediante rutas relativas. La actualización continua está estructuralmente garantizada y se evita que la IA altere copias obsoletas.
  • Modificaciones transversales fluidas: Los cambios simultáneos entre APIs y aplicaciones cliente pueden aplicarse en un único commit atómico. Esto representa una gran ventaja al colaborar con IA, ya que la separación de repositorios fragmenta los contextos de trabajo y provoca pérdidas de continuidad, aun cuando se definan pautas en AGENTS.md.
  • Visión integral del sistema: Tener todo el código fuente en un solo lugar facilita la consulta de módulos adyacentes y promueve la coherencia en el diseño de software.

<Desventajas>

  • Crecimiento del tamaño del repositorio: A mayor volumen de código, la clonación y las pruebas pueden requerir más tiempo. No obstante, con características modernas de Git como clones parciales y sparse checkout, el rendimiento es comparable al de repositorios independientes.
  • Mayor complejidad en permisos y CI: Configurar permisos granulares y pipelines de integración sobre todo el repositorio exige planificación. Sin embargo, para proyectos personales o móviles con despliegues directos vía Wrangler, estas complejidades son prácticamente irrelevantes.

¿Qué significa realmente CI/CD?

CI/CD corresponde a Continuous Integration (Integración Continua) y Continuous Delivery / Continuous Deployment (Entrega Continua / Despliegue Continuo). Es una metodología que promueve publicar código con frecuencia en entornos de prueba o producción para obtener retroalimentación inmediata y acelerar el ciclo de desarrollo, habitualmente mediante flujos automatizados con GitHub Actions al ejecutar git push.

Comparte objetivos con enfoques como el Desarrollo Ágil y la Programación Extrema (XP), focalizándose particularmente en la automatización del despliegue.

Una práctica consolidada en los gigantes tecnológicos#

En la práctica, las mayores empresas de tecnología del mundo utilizan monorepos desde hace muchos años. Compañías como Google, Meta y Microsoft gestionan miles de millones de líneas de código y decenas de miles de ingenieros en monorepos colosales. Empresas en rápida expansión como Uber, Stripe, Airbnb y Spotify también han recurrido a este modelo para evitar duplicidades innecesarias.

Aunque las grandes corporaciones desarrollan herramientas internas especializadas, la amplitud de las funciones gratuitas de GitHub y el ecosistema actual permiten a desarrolladores independientes y pequeños equipos aprovechar al máximo las ventajas de un monorepo.

Aprovechar el código existente para futuros desarrollos mediante una estructura limpia y unificada es fundamental, especialmente en la era de la IA, para maximizar la velocidad de desarrollo.



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