最近仕事でPHP × Laravelを書くことを迫られてて、普段phpの情報は追ってないので環境を整えることから始めている。
とりあえずフォーマット頑張るのアホらしいのでjavascriptでいうpretteir的なものを求めて探しているとphp-cs-fixerというものに出会った。
結論だけ知りたい方は最後まで飛ばしてください
導入
公式見てもよくわからなかったのでこちらのqiita記事を参考にして導入した。 記事を参考にコマンド等ポチポチしてるとハマることなくインストールできた。
本題
参考にした記事でほとんどのファイルをフォーマットできたが設定ファイルの.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) ;