Introdução
O desenvolvimento em PHP frequentemente começa com um único arquivo index.php, mas à medida que o projeto cresce, surge a necessidade de estruturar o código. Muitos desenvolvedores enfrentam o dilema: armazenar tudo em um único repositório (monorepositório) ou dividir em vários repositórios pequenos (multirrepositório). Neste artigo, vamos explorar o conceito de monorepositório para projetos PHP, mostrar como organizar o código para iniciantes e apresentar exemplos práticos.
Monorepositório (monorepo) é uma abordagem onde o código de vários projetos, bibliotecas ou componentes é armazenado em um único repositório de sistema de controle de versão (Git). No contexto do PHP, isso significa que seu site principal, API, pacotes e utilitários estão em uma única pasta. Isso simplifica o gerenciamento de dependências, refatoração e implantação.
Neste artigo, você aprenderá:
- O que é um monorepositório e por que ele é necessário
- Como organizar a estrutura de pastas para PHP
- Como configurar o Composer para trabalhar com monorepositório
- Exemplos reais de organização de código
Vantagens do monorepositório para PHP
Muitos desenvolvedores PHP iniciantes acreditam que monorepositório é uma "bagunça de código". Na verdade, com a organização correta, é uma ferramenta poderosa. Aqui estão os principais benefícios:
- Simplicidade de navegação: Todos os componentes do projeto estão em um único lugar. Não é necessário alternar entre repositórios.
- Versão única de dependências: Você usa um único arquivo
composer.jsonpara gerenciar pacotes, eliminando conflitos de versão. - Commits atômicos: Alterações na API, frontend e bibliotecas podem ser feitas em um único commit, facilitando reversões.
- Testes simplificados: Testes de integração são mais rápidos, pois todos os componentes estão disponíveis localmente.
- CI/CD unificado: Um único pipeline de build para todo o projeto.
No entanto, o monorepositório não é adequado para todos. Se sua equipe for grande (mais de 20 pessoas) ou os projetos forem muito diferentes em termos de tecnologias, é melhor considerar um multirrepositório. Para iniciantes e projetos de médio porte, esta é a escolha ideal.
Estrutura do monorepositório: esquema básico
Vamos criar uma estrutura típica de monorepositório PHP. Suponha que temos uma aplicação web com API e várias bibliotecas. Aqui está a hierarquia de pastas recomendada:
my-php-monorepo/├── apps/│ ├── web/ # Site principal (Laravel, Symfony ou PHP puro)│ │ ├── public/│ │ ├── src/│ │ └── config/│ └── api/ # Servidor API│ ├── public/│ ├── src/│ └── routes/├── packages/ # Bibliotecas e pacotes internos│ ├── core/ # Núcleo do sistema (classes base)│ │ ├── src/│ │ └── composer.json│ ├── database/ # Trabalho com BD (migrações, modelos)│ │ ├── src/│ │ └── composer.json│ └── utils/ # Utilitários (validação, logging)│ ├── src/│ └── composer.json├── tests/ # Testes globais├── docker/ # Configurações Docker├── composer.json # Composer raiz├── composer.lock├── .gitignore└── README.mdExplicação:
apps/— contém aplicações executáveis (sites, APIs, scripts de console). Cada aplicação tem seu próprio ponto de entrada (public/index.php).packages/— pacotes internos que você desenvolve. Eles são conectados viacomposer.jsonusando repositórios do tipopath.tests/— testes raiz (por exemplo, testes de integração que verificam a interação entre pacotes).docker/— arquivos para Docker (Dockerfile, docker-compose.yml).