PHP
PhpStorm
IntelliJ
phpcs
PHP_CodeSniffer

IntelliJ(PhpStorm)でPHP_CodeSnifferを使う


前提


  • IntelliJ IDEA(ULTIMATE 2018.2)


    • 多分PhpStormも似たような感じ?



  • Mac

  • メモ程度


やりたいこと


  • IntelliJ(ローカル環境)で、PHPコードの静的解析をしたい


やること


  • (まだであれば)Macにcomposerを入れる

  • composerでPHP_CodeSnifferをinstall

  • IntelliJ側を設定

  • おしまい


composer

さっくりと brew でインストールしておきます。

$ brew install composer

// 入ったかな
$ which composer
/usr/local/bin/composer
// 設定の確認
$ composer global config --list
[bin-dir] {$vendor-dir}/bin (/Users/me/.composer/vendor/bin)
[home] /Users/me/.composer

configをみると、compserがglobal で利用するディレクトリが確認できます。

.composer/ に composer.jsonなどが生成され、ライブラリなどは .composer/vendor/bin に入る、となっていました。


PHP_CodeSniffer


Installation


  • GitHubのREADMEの通りcomposerを使ってインストール

$ composer global require "squizlabs/php_codesniffer=*"

Changed current directory to /Users/me/.composer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing squizlabs/php_codesniffer (3.3.2): Downloading (100%)
Writing lock file
Generating autoload files

// 入ったかな
$ ls -lah /Users/me/.composer/vendor/bin
phpcbf -> ../squizlabs/php_codesniffer/bin/phpcbf
phpcs -> ../squizlabs/php_codesniffer/bin/phpcs


  • とりあえず最新を使うようにしてみる(バージョン指定したければご自由に 3.* など

  • 特定のプロジェクトで使う訳ではないので global で入れてしまう


IntelliJ側の設定

Preferenceより、



  • Editor > Inspections > PHP Code Sniffer validation にチェックを入れる


  • Languages & Frameworks > PHP > Code Sniffer の Configurationを Local、横の[...]から先ほどのphpcs本体を指定する


    • /Users/me/.composer/vendor/bin/phpcs

    • 選択Finderで不可視ディレクトリが出ない場合は、選択Finder画面で Command + Shift + G をやるとパスを直接入力できるダイアログが出るから便利 (参考)




結果

指摘事項が大量発生して悲しい気持ちになった :innocent:


おまけ


CakePHPのCodesnifferのルール適用

$ composer global require "cakephp/cakephp-codesniffer=*"

Editor > Inspections > PHP Code Sniffer validationCoding standard 欄を 「Custom」とし横の [...] から、

/Users/me/.composer/vendor/cakephp/cakephp-codesniffer/CakePHP/ruleset.xml のようにruleset.xmlを指定したところCakePHPのルールセットが適用されるようになりました。


参考

Configuring PHP Code Sniffer manually の方を試しました。

IntelliJでComposerの設定をして Available Packages から導入する公式おすすめ?のやり方が良いのかもしれませんが特に試していません(IDEを使いこなせていないだけ)

ルールセットはおいおい調整。

メモ程度の記事なので、もし記事内容がおかしかったらご指摘くださいませ。