ゆずめも

メモ的なブログです。主に勉強した事について書いてます。

php-cs-fixerで設定ファイルをフォーマットする

最近仕事でPHP × Laravelを書くことを迫られてて、普段phpの情報は追ってないので環境を整えることから始めている。
とりあえずフォーマット頑張るのアホらしいのでjavascriptでいうpretteir的なものを求めて探しているとphp-cs-fixerというものに出会った。

github.com

結論だけ知りたい方は最後まで飛ばしてください

導入

公式見てもよくわからなかったのでこちらのqiita記事を参考にして導入した。 記事を参考にコマンド等ポチポチしてるとハマることなくインストールできた。

qiita.com

本題

参考にした記事でほとんどのファイルをフォーマットできたが設定ファイルの.php-cs-fixer.dist.phpがフォーマットされないな〜と思って inの部分の記述を参考に以下のものを記述したがうまく動かずappendメソッドを見つけたのでそっちでやっても動かなかった。

<?php
// inメソッドはディレクトリを指定するものでファイルの指定はできないっぽい
$finder = PhpCsFixer\Finder::create()
    ->in([
        // 省略
        __DIR__.'/.php-cs-fixer.dist.php'
    ])


// これも動かない
$finder = PhpCsFixer\Finder::create()
    ->in([
        // 省略
    ])
    ->append([
        __DIR__.'/.php-cs-fixer.dist.php'
    ])

解決策

仕方がないのでリポジトリを見に行くと、設定ファイルが置いてあり、そこに理由と解決策が書いていた*1

__DIR__.'/php-cs-fixer', disabled, as we want to be able to run bootstrap file even on lower PHP version, to show nice message

らしく、以下のような指定でフォーマットすることができた

<?php
$finder = PhpCsFixer\Finder::create()
    ->in([
        // 省略
    ])
    ->append([
        __FILE__
    ])

最終的に

ルールがよくわからんのでphp-cs-fixerが用意してるっぽいのとimportのorderだけ並び変える設定を入れた

<?php

declare(strict_types=1);

$finder = PhpCsFixer\Finder::create()
    ->in([
        __DIR__.'/app',
        __DIR__.'/config',
        __DIR__.'/database/factories',
        __DIR__.'/database/seeders',
        __DIR__.'/routes',
        __DIR__.'/tests',
    ])
    ->append([
        __FILE__,
    ])
;

$config = new PhpCsFixer\Config();

return $config
    ->setRiskyAllowed(true)
    ->setRules([
        '@PhpCsFixer' => true,
        '@PhpCsFixer:risky' => true,
        'ordered_imports' => ['sort_algorithm' => 'alpha', 'imports_order' => ['const', 'class', 'function']],
    ])
    ->setFinder($finder)
;