Тема
Инструменты и качество
Автоматические проверки ловят ошибки раньше ревью и прода. Настроить один раз — экономить постоянно.
Пирамида инструментов
Rector — авто-апгрейды и модернизация кода (реже, пакетно)
Larastan — статический анализ типов (на каждый коммит/CI)
Pint — форматирование стиля (на каждое сохранение/коммит)
Pest — тесты поведения (на каждую фичу)
Telescope/Pulse — наблюдаемость в dev и prod (постоянно)Pint — форматирование
Стандарт студии. Не спорить о стиле — доверить инструменту.
bash
./vendor/bin/pint # отформатировать всё
./vendor/bin/pint --dirty # только изменённые файлы (быстро, перед коммитом)
./vendor/bin/pint --test # проверить без правок (для CI)Через Docker (по спецификации Docker): docker exec {app} ./vendor/bin/pint.
Larastan — статический анализ
PHPStan для Laravel: ловит несуществующие методы, неверные типы, N+1-подсказки — до запуска.
bash
composer require --dev larastan/larastan
# phpstan.neon: level 6+ на новых проектах
./vendor/bin/phpstan analyseУровень поднимать постепенно на легаси; на новом проекте сразу 6–8. Окупается тем, что типовые ошибки не доезжают до ревью.
Pest — тесты
Читабельнее PHPUnit, тот же движок. Приоритеты по спецификации тестов: feature-тесты на каждый публичный URL и редирект — обязательно; unit — для логики с ветвлением.
bash
php artisan test # всё
php artisan test --filter=PageTest # по классу
php artisan test --parallel # параллельно (быстрее на больших наборах)
php artisan test --coverage # покрытие⚠️ Защита рабочей БД: phpunit.xml обязан содержать DB_DATABASE={project}_test. RefreshDatabase на рабочей БД = потеря данных. Проверять перед первым запуском.
Telescope — отладка в dev (опционально)
Запросы, джобы, почта, исключения, N+1 — всё видно в /telescope. Смотреть сюда вместо dd() (который запрещён в коммитах). В проектах студии по умолчанию не установлен — стандарт local-отладки — Debugbar (ниже); Telescope ставить точечно, когда нужна история запросов/джобов/почты, а не только профиль текущего запроса (кандидаты — проекты с очередями/событиями: masha, freelance).
Установка (проект должен быть поднят):
bash
docker exec {app} composer require laravel/telescope --dev
docker exec {app} php artisan telescope:install
docker exec {app} php artisan migrateОбязательно сразу:
telescope:prune --hours=48в scheduler — без этогоtelescope_entriesсъест БД;- регистрировать
TelescopeServiceProviderтолько в local (app()->environment('local')) и добавитьlaravel/telescopeвextra.laravel.dont-discover; для не-local доступа —Gate::define('viewTelescope', ...). Открытый/telescopeв проде — утечка данных.
Pulse — метрики в prod
Лёгкий мониторинг без Grafana: медленные запросы, нагруженные джобы, использование по пользователям. Ставить на проекты с реальной нагрузкой.
Query-detector — ловля N+1 в dev
bash
composer require --dev beyondcode/laravel-query-detectorПоказывает N+1 прямо при разработке — дополняет правило студии «N+1 — это баг».
Rector — авто-апгрейды
Автоматически модернизирует код: переход между мажорами Laravel/PHP, замена устаревших конструкций. Сильно ускоряет апгрейды.
bash
composer require --dev rector/rector driftingly/rector-laravel
./vendor/bin/rector process --dry-run # посмотреть что изменит
./vendor/bin/rector process # применитьIDE Helper — автодополнение
bash
composer require --dev barryvdh/laravel-ide-helper
php artisan ide-helper:models -M # PHPDoc для моделей → IDE видит поля/связи
php artisan ide-helper:generate # фасадыDebugbar — профилирование (local)
bash
composer require --dev barryvdh/laravel-debugbarПанель с запросами, таймингами, памятью. Только local — в prod выключать. Стандарт студии для профилирования запроса в dev (см. «Пакетный стек студии» в standard.md): ставить при первом подъёме проекта для работы. Сам гейтится по APP_DEBUG; страховка в prod .env — DEBUGBAR_ENABLED=false. Уже стоит: masha, cms.rosveb.ru.
Рекомендуемый набор dev-зависимостей нового проекта
bash
composer require --dev \
larastan/larastan \
laravel/pint \
pestphp/pest \
barryvdh/laravel-ide-helper \
barryvdh/laravel-debugbar \
beyondcode/laravel-query-detector
# Rector — не постоянная dev-зависимость: ставить пакетно при апгрейдах мажора (см. выше)
# Telescope — опционально; Pulse — на проекты с реальной нагрузкойАвтоматизация: git-хук перед коммитом
Минимальный pre-commit, отражающий чеклист студии:
bash
#!/bin/sh
./vendor/bin/pint --dirty --test || { echo "Pint: есть неотформатированное"; exit 1; }
./vendor/bin/phpstan analyse --no-progress || exit 1
php artisan test --parallel || exit 1Ставит барьер: неотформатированный, не проходящий анализ или тесты код не коммитится. В связке с Claude Code эти же проверки — часть определения «готово» перед тем, как отчитаться.