PHP_CodeSniffer & VSCode 환경을 만들어 보았습니다.
PHP_CodeSniffer란?
PHP_CodeSniffer는 특정 코딩 규칙을 위반하지 않았는지 확인하고 수정하는 개발 도구입니다.
PHP, JavaScript, CSS 파일의 코딩에 관하여, 규약 위반이 없는지를 판정, 수정할 수 있습니다.
도입 절차
PHP_CodeSniffer 도입
Composer를 사용하여 프로젝트 로컬에 PHP_CodeSniffer 설치
composer require --dev "squizlabs/php_codesniffer=3.*"
코딩 규약의 설정 파일 작성
규칙 설정 파일 .phpcs.xml.dist
을 프로젝트에 작성
내용은 예입니다.
<?xml version="1.0"?>
<ruleset name="custom coding standard">
<description>A custom coding standard.</description>
<!-- PSR12準拠 -->
<rule ref="PSR12">
</rule>
<!-- インデントはスペース、サイズは4 -->
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="4"/>
<property name="tabIndent" value="false"/>
</properties>
</rule>
<!-- 変数名をキャメルケースに -->
<rule ref="Squiz.NamingConventions.ValidVariableName" />
<rule ref="Squiz.NamingConventions.ValidVariableName.PrivateNoUnderscore">
<severity>0</severity>
</rule>
<!-- vendorフォルダ以下のファイルはチェックしない -->
<exclude-pattern>vendor/</exclude-pattern>
</ruleset>
동작 확인
코드 확인
체크용으로 스타일이 이상한 HogeClass.php
파일을 준비.
<?php
class hoge_class{
var some_value;
function hoge_func(int a,int b){
$hoge_value = 1;
return 3;
}
}
phpcs
명령을 사용하여 HogeClass.php
를 확인합니다.
./vendor/bin/phpcs HogeClass.php
오류가 발견되면 성공입니다.
---------------------------------------------------------------------------------------------------
FOUND 11 ERRORS AFFECTING 6 LINES
---------------------------------------------------------------------------------------------------
3 | ERROR | [ ] Each class must be in a namespace of at least one level (a top-level vendor name)
3 | ERROR | [ ] Class name "hoge_class" is not in PascalCase format
3 | ERROR | [x] Opening brace of a class must be on the line after the definition
4 | ERROR | [x] Line indented incorrectly; expected at least 4 spaces, found 2
6 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 2
6 | ERROR | [ ] Method name "hoge_class::hoge_func" is not in camel caps format
6 | ERROR | [ ] Visibility must be declared on method "hoge_func"
6 | ERROR | [x] Opening brace should be on a new line
7 | ERROR | [ ] Variable "hoge_value" is not in valid camel caps format
8 | ERROR | [x] Line indented incorrectly; expected at least 8 spaces, found 0
9 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 2
---------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 6 MARKED SNIFF VIOLATIONS AUTOMATICALLY
---------------------------------------------------------------------------------------------------
Time: 309ms; Memory: 6MB
코드 자동 수정
PHP_CodeSniffer에는 phpcbf
라는 명령이 있습니다.
이 명령은 도구의 가능한 범위에서 코드를 수정하는 명령입니다.
방금 전 HogeClass.php
을 수정해 보겠습니다.
./vendor/bin/phpcbf HogeClass.php
HogeClass
를 확인하면 들여 쓰기의 혼란 등에 대해 수정되었습니다.
<?php
class hoge_class
{
var some_value;
function hoge_func(int a,int b)
{
$hoge_value = 1;
return 3;
}
}
단지 phpcs
로 체크하면 규약 위반이 몇개 남아 있으므로, 그들은 수동으로 수정합니다.
-----------------------------------------------------------------------------------------------
FOUND 5 ERRORS AFFECTING 3 LINES
-----------------------------------------------------------------------------------------------
3 | ERROR | Each class must be in a namespace of at least one level (a top-level vendor name)
3 | ERROR | Class name "hoge_class" is not in PascalCase format
7 | ERROR | Method name "hoge_class::hoge_func" is not in camel caps format
7 | ERROR | Visibility must be declared on method "hoge_func"
9 | ERROR | Variable "hoge_value" is not in valid camel caps format
-----------------------------------------------------------------------------------------------
Time: 58ms; Memory: 6MB
이것으로 수정 완료입니다.
<?php
namespace hoge;
class HogeClass
{
private $someValue;
public function hogeFunc(int $a, int $b)
{
$hogeValue = 1;
return 3;
}
}
VSCode 플러그인으로 PHP_CodeSniffer와 연동
PHP_CodeSniffer를 사용할 수 있게 되었지만, 커맨드 뿐이라면 쓰기가 나쁜 국면이 있으므로, VSCode와 연계시켜 보겠습니다.
phpcs 플러그인 설치
PHP_CodeSniffer와 연계시키는 플러그인은 많이 있습니다만, 이번은 「phpcs」와 「PHP Sniffer & Beautifier」를 이용합니다.
우선 각각을 install.
VSCode 구성 파일 만들기
프로젝트에 .vscode/setting.json
를 만들고 다음을 작성합니다.
자세한 설정은 각 플러그인의 설명을 확인하십시오. 이번에는 적당히 몇 가지 그것 같은 것을 픽업하고 있습니다.
{
"editor.formatOnSave": true, <-- ファイルを保存した時に、formatterが動作する
"phpcs.enable": true, <-- phpcsを有効にする
"phpcs.autoConfigSearch": true, <-- phpcsの設定ファイルを自動で検索する
"phpsab.fixerEnable": true, <-- phpsabの自動整形を有効にする
"phpsab.snifferMode": "onSave",
"phpsab.autoConfigSearch": true,
}
에디터로 파일을 확인했을 때, 규약 위반시에는 빨간색 물결선, 저장시에 자동 성형이 되어 있으면 설정 완료입니다.
주의점
PHP CodeSniffer의 동작 확인 중에 알게 된 함정에 대해 정리합니다.
phpcs 명령으로 감지 할 수있는 것은 "규약 위반"이며 SyntaxError는 감지 할 수 없습니다.
phpcs에서 php의 syntaxError를 찾을 수 없습니다. CI라든지 돌려 코드의 품질 체크한다면 phpcs
이외에 php -l
사용해 Syntax 체크하는 것이 좋을지도.
다만 php -l
도 정밀도 100%라고 하는 것은 아니기 때문에 과신은 금물.
그럼 좋은 PHP 생활을 ~
Reference
이 문제에 관하여(PHP_CodeSniffer & VSCode 환경을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/choimake/items/c733e7330105a3d69c20
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
PHP_CodeSniffer 도입
Composer를 사용하여 프로젝트 로컬에 PHP_CodeSniffer 설치
composer require --dev "squizlabs/php_codesniffer=3.*"
코딩 규약의 설정 파일 작성
규칙 설정 파일
.phpcs.xml.dist
을 프로젝트에 작성내용은 예입니다.
<?xml version="1.0"?>
<ruleset name="custom coding standard">
<description>A custom coding standard.</description>
<!-- PSR12準拠 -->
<rule ref="PSR12">
</rule>
<!-- インデントはスペース、サイズは4 -->
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="4"/>
<property name="tabIndent" value="false"/>
</properties>
</rule>
<!-- 変数名をキャメルケースに -->
<rule ref="Squiz.NamingConventions.ValidVariableName" />
<rule ref="Squiz.NamingConventions.ValidVariableName.PrivateNoUnderscore">
<severity>0</severity>
</rule>
<!-- vendorフォルダ以下のファイルはチェックしない -->
<exclude-pattern>vendor/</exclude-pattern>
</ruleset>
동작 확인
코드 확인
체크용으로 스타일이 이상한
HogeClass.php
파일을 준비.<?php
class hoge_class{
var some_value;
function hoge_func(int a,int b){
$hoge_value = 1;
return 3;
}
}
phpcs
명령을 사용하여 HogeClass.php
를 확인합니다../vendor/bin/phpcs HogeClass.php
오류가 발견되면 성공입니다.
---------------------------------------------------------------------------------------------------
FOUND 11 ERRORS AFFECTING 6 LINES
---------------------------------------------------------------------------------------------------
3 | ERROR | [ ] Each class must be in a namespace of at least one level (a top-level vendor name)
3 | ERROR | [ ] Class name "hoge_class" is not in PascalCase format
3 | ERROR | [x] Opening brace of a class must be on the line after the definition
4 | ERROR | [x] Line indented incorrectly; expected at least 4 spaces, found 2
6 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 2
6 | ERROR | [ ] Method name "hoge_class::hoge_func" is not in camel caps format
6 | ERROR | [ ] Visibility must be declared on method "hoge_func"
6 | ERROR | [x] Opening brace should be on a new line
7 | ERROR | [ ] Variable "hoge_value" is not in valid camel caps format
8 | ERROR | [x] Line indented incorrectly; expected at least 8 spaces, found 0
9 | ERROR | [x] Line indented incorrectly; expected 4 spaces, found 2
---------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 6 MARKED SNIFF VIOLATIONS AUTOMATICALLY
---------------------------------------------------------------------------------------------------
Time: 309ms; Memory: 6MB
코드 자동 수정
PHP_CodeSniffer에는
phpcbf
라는 명령이 있습니다.이 명령은 도구의 가능한 범위에서 코드를 수정하는 명령입니다.
방금 전
HogeClass.php
을 수정해 보겠습니다../vendor/bin/phpcbf HogeClass.php
HogeClass
를 확인하면 들여 쓰기의 혼란 등에 대해 수정되었습니다.<?php
class hoge_class
{
var some_value;
function hoge_func(int a,int b)
{
$hoge_value = 1;
return 3;
}
}
단지
phpcs
로 체크하면 규약 위반이 몇개 남아 있으므로, 그들은 수동으로 수정합니다.-----------------------------------------------------------------------------------------------
FOUND 5 ERRORS AFFECTING 3 LINES
-----------------------------------------------------------------------------------------------
3 | ERROR | Each class must be in a namespace of at least one level (a top-level vendor name)
3 | ERROR | Class name "hoge_class" is not in PascalCase format
7 | ERROR | Method name "hoge_class::hoge_func" is not in camel caps format
7 | ERROR | Visibility must be declared on method "hoge_func"
9 | ERROR | Variable "hoge_value" is not in valid camel caps format
-----------------------------------------------------------------------------------------------
Time: 58ms; Memory: 6MB
이것으로 수정 완료입니다.
<?php
namespace hoge;
class HogeClass
{
private $someValue;
public function hogeFunc(int $a, int $b)
{
$hogeValue = 1;
return 3;
}
}
VSCode 플러그인으로 PHP_CodeSniffer와 연동
PHP_CodeSniffer를 사용할 수 있게 되었지만, 커맨드 뿐이라면 쓰기가 나쁜 국면이 있으므로, VSCode와 연계시켜 보겠습니다.
phpcs 플러그인 설치
PHP_CodeSniffer와 연계시키는 플러그인은 많이 있습니다만, 이번은 「phpcs」와 「PHP Sniffer & Beautifier」를 이용합니다.
우선 각각을 install.
VSCode 구성 파일 만들기
프로젝트에 .vscode/setting.json
를 만들고 다음을 작성합니다.
자세한 설정은 각 플러그인의 설명을 확인하십시오. 이번에는 적당히 몇 가지 그것 같은 것을 픽업하고 있습니다.
{
"editor.formatOnSave": true, <-- ファイルを保存した時に、formatterが動作する
"phpcs.enable": true, <-- phpcsを有効にする
"phpcs.autoConfigSearch": true, <-- phpcsの設定ファイルを自動で検索する
"phpsab.fixerEnable": true, <-- phpsabの自動整形を有効にする
"phpsab.snifferMode": "onSave",
"phpsab.autoConfigSearch": true,
}
에디터로 파일을 확인했을 때, 규약 위반시에는 빨간색 물결선, 저장시에 자동 성형이 되어 있으면 설정 완료입니다.
주의점
PHP CodeSniffer의 동작 확인 중에 알게 된 함정에 대해 정리합니다.
phpcs 명령으로 감지 할 수있는 것은 "규약 위반"이며 SyntaxError는 감지 할 수 없습니다.
phpcs에서 php의 syntaxError를 찾을 수 없습니다. CI라든지 돌려 코드의 품질 체크한다면 phpcs
이외에 php -l
사용해 Syntax 체크하는 것이 좋을지도.
다만 php -l
도 정밀도 100%라고 하는 것은 아니기 때문에 과신은 금물.
그럼 좋은 PHP 생활을 ~
Reference
이 문제에 관하여(PHP_CodeSniffer & VSCode 환경을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/choimake/items/c733e7330105a3d69c20
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"editor.formatOnSave": true, <-- ファイルを保存した時に、formatterが動作する
"phpcs.enable": true, <-- phpcsを有効にする
"phpcs.autoConfigSearch": true, <-- phpcsの設定ファイルを自動で検索する
"phpsab.fixerEnable": true, <-- phpsabの自動整形を有効にする
"phpsab.snifferMode": "onSave",
"phpsab.autoConfigSearch": true,
}
PHP CodeSniffer의 동작 확인 중에 알게 된 함정에 대해 정리합니다.
phpcs 명령으로 감지 할 수있는 것은 "규약 위반"이며 SyntaxError는 감지 할 수 없습니다.
phpcs에서 php의 syntaxError를 찾을 수 없습니다. CI라든지 돌려 코드의 품질 체크한다면
phpcs
이외에 php -l
사용해 Syntax 체크하는 것이 좋을지도.다만
php -l
도 정밀도 100%라고 하는 것은 아니기 때문에 과신은 금물.그럼 좋은 PHP 생활을 ~
Reference
이 문제에 관하여(PHP_CodeSniffer & VSCode 환경을 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/choimake/items/c733e7330105a3d69c20텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)