【PHP】PHP_CodeSnifferを使う(初期セットアップとかんたんな使い方)

PHP_CodeSnifferとは決められたルールに沿ってPHPコードが書かれているかチェックしてくれる。また、ルールに沿った形に整形してくれるPHP_CodeFixerもある。

前提条件

composerを使ってインストールするので、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 (PHP_CodeSniffer)

  • ソースコード例 : test.php
    以下のソースコードを phpcs でチェックしてみる。
    <?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)

上ででた「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
    

  • 結果 : 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 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 オプションで確認できる。

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

この記事へのコメント

  • デフォルトはPSR2ではなくPEAR
    2019年11月26日 14:55
スポンサーリンク