HBソフトスタジオの中村です。
PHPには幾つかのソースコード解析ツールがあるのですが、今回はPHPStormにPHP_CodeSnifferを導入してみました。
PHP_CodeSniffer
PHP_CodeSnifferは、コーディング規約(PSRなど)に沿った構文チェックを行う事ができます。
このPHP_CodeSnifferでは下記の機能を持っています。
・定義されたコーディング規約の違反を検出する
・コーディング規約の違反を修正する
インストール
以下のcomposerコマンドをターミナルで叩いてインストールできます。
$ composer global require "squizlabs/php_codesniffer=*"
インストール後、下記のコマンドで使用可能なコーディング規約を確認できます。
$ phpcs -i
The installed coding standards are PEAR, Zend, PSR2, MySource, Squiz, PSR1 and PSR12
いくつか種類がありますが今回はPSR準拠で、PSR12を選択します。
※PSR12はPSR2を拡張されたものであり、併せてPSR1にも準拠する必要があります。
インストールしたパッケージの場所を下記のコマンドで確認します。
$ which phpcs
/Users/****/.composer/vendor/bin/phpcs
PHPStorm設定
Preferences を開きます。
続いて、Languages & Frameworks > PHP > Quality Tools を開きます。
PHP_CodeSnifferを開いて、Configurationの右にある「…」を選択します。
PHP_CodeSniffer pathには、インストールしたパッケージの場所にある「phpcs」を選択、Path to phpcbf には「phpcbf」を設定します。
Validate ボタンを押した時すと、一番下に「OK. PHP_CodeSniffer version …(省略」と表示されたら、OKボタンを押して画面を閉じましょう。
Preferences に戻ると PHP_CodeSniffer Inspection Is not enabled の表示がでているので選択します。
選択すると、Editor > Inspectionsの画面が開きます。
PHP Code Sniffer validationにチェックを入れ、Coding standardを「PSR12」を選択し、OKボタンを押して画面を閉じましょう。
※選択項目に何も表示されない場合は、隣にある丸い矢印の更新ボタンを押すと表示されます。
以上で設定は完了です。
確認してみよう
試しにPSR12に準拠していないPHPのコードをPHPStormで作成します。
・メソッド名はcamelCase記法で定義する必要があります。(PSR1)
・新しいクラスをインスタンス化するときは、コンストラクターに引数が渡されていない場合でも、括弧が常に存在している必要があります。(PSR12)
<?php
namespace codesuniffer;
class Abc
{
public function method_dummy()
{
return true;
}
}
$test = new Abc;
設定に問題がなければ赤い下線にカーソルを合わせると画像のようなメッセージが表示され、何に準拠してないかなど教えてくれるようになります。
また、このメッセージの下部にある「PHP Code Beautifer and Fixter …」 を押すと規約に準拠するように修正してくれます。
以上!