Hudson+phpmdでPHPコードの問題を自動検出する方法

 2010/10/23
このエントリーをはてなブックマークに追加

Hudson+PHPシリーズですよ。 (Javaとか他の言語でもいけるけど)

phpmdって何?

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

詳細はhttp://phpmd.org/about.htmlを参照のこと

phpmdのインストール

これは簡単で、いつものようにpearコマンドでさくっと入る

pear channel-discover pear.pdepend.org
pear install --alldeps pdepend/PHP_Depend-beta
pear channel-discover pear.phpmd.org
pear channel-discover pear.pdepend.org
pear install --alldeps phpmd/PHP_PMD-alpha

なお動作させるにはPHP5.2.3以上が必要となる(ので生のCentOSとかだとPHPのバージョンアップが必要)

phpmdの使い方

まずコマンドラインでの使い方

Mandatory arguments:
1) A php source code filename or directory
2) A report format
3) A ruleset filename or a comma-separated string of rulesetfilenames

Optional arguments that may be put after the mandatory arguments:
--minimumpriority: rule priority threshold; rules with lower priority than this will not be used
--reportfile: send report output to a file; default to STDOUT
--suffixes: comma-separated string of valid source code filename extensions
--exclude: comma-separated string of patterns that are used to ignore directories

の通りなんだけど、 第1引数が解析対象のphpファイルまたはディレクトリ 第2引数が出力レポートの形式(text, xml, html) 第3引数が適用するルールセットのファイル名か、カンマ区切りで列挙したルール(codesize,unusedcode,naming,design) を指定する。 ルールについてはhttp://phpmd.org/rules/index.htmlを参照。

Hudsonで自動的にやらせる

Hudsonの管理画面からPMDプラグインを導入する

インストールしたらHudsonを再起動だ

build.xmlを用意する

<target name="phpmd">
  <exec command="phpmd /path/to/source/ xml codesize,unusedcode,naming,design \
--reportfile /path/to/reports/pmd.xml \
--exclude /path/to/source/tests
" />
</target>

それぞれが何を意味しているかはコマンドラインオプションのところを参照

プロジェクト側の設定

ビルドの設定で上記xmlで新たに作成したターゲットを指定する。(phingを使うことを前提にしているので、こちらを参照してphingの設定はしてください。)

プロジェクトの設定画面を開き、PMD警告の集計にチェックを入れ、レポートのパスを指定する。

これで準備完了だ!

これで準備が完了したのでビルドすれば良い。ビルドすると、プロジェクトページにPMD警告の推移がグラフ表示されるとともに、詳細の警告内容が確認できる。

最後に

こういうツール系は思いついたときに動かすのではなくて、プロジェクト期間中ずっと継続的に動作させておく必要がある。 そして検出した内容は将来に技術的負債を残さないためにも、随時修正していけば良い。 ただし全部修正する必要があるかどうかはよく考えるべきだ。あくまでリスクが高そうな箇所を検出してくれているので、検出結果を見ながらプロジェクトの内容にあわせて判断する必要がある。むやみやたらに全部対応するのはROIは高くない。

なお、随時コードを修正していくためには、「自動化されたテスト」が必要であることは言うまでもない。テストでガードされていないコードをどんどん直すのは自殺行為に近い。リファクタリングは前提としてテストの自動化があることは忘れてはいけない。

このサイトの関連する記事

 2010/10/23
このエントリーをはてなブックマークに追加

サイト内検索


著作

寄稿

Latest post: