TL;DR
- PHPで書かれたコードのコーディング規約にPSR-12を適用して開発してるよ!
- エディタの整形ルールの設定が漏れてて、気づいたら全然触ってないところまで整形されてdiffが読みづれえ...
- コード整形のルールをレポジトリ内に入れてPHP_CodeSnifferのコマンドで一発で整形できるようにした!
- IDE(PhpStorm)からもPHP_CodeSnifferを使うようにした
PHP_CodeSnifferとは?
PHP_CodeSnifferとは、コーディング規約(PSR-12など)に沿った構文チェックを行ったり、違反があったら自動で修正することが出来る静的解析ツールのことです。
composerでPHP_CodeSnifferを入れると、phpcs
とphpcbf
というコマンドが使えるようになるので、これらを使って違反をチェックしたり整形をします。
インストールしてルールを設定する
composer require --dev squizlabs/php_codesniffer
インストールが出来たら、composer.json
に以下のscriptsを入れておいて簡単に実行できるようにしておきましょう。
{
"scripts": {
"phpcs": "phpcs --standard=phpcs.xml",
"phpcbf": "phpcbf --standard=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.json
のscripts
にphpcs
とphpcbf
の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のサポートが入ってるので、いくつかの項目を設定するだけで使えるようになります。
JetBrains 公式マニュアル日本語版に設定方法は全て書いてあるので、手順に沿って設定を行えばかんたんに設定できます。
設定するとエディタ上からエラーが確認できるようになったり、表示されたエラーをPhpStormから直接修正することも出来るようになるのでやっておきましょう!