1
1

More than 1 year has passed since last update.

PHP_CodeSniffer phpcs のインストールと使用方法

Posted at

PHP_CodeSnifferとは

コーディング規則にそってコードが記述されているか静的解析するツールの事である。ここで基準にしているコーディング規則とは、PSR-1PSR-12である。

静的解析とは、コードを実行せずに、コードの問題点をチェックすること。

PHP_CodeSnifferには、主に2つの機能がある。

  • phpcs
  • コーディング規約を守れていないコードの検出
  • phpcbf
  • コーディング規約に従ってコードを自動修正

この記事では、phpcsをメインに解説する。

インストール方法

composerを使用する。

composer.jsonに下記を入力する。

"require-dev": {
        "squizlabs/php_codesniffer": "3.*"
    }

require-devとは、開発環境のみに必要で、本番環境には必要ないライブラリの設定である。

{
    "name": "root/html",
    "require": {},
    "require-dev": {
        "squizlabs/php_codesniffer": "3.*",
    }
}

こんな感じになってればOK

そして、ターミナルでcomposer install or composer updateを入力する。

vendor/bin 直下に phpcsとphpcbfが作成されていることが確認できればインストールは完了である。

1.使用方法 コマンド

ディレクトリ、ファイルを指定して下記を実行する。

./vendor/bin/phpcs --standard=PSR12 /path/to/code-directory

./vendor/bin/phpcs→ vendor/bin直下のphpcsファイル

--standard=PSR12→ PSR-12のルールを指定する。

具体例

sample.phpと題して、わざとコーディング規約に反したコードを用意してみる。

const price = 100;
if ($v === 1) echo 'Hello';

これを、phpcsで静的解析すると…

FILE: /var/www/html/sample.php
--------------------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
--------------------------------------------------------------------------------------------------------------------------------------
 3 | ERROR | [ ] Class constants must be uppercase; expected PRICE but found price
   |       |     (Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase)
 4 | ERROR | [x] Inline control structures are not allowed (Generic.ControlStructures.InlineControlStructure.NotAllowed)
--------------------------------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
--------------------------------------------------------------------------------------------------------------------------------------

2つのエラーが表示される。

  • 定数名は大文字にしてください(Class constants must be uppercase; expected PRICE but found price)
  • if文は決められた構造で記述してください。(Inline control structures are not allowed)

2.使用方法 設定の自動化 XMLファイルに記述

毎回、毎回コマンドで設定を打ち込むのが面倒なので、ファイルに設定を記載して自動化しておく。

phpcs.xmlファイルを記載して下記を記述する。

※詳しくは、PHP_CodeSniffer Annotated Ruleset

<?xml version="1.0"?>
<ruleset name="Custom PSR12" namespace="MyProject\CS\Standard">
    <!-- <description>は、このルールの設定の説明する -->
    <description>A custom coding PSR12</description>
    <!-- <file>は、解析する場所のディレクトリを記載する。 -->
    <file>./</file>
    <!-- <exclude-pattern>は、解析から除外するファイルを記載する。 -->
    <exclude-pattern type="relative">./vendor/*</exclude-pattern>
    <!-- <arg>は、解析の際に使用するオプション -->
    <arg name="colors"/>
    <arg value="s"/>
    <!-- <rule>は、適応するルールを記載する。 -->
    <rule ref="PSR12"/>
</ruleset>

上記の記載が終了したら、ターミナルで下記のように実行する。

./vendor/bin/phpcs --standard=phpcs /path/to/code-director

1.使用方法 コマンド と同じ結果が返ってくればOK

※ディレクトリ、ファイル部分は設定で記載していれば記述する必要はなし

参考

独学エンジニア
PHP_CodeSniffer公式ドキュメント

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1