LoginSignup
13
11

More than 5 years have passed since last update.

PhpMetrics - コード・メトリクスをお手軽にビジュアル化

Posted at

はじめに

前回の記事(PHPUnit - テストカバレッジをHTMLレポートで出力 / phpdbg + php-code-coverage + PHPUnit)では、UnitTest 実行時の網羅率をビジュアル化する為に、 phpdbgphp-code-coverage を使用して、テストカバレッジを HTMLレポートする方法についてまとめました。

今回は、静的解析に位置づけられるもののうち、コード・メトリクスに関連した情報をイイ感じで出力するツールに関する導入手順を記載します。

想定環境

本記事は以下の環境にて動作確認を行っています。

  • OS : Windows / macOS
  • 仮想環境 : VirtualBox + Vagrant
  • コンテナ : Docker Container by docker-compose [^1]
  • PHP
    • PHP 7.2.11
    • composer 1.7.2
    • PhpMetrics 2.4.1

構築手順

概要

今回構築する環境は、 CentOS/7 の上に、 Docker をインストールし、その上で PHPUnit + phpdbg + php-code-coverage を使用してレポートを出力します。

image.png

手順

これから行う手順は、以下の記事で紹介した手順で構築した ローカル開発環境 をベースとして操作を行ってゆきます。
Windows / Mac を問わず簡単に構築が可能ですので、動作の再現を行いたい場合はそちらの記事を参照してください。

なお、上記の手順の中で PHPcomposer はインストール済みの為、Composerインストールが必要な PhpMetrics のインストールから操作を進めます。

1. PhpMetrics のインストール

composer コマンドを実行して、 PhpMetrics をインストールします。

@VirtualHost
$ docker-composer exec php composer require --dev phpmetrics/phpmetrics

2. HTMLレポートを出力

インストールした PhpMetrics を使用して、メトリクスに関連する情報を HTML 出力します。

@VirtualHost
$ docker-composer exec php php ./vendor/bin/phpmetrics --report-html=myreport .

3. レポートの確認

生成した HTMLレポート は以下の場所に出力されていますので、Webブラウザで確認しましょう。

@VirtualHost
$ ./myreport/index.php

今回は Laravel に AdminLTE をミニマム構成で組み込んだプロジェクトを解析してみました。
結果は以下のようになりました。

image.png

composer コマンド一発でインストールすることが出来、HTMLレポートの生成もすぐに行うことができるので、手間なくすぐに導入することが可能です。

終わりに

コーディングしたプロジェクト内に含まれるソースコードについては、行数やコードの重複、クラス数など、UnitTestの実行以前に解析することが出来る情報が多く存在します。
静的解析」や「机上デバッグ」と呼ばれるように、ソースコードを定量的、定性的に見ることによってバグの検出を行うことが出来るので、 PhpMetrics のようなツールは非常に有用だと思います。

これまでこういったツールは、 SonarQube くらいしか使ったことがなかったのですが、 今回の調査で PHP に特化したツールを発見することが出来ました。
このツールの利点は、 composer でお手軽にインストールすることができPHP が実行出来る環境であれば、 Webサーバやその他のツールをインストールすることなく利用出来ることだと思います。

プロジェクトで適切に使用することで、ソースコードのセルフ・クロスレビュ時や、テスト計画の立案時などにデータを活用出来るのではないでしょうか。

参考

様々な静的解析ツール

PhpMetrics

Other

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11