HudsonでPHPのコードチェック

Javaではコーディング規約のチェックツールとして CheckStyleがありますが、PHPではPHP_CodeSnifferがあります。PHP_CodeSnifferを試してみるなどを参考にして、PHP_CodeSnifferをインストールしてきます。


PHP_CodeSnifferはコードをチェックした結果を下記のようにいくつかの形式で標準出力に出力できます(何故かファイルには出力できないorz)。

             Print either the "full", "xml", "checkstyle",
                     "csv" or "summary" report
                     (the "full" report is printed by default)

Checkstyleの形式でチェック結果を出力すれば、Hudsonプラグインで結果をグラフ等で表示できそうです。

build.xmlの作成

そこで、以下のようなbuild.xmlを作成します。

<?xml version="1.0" encoding="utf-8" ?>
<project name="StringUtil" basedir="." default="checkstyle">
  <target name="checkstyle">
    <exec command="phpcs --standard=PEAR --report=checkstyle --ignore=*Test.php -n src > reports/checkstyle.xml" />
  </target>
</project>


PhingにはPHP_CodeSniffer用のタスクがあるのですが、2.3.Xでは出力をファイルに出力できない*1ので、コマンドラインを実行してその結果をファイルに出力するようにします。上記は、PEARの規約に従い(--standard=PEAR)、レポートをCheckstlyeの形式で(--report=checkstyle)、テストコードは対象外(--ignore=*Test.php)で、srcディレクトリにあるPHPファイルをチェックします。その結果はreports/checkstyle.xmlに出力されます。

Violationsプラグインのインストール

Checkstyleを処理するプラグインには、CheckStyleプラグインViolationsプラグインがありますが、ViolationsプラグインFindBugs等にも対応しているのでViolationsプラグインをインストールします。

プロジェクトの作成

d:id:ssogabe:20081102:1225642743と同様にプロジェクトをフリースタイルで作成します。ソースも同じものを使用します。

Phingの設定

ターゲットにcheckstyleを設定します。

Violationsプラグインの設定

チェックした結果のファイルを指定します。ファイルはワークスペースディレクトリからの相対パスで指定します。


これで準備ができたのでビルドを実行してみます。





PHP_CodeSnifferはルールの変更等が難しいところはありますので、PEARやZendなどの規約に準拠した方が無難のようです。
PHP_CodeSnifferの一番の問題はチェック対象が多いと、リカーシブコールが100回を超えてエラーになってしまうことでしょうか。そのときは、チェックをディレクトリ毎などに分けるなど工夫が必要です。

*1:2.4.Xではできるようになっています