明日も楽をするために

めんどくさがりなITエンジニアが書くメモ帳

PHPでコーディング規約の自動化 PHP CodeSniffer

どうしても開発者が増えてきたりするとコーディング規約が適当になりがちです。
そこでコーディング規約を自動化しようと思いました。

職場のコーディング規約はPEARを元にしたものですが、現在では時代遅れ感が否めないのでPSRを採用する方向で考えました。
最近のPHP系のフレームワークはこれを採用しているところが多いです。
www.php-fig.org


実際に試したのはPHP_CodeSnifferと
github.com


PHP-CS-Fixerです。
github.com

某QiitaでPHP_CodeSnifferは古いと書かれていたのでPHP-CS-Fixerを先に使ってみましたが、現在self-updateすると落ちてくるのが2.0のDEV版なのですが、2.0からどうやらオプションが変わるようで1.x系のオプションが使えないので苦労しました。それとDEV版だからなのか、if文が複数行あるとインデントが崩れるため今回の使用は見送りました。

PHP_CodeSnifferは古いと書かれていましたが、現在でも開発は行われているようで全然問題ありませんでした。PHP_CodeSnifferはxmlのruleset.xmlを元にオレオレコーディング規約も作れるので便利です。

ダウンロード

PHP_CodeSnifferは2種類ありまして、phpcs.pharがコーディング規約を適用したさいのdiffを取れます。phpcbf.pharがコーディング規約の適用です。
それぞれgithubから落としてきます。

wget https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.6.1/phpcs.phar -O phpcs.phar
wget https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.6.1/phpcbf.phar -O phpcbf.phar
mv ./phpcs.phar /usr/local/bin/phpcs.phar
mv ./phpcbf.phar /usr/local/bin/phpcbf.phar
chmod 755 /usr/local/bin/phpcs.phar
chmod 755 /usr/local/bin/phpcbf.phar
使い方

--standardでコーディング規約を指定します。--report=diffをつけるとどこが変わったか見ることができます。

php phpcs.phar --standard=PSR2 /foo/foo.php
php phpcs.phar --standard=PSR2 --report=diff /foo/foo.php

コーディング規約を改造したい方はGithubのPSR2のxmlを元に自分流に改造できます。改造したファイルのPathを--standardに指定すれば使えます。
PSR2 ruleset.xml
https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/PSR2/ruleset.xml

変換実行
php phpcbf.phar --standard=ruleset.xml /foo/foo.php

ignoreで除外もできます。
php phpcbf.phar --standard=ruleset.xml /foo/foo.php --ignore=*Base.php