PhpStormでCodeSnifferを使う方法

こんにちは、コバヤシです。

今回はPhpStormでPHP_CodeSnifferを使ってPSR12でチェックする方法について書きたいと思います。

PHP_CodeSnifferとは

コード規約をチェックするツールです。 Composerでインストール出来ます。

github.com

PHP_CodeSnifferをインストール

Macにglobalにインストールします。

composer global require "squizlabs/php_codesniffer=*"

~/.composer/vendor/bin/phpcsにインストールされるはずです。

$ phpcs -i
The installed coding standards are PEAR, Zend, PSR2, MySource, Squiz, PSR1 and PSR12

PSR12が使えるようですね。

PhpStormの設定

Preferences > 言語&フレームワーク > 品質ツールを開きます。

f:id:hide_san99:20200802191101p:plain

構成:localの横の...を押します。

f:id:hide_san99:20200802192613p:plain

PHP_CodeSniffer pathに、PHP_CodeSnifferのpathを入力もしくは選択します。
「検証」をクリックして「OK」が出れば問題ありません。

f:id:hide_san99:20200802193341p:plain

エディター > インスペクション > PHP > 品質ツール > PHP_CodeSniffer validationをチェックします。 Coding standardのプルダウンから「PSR12」を選択します。

私の場合はコード規約のエラーを目立たせる為「エラー」を選択しています。

あとは、「適用」を押せば完了です。

一応これで設定は完了なのですが、 PSR12そのままでは厳しいルールもあるので、カスタマイズをしてみます。

チェックのルールをカスタマイズする

以下のような、xmlファイルを作成し任意の場所に保存します。

<ruleset name="PSR12_Custom">
  <description>Customization PSR12 coding-conventions</description>
  <rule ref="PSR12">
    <exclude name="Generic.Files.LineLength.TooLong"/>
    <exclude name="PSR1.Classes.ClassDeclaration.MissingNamespace"/>
  </rule>
</ruleset>

rule ref="PSR12"で使用するルールを指定し、excludeでrefで指定したルールから除外するルールを指定します。 上記のxmlでは1行の文字数のチェックとClassのNamespaceチェックを外しています。

f:id:hide_san99:20200802195903p:plain

これをPhpStormのPHP_CodeSniffer validationで指定します。 Coding standardに「Custom」を選択します。そして...を押して上記で作成したカスタム用のxmlを指定します。

これで、プルダウンにPSR12_Customが出てくるはずだったのですが、、出てこず。。
一旦「適用」を押してPhpStormを再起動したところ、プルダウンに現れました。

プルダウンから作成したルール名を選択して、「適用」を押せば完了です。

まとめ

以上の設定でPSR12の規約に違反したコードを記述すれば、即座にエラーとして表示されるようになりました。 これでコーディング規約に沿った開発が捗りそうです。

次週は夏季休暇のため、次回の更新は8月19日(水)となります。