PHPMDを使ってバグになりそうなところを検出しちゃいましょう!

t.sayamaPHP,PHPMD,コード解析

もうすっかり暑くなりましたが、1日中半袖でいることができない男、s-24です。(改名しました!)
ずっと見てきた海外ドラマ、CSI-NYがシーズン9で終了してしまい残念すぎます。
マイアミも終わってしまったので、とってもさみしいです。。
そのかわり、24が復活するらしいですが、今更ジャックについていけるか心配で寝れません!

さて、今回は PHPMD – PHP Mess Detector についてです。PHPMD は PHP のコードの中から、コードレベルでバグになりそうな箇所を検出してくれるツールです。早めにバグを発見するために導入してみました。

インストールは簡単です。CentOS であれば root 権限で以下を実行していけば OK!

# yum -y install php-pear
 
# pear channel-discover pear.pdepend.org
# pear install pdepend/PHP_Depend-beta
 
# pear channel-discover pear.phpmd.org
# pear install --alldeps phpmd/PHP_PMD-alpha

これでインストールできます。

実行コマンドはこのように。

# phpmd [ファイル名] [レポート形式] [ルール]

ファイル名は解析したいファイル名、レポートは出力したいファイル名で、text と xml で出力できるみたいです。ルールは5つあるようですが、今回は unusedcode をセットしてみました。これは使われていないコードを検出してくれます。クラス内で定義はされてるけど参照されてない変数、パラメータなどを抽出してくれます。typo とかこれで発見できるかなあと思って導入しています。ちなみにその他のルールはこんな感じです。

  • controversial: キャメルケースなどを検出する
  • codesize: コードサイズ関連部分を検出する
  • design: 設計の問題を検出する
  • naming: 名前が短い、長い箇所を検出する

実際に実行してみるとこんな感じになります。

$ phpmd hogehoge.php text unusedcode
 
hogehoge.php:1225 Avoid unused local variables such as '$session'.
hogehoge.php:1674 Avoid unused parameters such as '$html'.
                  :
                  : (こんな感じでずらずらと…)

うん。かなり出てきました!コードをじっくり確認しないと発見できないような部分も発見!

これを開発側に投げて、確認して修正して貰うようにしています。これでもう少し早くバグが見つかると思います!

初回は全部1つずつ確認しましたが、問題ない部分はルールのカスタマイズをしたりすれば検出されなくなるらしいです。自分はルールのカスタマイズをするのが面倒だったので、確認した次の日からは新規に検出された部分だけ確認するようにしています。また、このチェックは日次で自動化して実行しないと手間かかっちゃいますので、自分は Jenkins にプロジェクトを作成して実行させるようにしています。

この ①PHPMD の Jenkins へ導入、②新規に検出された部分だけ確認するような運用方法については次回の投稿で紹介します!

参考サイト: CentOS6.3で静的解析ツールPHPMDを動かしてみる(PHP用)

t.sayamaPHP,PHPMD,コード解析

Posted by s-24