Иногда идея для отдельного open source пакета появляется не из желания придумать что-нибудь новое, а ровно наоборот: начинаешь разбирать старый проект и находишь там решение, которое когда-то было нормальным, а теперь уже мешает двигаться дальше.
Так получилось с моим старым symfony-shop
Во время модернизации проекта я добрался до авторизации через Яндекс. Она была реализована через пакет rakeev/oauth2-yandex. Сам по себе подход был вполне обычным: вместо того чтобы самостоятельно реализовывать весь OAuth 2.0 flow, приложение использовало готовый провайдер.
Проблема была в возрасте зависимости
Последние изменения в rakeev/oauth2-yandex относятся ещё к 2017 году. За это время PHP, библиотеки вокруг него и инструменты разработки заметно изменились. При тестировании обновлённого приложения старая зависимость уже начала напоминать о себе предупреждениями и долго, когда deprecated перейдет в error
И здесь было несколько вариантов
Самый быстрый: убрать пакет и написать необходимый код прямо внутри symfony-shop. Для одного проекта это вполне рабочее решение. Несколько классов, немного настройки, авторизация снова работает — задача закрыта.
Но у такого подхода есть очевидный минус: решение остаётся внутри конкретного приложения.
Если завтра авторизация через Яндекс понадобится в другом проекте, всё начинается заново.
Можно было пойти в другую сторону и попытаться оживить старый пакет. Но мне хотелось получить небольшое современное решение с понятной зоной ответственности и без необходимости тащить за собой архитектурные решения проекта восьмилетней давности.
Поэтому появился третий вариант — сделать отдельный пакет.