【PHP】PHP_CodeSnifferを使う - 初期セットアップとかんたんな使い方 -
PHP_CodeSnifferとは決められたルールに沿ってPHPコードが書かれているかチェックしてくれるライブラリです。また、ルールに沿った形に整形してくれるPHP_CodeFixerもあります。
事前準備
セットアップ
composerを使ってインストールします。
$ composer global require "squizlabs/php_codesniffer=*"
~/.composer 配下に以下がインストールされる
$ ~/.composer/vendor/bin/phpcs --version PHP_CodeSniffer version 3.5.2 (stable) by Squiz (http://www.squiz.net) $ ~/.composer/vendor/bin/phpcbf --version PHP_CodeSniffer version 3.5.2 (stable) by Squiz (http://www.squiz.net)
phpcsとphpcbfについて
phpcs | ソースコードがコーディング規約を守っているかを判定する。 |
---|---|
phpcbf | ソースコードをコーディング規約に合わせて整形する。 対象ファイルを直接編集する。 ルールによっては修正できないものもある。 |
phpcs (PHP_CodeSniffer)
ソースコード例
以下のソースコードを phpcs でチェックしてみます。
test.php
<?php
$is_echo = true;
echo_phpcs($is_echo);
function echo_phpcs($is_echo) {
if ($is_echo) {
echo "hello php_codesniffer!!\n";
}
}
判定
$ ~/.composer/vendor/bin/phpcs test.php FILE: /phpcs/test.php --------------------------------------------------------------------------------------------------------------------- FOUND 5 ERRORS AFFECTING 2 LINES --------------------------------------------------------------------------------------------------------------------- 2 | ERROR | [ ] Missing file doc comment 6 | ERROR | [ ] Function name "echo_phpcs" is prefixed with a package name but does not begin with a capital letter 6 | ERROR | [ ] Function name "echo_phpcs" is invalid; consider "Echo_phpcs" instead 6 | ERROR | [ ] Missing doc comment for function echo_phpcs() 6 | ERROR | [x] Opening brace should be on a new line --------------------------------------------------------------------------------------------------------------------- PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY --------------------------------------------------------------------------------------------------------------------- Time: 58ms; Memory: 4MB
判定結果の項目について(左から)
ソースコードの行番号
種別(Error、Warningなど)
エラー内容 (左の[]の中がxだと、phpcbfによる修正が可能)
最後のメッセージがそれを促している
phpcbf (PHP Code Beautifier and Fixer)
上記のphpcsでた「ERROR | [x] Opening brace should be on a new line」をphpcbfで修正してみます。
※ちなみにこのエラーは「関数開始の波括弧で改行してください」と言われているものです。
修正
$ ~/.composer/vendor/bin/phpcbf test.php PHPCBF RESULT SUMMARY ---------------------------------------------------------------------- FILE FIXED REMAINING ---------------------------------------------------------------------- ~/phpcs/test.php 1 4 ---------------------------------------------------------------------- A TOTAL OF 1 ERROR WERE FIXED IN 1 FILE ---------------------------------------------------------------------- Time: 79ms; Memory: 4MB
結果
<?php
$is_echo = true;
echo_phpcs($is_echo);
function echo_phpcs($is_echo)
{
if ($is_echo) {
echo "hello php_codesniffer!!\n";
}
}
再度phpcsで判定してみる
$ ~/.composer/vendor/bin/phpcs test.php FILE: ~/phpcs/test.php ----------------------------------------------------------------------------------------------------------------- FOUND 4 ERRORS AFFECTING 2 LINES ----------------------------------------------------------------------------------------------------------------- 2 | ERROR | Missing file doc comment 6 | ERROR | Function name "echo_phpcs" is prefixed with a package name but does not begin with a capital letter 6 | ERROR | Function name "echo_phpcs" is invalid; consider "Echo_phpcs" instead 6 | ERROR | Missing doc comment for function echo_phpcs() ----------------------------------------------------------------------------------------------------------------- Time: 61ms; Memory: 4MB
再度判定してみると、[x]のエラーが消えていることが分かります。
なお、修正できないエラーがあるのは変数名やメソッド名は安易に変えてしまうとプログラムが正常に動作しなくなってしまう恐れがあるため、基本的には簡単な整形しかできません。
エラー判定のルールについて
デフォルトで PSR2 PEAR に準拠したルールに基づいて判定されます。
これを変えたい場合は、--standard=PSR1 などで指定すればOKです。
ここに指定出来る規約は -i オプションで確認できます。
また、現場独自のコーディング規約で判定させたい場合などは、判定ルールの細かいカスタマイズが可能となっています。
コメント
コメントを投稿