Когда я работал в Ozon, меня там научили, что в каждом уважающем себя проекте должно быть очень много микросервисов, каждый из которых живёт в своём отдельном git-репозитории. Касательно фронтенда — каждый сайтик и дашборд обязательно лежат отдельно.
Тогда мне казалось, что это единственный верный путь организации кода. Я сидел за ноутом на работе и с гордостью переключался между четырьмя (а то и больше) открытыми окнами IDE, в каждом из которых жил свой микросервис. И все они вместе были нужны только для того, чтобы протестировать одну маленькую фичу, которую я делал в тот момент.
Я не смел спорить с этими догматами и пронёс этот подход сквозь годы. И вот, когда я решил делать свои инди-проекты, то решил, что всё буду строить так, как меня учили.
Завёл отдельные репозитории под сайт, под расширение, под бэкенд и, конечно же, под инфраструктуру — чтобы был, так сказать, IaaC. Но довольно быстро я радостно обнаружил, что секреты теперь нужно прописывать везде отдельно; что, чтобы просто начать рабочий день, надо открыть всё те же четыре окна IDE и пощёлкать кнопки run в правильном порядке. А во время работы постоянно метаться между этими окнами и тратить ментальные ресурсы на вопросы: «А где то, что мне сейчас нужно? Кстати, а что именно мне нужно?».
Я понял, что это сильно бьёт по эффективности разработки. Около 20% времени я тратил просто на поиск нужных файлов в разных проектах и на настройку их взаимодействия.
Решение нашлось довольно очевидное — монорепа.
Я засунул все репы (приложения), связанные одним проектом (например, для chatgptsheet это сайт, бэкенд и расширение, как я уже говорил выше), в одну.
Теперь запускаю только одно окно GoLand — его хватает для работы и с Go, и с Python, и с JS/TS. Когда делаю поиск в IDE — он сразу ищет по всем файлам проекта. С помощью npm workspaces переиспользую ts/js-код между сайтом и расширением. Секреты теперь прописываю в одной репе — для этого я нашёл очень удобный инструмент
Doppler. А для запуска кода и скриптов использую
Turborepo. В принципе, он умеет ещё дофига всего, но пока я использую его в роли запускатора тасок.
P.S. Теперь я продуктивнее и чуть счастливее! Если интересно, могу рассказать подробнее про Doppler или Turborepo.