Что такое PHPMetrics?
PHPMetrics — это мощная библиотека для статического анализа и мониторинга PHP-приложений. Она позволяет собирать метрики кода, такие как сложность, покрытие тестами, количество строк, зависимости и потенциальные проблемы. Библиотека интегрируется с CI/CD пайплайнами и помогает разработчикам поддерживать качество кода на высоком уровне.
Зачем нужен мониторинг PHP-приложений?
Мониторинг PHP-приложений — это не только отслеживание производительности в рантайме, но и контроль качества кода. PHPMetrics помогает выявить 'запахи' кода (code smells), избыточную сложность и нарушения стандартов PSR. Это особенно важно для больших проектов, где поддержка чистоты кода критична для масштабируемости и уменьшения технического долга.
Установка
Установка PHPMetrics выполняется через Composer:
composer require --dev phpmetrics/phpmetricsПосле установки вы можете запустить анализ из командной строки:
vendor/bin/phpmetrics --report-html=./report /path/to/your/projectЭто создаст HTML-отчёт с визуализацией метрик.
Основные функции
- Статический анализ: оценка цикломатической сложности, глубины наследования, связности классов.
- Генерация отчётов: HTML, JSON, XML — для интеграции с Jenkins, GitLab CI или Grafana.
- Мониторинг покрытия: анализ покрытия кода тестами (требуется PHPUnit).
- Визуализация зависимостей: графы классов и пакетов.
- CI/CD интеграция: возможность прерывать сборку при превышении порогов сложности.
Пример кода на PHP
Ниже приведён пример использования PHPMetrics в скрипте для программного анализа:
<?php
require_once 'vendor/autoload.php';
use PHPMetrics\Metrics\Project;
use PHPMetrics\Report\HtmlReport;
use PHPMetrics\Report\JsonReport;
// Создаём объект проекта
$project = new Project('/path/to/your/php/code');
$project->run(); // Запускаем анализ
// Получаем метрики
$metrics = $project->getMetrics();
echo 'Средняя сложность: ' . $metrics->getAverageComplexity() . PHP_EOL;
echo 'Количество классов: ' . $metrics->getNumberOfClasses() . PHP_EOL;
// Генерируем отчёт в JSON
$jsonReport = new JsonReport($project);
file_put_contents('metrics.json', $jsonReport->generate());
// Или HTML
$htmlReport = new HtmlReport($project);
$htmlReport->generateToFile('report.html');Этот скрипт можно запускать в cron или как часть деплоя.
Когда использовать
PHPMetrics идеально подходит для:
- Регулярного аудита кода в рамках CI/CD (например, перед каждым мерджем в main).
- Оценки технического долга при рефакторинге.
- Мониторинга качества кода в долгосрочных проектах.
- Обучения команды — наглядные отчёты помогают понять, какие участки кода требуют улучшения.
Не используйте PHPMetrics для мониторинга производительности в реальном времени (для этого есть Xdebug или Blackfire). Это инструмент статического анализа, а не рантайм-профилировщик.
Внедрение PHPMetrics в процесс разработки снижает количество багов и упрощает поддержку кода, особенно в распределённых командах.