【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

判定結果の項目について(左から)

  1. ソースコードの行番号

  2. 種別(Error、Warningなど)

  3. エラー内容 (左の[]の中が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 オプションで確認できます。

また、現場独自のコーディング規約で判定させたい場合などは、判定ルールの細かいカスタマイズが可能となっています。

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)