HudsonでPHPメモ(2) PHP_CodeSnifferでコーディング規約チェック

PHP_CodeSnifferでコーディング規約にあっているかチェックしてみる。PHP_CodeSnifferでは、MySource, Squiz, Zend, PEARおよびPHPCSの5種類の規約があらかじめ用意されている。

準備

  • Phingは2.4以上をインストールする。
  • PHP_CodeSnifferをインストールする。
  • Checkstyle Pluginをインストールする。
  • たくさん警告が出る場合メモリが足らなくなるので、php.iniのmemory_limitを大きい値に変えておく。Hudson用にもヒープを多めに設定しておく。

build.xmlの作成

build.xmlに次のタスクを追加する。

    <target name="phpcs">
        <phpcodesniffer standard="PEAR">  // PEAR形式でチェック
            <fileset dir="src">           // チェックするPHPのソースを指定
                <include name="mantis/core/*.php" />
            </fileset>
            <formatter
                type="checkstyle"  // チェック結果をcheckstyle形式のXMLで出力
                usefile="true"
                outfile="reports/phpcs.xml" />  // (1) チェック結果のファイル名
        </phpcodesniffer>
    </target>

Hudsonのプロジェクト設定

Phingの設定


Checkstyle Pluginの設定

(1)で設定したcheckstyle形式のファイルを指定する。


実行結果



まとめ

Hudsonの設定そのものは難しくない。それよりも、チェックする規約をどうするかが問題。PHP_CodeSnifferで用意されている規約以外の場合、カスタマイズするのが面倒そう。最低限守らなければならない、修正しなくてはならない規約でチェックしないと、誰も直さない無意味なものになりかねない。

あとは、PHP_CodeSnifferもCheckStyle Pluginも警告が多いとメモリをかなり使うので、memory_limitやヒープは多めにとっといたほうがいい(Mantisのソースの場合2G程度にしないと、Fatal ErrorでPHP_CodeSnifferが異常終了してしまった)。