PHPの静的コード解析ツール『PHPMD』を使ってみた。

  • 181
    Like
  • 0
    Comment
More than 1 year has passed since last update.

コードレビューしてもらう前に、静的コード解析をして事前に問題点の修正を行いたいと思ったので使ってみました。

PHPMDとは

Hudson+phpmdでPHPコードの問題を自動検出する方法 | Ryuzee.comに記載されているのは以下のような内容です。

phpmdはPHP Mess Ditectorの略で、PHPコードの潜在的なバグになりそうな箇所や実装上の問題を検出してくれるツールである。例えば未使用の変数の指摘、多数のpublicメソッドのある巨大クラスの検出、一文字変数等もこのツールで検出可能だ。

インストール手順

composerを利用します。

composer.json
{
    "require-dev": {
        "phpmd/phpmd" : "*"
    }
}

インストールして、パスを通します。

php composer.phar install
sudo ln -s /vagrant/vendor/phpmd/phpmd/src/bin/phpmd /usr/bin/phpmd
sudo chmod ugo+x /usr/bin/phpmd

使い方

# phpmd [ファイル名|ディレクトリ] [レポートフォーマット(text or xml)] [ルール]

引数に設定するルールについては以下となります。
* codesize:循環的複雑度などコードサイズ関連部分を検出するルール
* controversial:キャメルケースなど議論の余地のある部分を検出するルール
* design:ソフトの設計関連の問題を検出するルール
* naming:長すぎたり、短すぎたりする名前を検出するルール
* unusedcode:使われていないコードを検出するルール

複数確認したい場合、カンマ区切りで利用するようです。

$ phpmd test.php text codesize,controversial

動作確認

以下のファイルを用意します。

phpmdtest.php
<?php

class PhpMdTest
{
    public function test_function($param_string)
    {
        print "Hello World!!" . $param_string . "\n";
    }
}

$hoge_fuga = new PhpMdTest();
$hoge_fuga->test_function("( ゚д゚ )クワッ!!");

このファイルをphpmdを使って確認します。

$ phpmd phpmdtest.php text codesize,controversial,design,naming,unusedcode

/vagrant/test phpmdtest.php:5   The method test_function is not named in camelCase.
/vagrant/test phpmdtest.php:5   The parameter $param_string is not named in camelCase.
/vagrant/test phpmdtest.php:5   The variable $param_string is not named in camelCase.

指摘された内容を基に直してみます。

phpmdtest.php
<?php

class PhpMdTest
{
    public function testFunction($paramString)
    {
        print "Hello World!!" . $paramString . "\n";
    }
}

$hoge_fuga = new PhpMdTest();
$hoge_fuga->testFunction("( ゚д゚ )クワッ!!");

このファイルをphpmdを使って再度確認します。

$ phpmd phpmdtest.php text codesize,controversial,design,naming,unusedcode

特に何も表示されなくなりました。

作ってて何となく不安になった場合とか、プロジェクトに自分しかいない場合はこちらを試すのも良いのではないしょうか。

参考にしたURL

PHPMDが使えるSaaS