Skip to content

Инструменты и качество

Автоматические проверки ловят ошибки раньше ревью и прода. Настроить один раз — экономить постоянно.

Пирамида инструментов

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() (который запрещён в коммитах).

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-зависимостей нового проекта

bash
composer require --dev \
  larastan/larastan \
  laravel/pint \
  pestphp/pest \
  barryvdh/laravel-ide-helper \
  beyondcode/laravel-query-detector \
  rector/rector driftingly/rector-laravel
# в стеке студии также: laravel/telescope, laravel/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 эти же проверки — часть определения «готово» перед тем, как отчитаться.

Внутренняя база знаний студии