ソースコードを静的に(実行せずに)評価する際には様々な指標があります。大体、条件文の多さ、行数、クラスの数、依存関係、抽象度、意味のあるコメントの量あたりを元にして色々計算するのですが、それらすべてを把握するのは困難です。PhpMetricsはそういった指標を計算してレポートを出力してくれる静的解析ツールです。
PhpMetrics
Composerで提供されているのでインストールは
composer global require phpmetrics/phpmetrics
で十分です。使い方もお手軽です。例えばHTML形式のレポートが欲しいなら
phpmetrics --report-html=[htmlレポートの出力先] --exclude=[調査しないディレクトリA],[調査しないディレクトリB] [調査対象のソースコードのディレクトリ]
これだけです。フレームワークやライブラリを用いている場合、[調査しないディレクトリ]を指定しないとそれらを、神クラス――機能が集中しすぎているクラス――扱いして結構な数の警告が出ます。
実行結果のHTMLを見ると次の様な画面が出ます。
PhpMetrics report
とりあえず特に気にするべきなのが赤丸で囲ったViolationsとAverage cyclomatic complexity by classとMaintainability / complexityです。
Violationsはバグりそう、読み難そうといった原因がはっきりしているコードをその理由付きでリスト化しています。ここに現れたものを解決するだけでいくらかマシになります。
Average cyclomatic complexity by classはクラス毎の循環複雑度の平均です。この値が大きいと条件文などによる分岐が多いコードということです。分岐が多いと処理を追う際の組み合わせが膨大になり、テストも困難になってしまいます。
Maintainability / complexityはソースコード中の各クラス、ファイルを図示したものです。色は危険度、大きさはコード量を表しています。この図が小さい緑丸で染まったコードが分かりやすいコードということです。