Composer — менеджер зависимостей для PHP
TL;DR
Composer — это стандартный менеджер зависимостей для PHP. Он упрощает установку, обновление и автозагрузку библиотек; хранит точные версии в composer.lock; и предоставляет удобные команды для работы в средах разработки и CI/CD. Если вы работаете с PHP-проектами, стоит установить Composer и научиться управлять composer.json и composer.lock.
Важно: в репозиторий нужно коммитить и composer.json, и composer.lock. Это гарантирует воспроизводимость зависимостей для всех участников команды.
Быстрые ссылки
- Установка Composer
- Подготовка проекта
- Установка пакетов
- Обновление пакетов
- Автозагрузчик Composer
- Практические советы, чек-листы и безопасность
- Итог

Установка Composer
Composer — это сообщественный проект; он не входит в состав PHP по умолчанию. Распространяется в виде PHAR-архива с getcomposer.org. Некоторые дистрибутивы Linux включают Composer в свои репозитории, но такие пакеты часто устаревшие.
Требования перед установкой:
- Установлен PHP (в исходном материале указана минимальная поддерживаемая версия PHP 5.3 — проверяйте требования текущих библиотек).
- Для установки пакетов из исходников обычно нужны git и unzip на системе.
Скрипт автоматической установки — самый распространённый способ. Скачайте установщик в рабочую директорию:
curl https://getcomposer.org/installer -o composer-setup.phpЗатем рекомендуется проверить контрольную сумму установщика — зайдите на сайт Composer для получения актуального хэша и примера кода верификации.
После проверки запустите установку:
php composer-setup.php --install-dir=/usr/local/bin --filename=composerЭта команда скачает бинарник Composer в /usr/local/bin и положит его в PATH, чтобы можно было вызывать composer из оболочки. Проверьте установку командой:
composerВы увидите версию Composer и список доступных команд.

Обновление Composer в будущем выполняется командой:
composer self-updateПосле успешной установки файл composer-setup.php можно удалить.
Подготовка проекта
Перед использованием Composer в проекте нужно создать файл composer.json в корне рабочего каталога. Самый быстрый способ — интерактивный мастер:
composer initВас попросят ввести имя проекта, описание, автора и другие метаданные. Имена пакетов используют синтаксис vendor/package, чтобы избежать конфликтов в публичных репозиториях. Рекомендуется использовать имя пользователя Packagist в качестве vendor.

Большинство ключей в composer.json опциональны, если вы не планируете публиковать пакет на Packagist. Полную структуру файла можно посмотреть в официальной документации Composer.
Советы по структуре проекта:
- Держите код в src/, тесты в tests/.
- Настройте autoload в composer.json (см. раздел об автозагрузке).
- Включайте CI-конфигурацию для автоматического запуска composer install.
Установка пакетов
Чтобы добавить зависимость, используйте:
composer require vendor/packageПоиск пакетов — через сайт Packagist (packagist.org). При установке пакет попадёт в папку vendor вашего проекта, а зависимость будет добавлена в секцию require в composer.json.

Composer использует семантическое версионирование (SemVer) для управления версиями. Точные установленные версии фиксируются в файле composer.lock, чтобы гарантировать воспроизводимость установки на других машинах.
Рекомендации при работе с зависимостями:
- Всегда коммитьте composer.json и composer.lock в систему контроля версий.
- Для пакетов, используемых только в разработке (тесты, инструменты статического анализа), добавляйте флаг –dev, чтобы они попадали в require-dev.
- На продакшн-серверах в командах деплоя используйте composer install –no-dev, чтобы исключить dev-зависимости.
Обновление пакетов
Чтобы увидеть устаревшие пакеты, выполните:
composer outdatedЧтобы обновить пакеты, используйте:
composer updateComposer будет стремиться выполнить обновление в рамках ограничений версии, заданных в composer.json. Например, ограничение “^1.2” позволит обновиться до любой версии 1.x, начиная с 1.2, но не до 2.0.
После обновления composer.lock автоматически перезаписывается. Другие участники команды, получив изменения в репозитории, должны снова выполнить composer install, чтобы получить точно те же версии.
Проверки при обновлении:
- Запустите тесты и статический анализ после composer update.
- Производите обновления в ветке feature/release и проверяйте интеграцию в CI.
Автозагрузчик Composer
Автозагрузка — предпочтительный способ поиска и подключения классов в PHP-проектах. Composer умеет генерировать автозагрузчик автоматически.
При установке зависимостей Composer создаёт файл vendor/autoload.php. Пакеты указывают свои правила автозагрузки в поле autoload composer.json. Для собственного проекта стоит настроить autoload с использованием стандарта PSR-4.
Пример настройки autoload в composer.json:
{
"autoload": {
"psr-4": {
"ExampleProject\\": "src/"
}
}
}В примере неймспейс ExampleProject\ будет сопоставлен с директорием src/. Класс ExampleProject\ExampleClasses\MyClass будет загружаться из src/ExampleClasses/MyClass.php согласно правилам PSR-4.
Единственный файл, который нужно подключать вручную в приложении — автозагрузчик:
require_once(__DIR__ . "/vendor/autoload.php");Добавьте эту строку как можно раньше в точке входа приложения, чтобы все классы могли автоматически загружаться.
Если вы изменили конфигурацию autoload в composer.json (например, добавили новый неймспейс), принудительно сгенерируйте автозагрузчик командой:
composer dump-autoloadОпции:
- –optimize или -o: оптимизирует карты автозагрузки для production.
Когда Composer может не подойти (контрпример)
- Очень маленькие проекты, где добавление отдельного внешнего менеджера зависимостей усложняет поддержку.
- Экосистемы с нестандартными требованиями к загрузке кода (встраиваемые устройства), где PHAR или автозагрузка не подходят.
- Проекты, требующие единой монолитной сборки всех зависимостей в один исполняемый бинарник — Composer подходит, но могут потребоваться дополнительные шаги.
Если вы попадаете в одну из таких ситуаций, стоит оценить альтернативы или кастомные скрипты сборки.
Альтернативные подходы
- Использовать ручное управление зависимостями (напр., копирование src в проект) — приемлемо только для одноразовых встроенных решений.
- Развертывание собственных пакетов в виде PHAR-файлов.
- Контейнеризация (Docker): зафиксировать окружение и зависимости в образе, сочетая Composer с многослойной сборкой.
Практическая мини-методика добавления/обновления зависимостей
- Локально: composer require vendor/package или composer require –dev vendor/package.
- Запустить локальные тесты: phpunit, phpcs, static analysis.
- Обновить composer.lock и проверить изменения в кодовой базе на предмет несовместимостей.
- Создать MR/PR с описанием изменений зависимостей и результатами тестов.
- В CI: выполнить composer install –no-dev и повторить тесты на целевой среде.
- Развернуть, проверив поведение в staging.
Чек-лист по ролям
Разработчик:
- Убедиться, что composer.json обновлён и валиден.
- Запустить локальные тесты после установки/обновления.
- Коммитить и описывать изменения composer.lock.
DevOps / инженер по релизам:
- В CI использовать composer install –no-dev.
- Кешировать папку vendor между сборками (если допустимо).
- Проверять версию PHP и расширений перед запуском Composer.
Ревьюер/технический директор:
- Проверить влияние обновлений на интерфейсы и API.
- Оценить риск замены мажорной версии библиотеки.
SOP: стандартная процедура релиза с Composer
- На feature/ ветке выполнить composer update для необходимых пакетов.
- Запустить полный набор тестов.
- Создать PR с изменениями composer.lock.
- После прохождения CI — мердж в main/release.
- На CI при сборке релиза выполнить composer install –no-dev и composer dump-autoload -o.
- Развернуть артефакты, мониторить ошибки и метрики после релиза.
Критерии приёмки (тесты/acceptance)
- После установки зависимостей все unit/integration/acceptance-тесты проходят локально и в CI.
- На стейджинге приложение стартует без ошибок autoload.
- Нет конфликтующих версий библиотек, указанных в composer.lock.
- Производительность и потребление памяти в пределах ожидаемых границ.
Шпаргалка команд (cheat sheet)
- composer init — создать composer.json интерактивно.
- composer require vendor/package — добавить зависимость.
- composer require –dev vendor/package — добавить dev-зависимость.
- composer install — установить зависимости по composer.lock.
- composer update — обновить зависимости и composer.lock.
- composer outdated — показать устаревшие пакеты.
- composer dump-autoload -o — сгенерировать оптимизированный автозагрузчик.
- composer self-update — обновить сам Composer.
Матрица сравнения (быстрая)
| Задача | Composer | Ручная поддержка | Docker/Образы |
|---|
| Управление версиями | Да (composer.lock) | Нет | Частично (в образе) | Автозагрузка классов | Да (PSR-4) | Нет/кастом | Нет | Режим продакшн без dev | Да (install –no-dev) | Нет | Да (в образе)
Безопасность и конфиденциальность
- Проверяйте происхождение пакетов и количество загрузок/активность поддерживающих репозиториев.
- Избегайте установки пакетов с неизвестных или непроверенных источников.
- Для приватных репозиториев используйте защищённые токены/SSH-ключи и настройки auth.json/CI-секретов.
- Соблюдайте требования GDPR, если пакеты обрабатывают персональные данные — ответственность за соблюдение прав и шифрование лежит на владельце приложения.
Уровни зрелости интеграции Composer в проекте
- Нулевая: нет Composer, зависимости в кодовой базе.
- Начальная: composer.json настроен, но composer.lock не коммитят.
- Средняя: composer.json + composer.lock в VCS, CI выполняет composer install.
- Зрелая: автоматизированные обновления, тестирование зависимостей, политики безопасности и мониторинг уязвимостей.
Факт-бокс — ключевые понятия
- composer.json — декларативный файл с зависимостями и автозагрузкой.
- composer.lock — фиксирует точные версии для воспроизводимости.
- vendor/ — папка с исходниками установленных пакетов.
- autoload.php — сгенерированный автозагрузчик Composer.
Примеры использования и сниппеты
Добавление зависимости и коммит изменений:
composer require monolog/monolog
git add composer.json composer.lock
git commit -m "Добавить логирование: monolog/monolog"Оптимизированная генерация автозагрузчика для production:
composer dump-autoload -oПринудительная переустановка всех пакетов (удалите vendor перед выполнением):
rm -rf vendor
composer installГлоссарий (одной строкой)
- SemVer: семантическое версионирование (major.minor.patch).
- PSR-4: стандарт автозагрузки классов через неймспейсы.
- PHAR: архив PHP-приложений/библиотек в одном файле.
- Packagist: публичный реестр PHP-пакетов.
Частые ошибки и советы по отладке
- Ошибка “Class not found” — проверьте настройку autoload и запустите composer dump-autoload.
- Несоответствие версий — проверьте composer.lock; используйте composer why vendor/package, чтобы понять, кто требует пакет.
- Проблемы в CI — убедитесь, что CI использует тот же PHP-версию и расширения, что у вас локально.
Итог
Composer — опора современного PHP-разработчика: он управляет зависимостями, облегчает автозагрузку и делает установки воспроизводимыми. Правильный рабочий процесс с Composer включает ведение composer.json и composer.lock в системе контроля версий, тестирование после изменений зависимостей и настройку CI для установки зависимостей в режиме production.
Короткий план внедрения в проект:
- Установить Composer и проверить версию.
- Создать composer.json через composer init.
- Добавить зависимости composer require и закоммитить composer.json + composer.lock.
- Настроить CI: composer install –no-dev и автотесты.
Спасибо за внимание. Начните с composer init в вашем проекте и выполните простую установку пакета, чтобы почувствовать поток работы.