【3分で終わる】とにかく簡単にphpのフォーマッターを導入する(PHP-CS-Fixer)


PHP-CS-Fixer

PSR-1、PSR-2などで定義されているPHPコーディング規約に整形してくれるツールです。

一番簡単な方法

ひとまずインストールします。

$ composer require --dev friendsofphp/php-cs-fixer

composer.jsonのscriptsに下記を記載します。
(ルールはお好みで)

{
    "scripts": {
        "fixer": [
            "vendor/bin/php-cs-fixer fix src --rules=@Symfony,@PhpCsFixer,@PHP80Migration,declare_strict_types --allow-risky=yes"
        ],
}

実行すると整形されます。

$ composer fixer
> vendor/bin/php-cs-fixer fix src --rules=@Symfony,@PhpCsFixer,@PHP80Migration,declare_strict_types --allow-risky=yes
Loaded config default.
Using cache file ".php-cs-fixer.cache".

Fixed all files in 0.056 seconds, 12.000 MB memory used

個人プロダクト以外や、除外するファイルが多いとちゃんと定義ファイルを書いたほうが良さそう。

$ echo /.php-cs-fixer.cache >> ./.gitignore

PHP-CS-Fixerは実行するとキャッシュファイルを生成するのでignoreするのをお忘れなく

フォーマットのルールについて

ルールの数はかなり多く、細かく設定するとかなり時間がかかりそう。

@Symfony @PhpCsFixerなどのメジャーなルールを設定すれば、PSRの規則通りになるので時間かけずにチャチャッと実行するのが良さそうだと思いました。

既存プロダクトに導入する際の注意点

全てのコードをフォーマットするととんでもないバグを生み出してしまったりするので、注意しましょう。
導入する際はフォーマット前とフォーマット後でASTの変更がないことを検証すると、挙動に変更がないことを証明できます。
(参考) 20 万行超のコードベースをテストせずにリファクタリングリリースした話