VS Codeでphpcs: Referenced sniff “PHPCompatibilityWP” does not exist というエラーが出たときの対処法
※本ページはプロモーションが含まれていますWordPressでテスト環境を構築したところ、VS Codeで下記エラーが出るようになりました。
phpcs: Referenced sniff "PHPCompatibilityWP" does not exist
PHPCompatibilityWPは、PHP_CodeSniffer のルールセットで、WordPressをベースにしたプロジェクトで PHP のクロスバージョン互換性の問題をチェックしてくれます。
これを使うことで、WordPressが提供するback-fills や poly-fillsを除外し、PHPCompatibility規格による誤検知を防ぎます。
エラーの原因は、WP CLIを使って「wp scaffold plugin-test」を実行して作成された「.phpcs.xml.dist」が原因でした。
「.phpcs.xml.dist」をリネームすることでエラーは消えます。
phpcsはコーディング規約に関する部分なので、テストの時だけ有効にするというのもありかと。
「.phpcs.xml.dist」を残したまま使う方法もメモしておきます。
PHPCompatibilityWPをインストール
Composerがあるフォルダに「cd」で移動。
Windowsの場合なら下記場所にあるはず。
C:\Users\<ユーザー名>\AppData\Roaming\Composer.
下記コマンドを実行。
composer require --dev phpcompatibility/phpcompatibility-wp:*
インストール。
phpcs -i
The installed coding standards are MySource, PEAR, PSR1, PSR12, PSR2, Squiz, Zend, WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra, PHPCompatibility, PHPCompatibilityParagonieRandomCompat, PHPCompatibilityParagonieSodiumCompat and PHPCompatibilityWP
下記が入っていればOK。
* PHPCompatibility
* PHPCompatibilityParagonieRandomCompat
* PHPCompatibilityParagonieSodiumCompat
* PHPCompatibilityWP
入っていない場合は「phpcs –config-set installed_paths 」を使って、各ファイルのパスを「,」(カンマ)区切りでつないで実行。
カンマの前後にスペースが入っているとうまくいかないので注意。パスはphpcsからの相対パスでもOKだが、絶対パスの方が確実だしフォルダをドラッグ・アンド・ドロップで追加すればOKなので楽。
phpcs --config-set installed_paths C:\Users\<ユーザー名>\AppData\Roaming\Composer\vendor\wp-coding-standards\wpcs,C:\Users\<ユーザー名>\AppData\Roaming\Composer\vendor\phpcompatibility\php-compatibility\PHPCompatibility,C:\Users\<ユーザー名>\AppData\Roaming\Composer\vendor\phpcompatibility\phpcompatibility-paragonie\PHPCompatibilityParagonieRandomCompat,C:\Users\<ユーザー名>\AppData\Roaming\Composer\vendor\phpcompatibility\phpcompatibility-paragonie\PHPCompatibilityParagonieSodiumCompat,C:\Users\<ユーザー名>\AppData\Roaming\Composer\vendor\phpcompatibility\phpcompatibility-wp\PHPCompatibilityWP
phpcs -i
で確認して入っていればOK。
おわりに
Dockerでの開発環境を整えている最中でこの現象が起き、どのタイミングでこうなったかわからなかったので原因を突き止めるまで時間がかかりましたorz