📔

【PHP】PHP_CodeSnifferをインストール- 導入と使い方 -

2023/10/29に公開

PHP_CodeSnifferは、PHPコードの有名な解析ツールです。
PHPのコード解析ツールは、PHPプログラムの品質、セキュリティ、コーディング規約の遵守などを評価し、問題を特定するためのツールです。開発プロセスを向上させ、エラーやバグを事前に検出し、コードの保守性を向上させるのに役立ちます。

主な機能は以下の通りです。

  1. コード規約のチェック: PHP_CodeSnifferは、一般的なコーディング規約(たとえば、PSR-1、PSR-2、PSR-12など)に従っているかどうかをチェックできます。これにより、コードが一貫性を持ち、可読性が上がります。
  2. 自動修正: PHP_CodeSnifferは、コード規約に違反している場合に修正を提案することもできます。これにより、問題を修正するのが簡単になります。

インストール方法

準備

composerを使ってインストールします。

composer global require "squizlabs/php_codesniffer=*"

下記がインストールされます。

$ ~/.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 (PHP_CodeSniffer)

phpcsではソースコードがコーディング規約を守っているかを判定できます。

~/.composer/vendor/bin/phpcs (ファイル名)


price.php(test用のファイル名)

<?php

function discount($price)
{
     if ($price >= 1000) {
        echo ($price - 100);
    } else {
        echo $price;
     }
}

$price = intval(trim(fgets(STDIN)));

discount($price);

結果

FILE: /Users/Documents/price.php
--------------------------------------------------------------------------------
FOUND 4 ERRORS AND 1 WARNING AFFECTING 4 LINES
--------------------------------------------------------------------------------
 1 | WARNING | [ ] A file should declare new symbols (classes, functions,
   |         |     constants, etc.) and cause no other side effects, or it
   |         |     should execute logic with side effects, but should not do
   |         |     both. The first symbol is defined on line 3 and the first
   |         |     side effect is on line 12.
 5 | ERROR   | [x] Line indented incorrectly; expected 4 spaces, found 5
 7 | ERROR   | [x] Closing brace indented incorrectly; expected 5 spaces, found
   |         |     4
 9 | ERROR   | [x] Line indented incorrectly; expected 4 spaces, found 5
 9 | ERROR   | [x] Closing brace indented incorrectly; expected 4 spaces, found
   |         |     5
--------------------------------------------------------------------------------
PHPCBF CAN FIX THE 4 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------

Time: 126ms; Memory: 6MB

結果の見方

一番左 → ソースコードの行番号

二番目 → 種別(Error、Warningなど)

三番目 → エラー内容 (左の[]の中がxだと、phpcbfによる修正が可能)



phpcbf (PHP Code Beautifier and Fixer)

phpcbf(PHP Code Beautifier and Fixer)は、PHPのコードを自動的に修正および整形するためのツールです。主な目的は、コーディング規約に従っていないコードを検出し、自動的に規約に合った形式に修正することです。

~/.composer/vendor/bin/phpcbf (ファイル名)

修正

PHPCBF RESULT SUMMARY
--------------------------------------------------------------------------------
FILE                                                            FIXED  REMAINING
--------------------------------------------------------------------------------
/Users/Documents/price.php  4      1
--------------------------------------------------------------------------------
A TOTAL OF 4 ERRORS WERE FIXED IN 1 FILE
--------------------------------------------------------------------------------

Time: 135ms; Memory: 6MB

修正後のコード

<?php

function discount($price)
{
    if ($price >= 1000) {
        echo ($price - 100);
    } else {
        echo $price;
    }
}

$price = intval(trim(fgets(STDIN)));

discount($price);


再度phpcsで判定してみる

$ ~/.composer/vendor/bin/phpcs (ファイル名)


FILE: /Users/Documents/price.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=PSR2 などを指定してください。

指定出来る規約は -i オプションで確認できます。

Discussion