PHP コードのコーディング規約をチェックすることにした (composer/phing/PHP_CodeSniffer)
Web をぶらぶらしていたら PHP のコーディング規約として PSR(Proposing a Standards Recommendation) という規約があることに気づきました。
今開発しているプロジェクトに PSR のチェックを書けるためにあれこれしたのものをメモします。
まずは composer をインストールする
現在のプロジェクトでは chef を使って PHP パッケージをインストールしているのですが、
もうちょっと管理しやすいよう composer を使って依存パッケージを入れなおします。
composer は Bundler 相当のツールで、プロジェクトディレクトリに依存パッケージをインストールしてくれます。
composer のインストールは以下のコマンドを使います。
$ curl -sS https://getcomposer.org/installer | php
コマンドを実行すると composer.phar という PHP スクリプトが保存されるので、
このファイルをプロジェクトのルートディレクトリに配置します。
次に composer.json という定義ファイルを作成します。
php composer.phar init コマンドで対話式に生成することもできるようですが、
ここでは割愛して CI 用に設定した内容を掲載します。composer.phar と同じディレクトリに配置してください。
{ "require-dev": { "phing/phing": "*", "squizlabs/php_codesniffer": "*" }, "config": { "bin-dir" : "bin/" } }
この定義では require-dev として開発用のパッケージである phing, php_codesniffer を指定しています。
それぞれバージョン指定はしていない(* を指定)ので、最新の安定版を利用します。
パッケージを探す際は [packagist.org:title=packagist.org] で検索すると良いようです。
ちなみに bin-dir の指定は実行ファイルを bin/ 以下に配置する指定です(デフォルトは vendor/bin)。
最後に composer を実行して依存パッケージをダウンロードしてくるだけです。
$ php composer.phar install $ ls bin/ pdepend phing phpcpd phpcs phpmd phpunit
PSR チェックをする (PHP_CodeSniffer)
ソースコードがあるコーディング規約に準拠しているかを調べるツールとして PHP_CodeSniffer があります。
PHP_CodeSniffer には PSR の定義が含まれているので、インストール直後から PSR のチェックを行うことができます。
PHP_CodeSniffer は先ほどの composer でインストール済みなので、phpcs コマンドでチェックすることができます。
$ bin/phpcs --standard=PSR1 src/
-
- standard オプションでコーディング規約を指定します。
PSR1 を指定した場合は命名を中心とした規約を、PSR2 を指定した場合は PSR1 に加えインデントなどのスタイル系の規約をチェックします。
あとはこつこつ直していくだけですね。
なお、CakePHP や FuelPHP など、フレームワーク毎のコーディング規約もパッケージ化されているようなので、
使っているフレームワークに合わせて切り替えると良さそうです。
phing から PHP_CodeSniffer を呼び出す
PHP_CodeSniffer でコーディング規約のチェックができるようになったのですが、
いちいちコマンドラインで呼び出していくのが面倒なので PHP のビルドツールである phing から呼び出せるようにしておきます。
どうやら
build.xml に phpcs というタスクを定義しておきます。
<target name="phpcs" description="Generate phpcs.xml using PHP_CodeSniffer" > <phpcodesniffer standard="PSR2" file="${targetDir}/" allowedFileExtensions="php" > </phpcodesniffer> </target>
ここでは $targetDir という変数をつかっているので、コピペする際は注意してください。
タスクを定義したあとは、コマンドラインから次のようにチェックを起動できます。
$ bin/phing phpcs
Jenkins にチェックさせる
Jenkins の checkstyle プラグインを使うことで、チェックした結果を可視化することができます。
build.xml の phpcs タスクに formatter を書き足しておけば、checkstyle 用の XML を生成させることができます。
<target name="phpcs" description="Generate phpcs.xml using PHP_CodeSniffer" > <mkdir dir="${outputDir}" /> <phpcodesniffer standard="PSR2" file="${targetDir}/" allowedFileExtensions="php" > <formatter type="checkstyle" outfile="${outputDir}/phpcs.xml"/> </phpcodesniffer> </target>
まとめ
- composer でパッケージ管理しておくと便利
- PHP_CodeSniffer でコーディング規約のチェックすると整理する気になる
- ただし PSR は口うるさいので困る
- 既に他の人に使ってもらってるものだとインターフェース直しづらい…