PHP_CodeSnifferとは
コーディング規則にそってコードが記述されているか静的解析するツールの事である。ここで基準にしているコーディング規則とは、PSR-1とPSR-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
※ディレクトリ、ファイル部分は設定で記載していれば記述する必要はなし