PHP_CodeSnifferで最強のPHPのコード整形を手に入れる


TL;DR

  • PHPで書かれたコードのコーディング規約にPSR-12を適用して開発してるよ!
  • エディタの整形ルールの設定が漏れてて、気づいたら全然触ってないところまで整形されてdiffが読みづれえ...
  • コード整形のルールをレポジトリ内に入れてPHP_CodeSnifferのコマンドで一発で整形できるようにした!
  • IDE(PhpStorm)からもPHP_CodeSnifferを使うようにした

PHP_CodeSnifferとは?

PHP_CodeSnifferとは、コーディング規約(PSR-12など)に沿った構文チェックを行ったり、違反があったら自動で修正することが出来る静的解析ツールのことです。

squizlabs/php_codesniffer

composerでPHP_CodeSnifferを入れると、phpcsphpcbfというコマンドが使えるようになるので、これらを使って違反をチェックしたり整形をします。

インストールしてルールを設定する

composer require --dev squizlabs/php_codesniffer

インストールが出来たら、composer.jsonに以下のscriptsを入れておいて簡単に実行できるようにしておきましょう。

composer.json
{
  "scripts": {
    "phpcs": "phpcs --standard=phpcs.xml",
    "phpcbf": "phpcbf --standard=phpcs.xml"
  }
}
phpcs.xml
<?xml version="1.0"?>
<ruleset name="example">
    <arg value="p"/>
    <arg name="colors"/>
    <arg value="s"/>
    <!-- PSR12 Standard -->
    <rule ref="PSR12"/>
    <!-- src/ と test/ を検査する -->
    <file>src/</file>
    <file>test/</file>
</ruleset>

プロジェクトの構成に応じて設定を phpcs.xml に入れておきます。
今回はPSR12を使いましたが、他にも使えるコーディング規約は色々あるので、プロジェクトに合ったものを設定しましょう。

整形してみる

今回はcomposer.jsonscriptsphpcsphpcbfの2つを定義しておいたので、以下のように実行してみてコードに違反がないかチェックしてみましょう。

$ composer phpcs
> phpcs --standard=phpcs.xml
..E.................................... 39 / 39 (100%)

FILE: /work/code/src/DI/Container.php
-------------------------------------------------------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 3 LINES
-------------------------------------------------------------------------------------------------------------------
 1 | ERROR | [x] Header blocks must be separated by a single blank line
   |       |     (PSR12.Files.FileHeader.SpacingAfterBlock)
 2 | ERROR | [x] Header blocks must be separated by a single blank line
   |       |     (PSR12.Files.FileHeader.SpacingAfterBlock)
 3 | ERROR | [x] Header blocks must be separated by a single blank line
   |       |     (PSR12.Files.FileHeader.SpacingAfterBlock)
-------------------------------------------------------------------------------------------------------------------
PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-------------------------------------------------------------------------------------------------------------------

Time: 235ms; Memory: 8MB

違反があればこのように、どこに違反があるのか表示してくれます。

また、違反があったときもphpcbfで簡単に修正できます。

$ composer phpcbf
> phpcbf --standard=phpcs.xml
..F.................................... 39 / 39 (100%)

PHPCBF RESULT SUMMARY
----------------------------------------------------------------------
FILE                                                  FIXED  REMAINING
----------------------------------------------------------------------
/work/code/src/DI/Container.php                       3      0
----------------------------------------------------------------------
A TOTAL OF 3 ERRORS WERE FIXED IN 1 FILE
----------------------------------------------------------------------

Time: 272ms; Memory: 8MB

便利ですね。

PhpStormからも使えるようにする

PhpStormには最初からPHP_CodeSnifferのサポートが入ってるので、いくつかの項目を設定するだけで使えるようになります。

PHP_CodeSniffer | PhpStorm

JetBrains 公式マニュアル日本語版に設定方法は全て書いてあるので、手順に沿って設定を行えばかんたんに設定できます。

設定するとエディタ上からエラーが確認できるようになったり、表示されたエラーをPhpStormから直接修正することも出来るようになるのでやっておきましょう!