私らの開発環境が最近やっとphp 8.0となりましたので、Laravel Pint(ピント)なるものを使ってみました。正式にLaravelの開発チームから登場したコードスタイル整形のツールですが、なんのことはない、Larajapanでも以前から数回紹介したphp-cs-fixerを土台にしたLaravel版です。しかし、より簡単になりました。
以前に紹介したのは、「コードスタイルを統一するツール」です。ここでも、同様な醜い(Ugly Class)のコードを用意して、Laravel Pintを紹介しましょう。
インストール
Laravelのプロジェクトのルートのディレクトリにおいて、以下を実行します。
$ composer require laravel/pint --dev
開発環境でしか必要ないので、最後の引数–devは忘れないように。
実行
実行もいたって簡単です。php-cs-fixerと違って、コード整形のためのルールの設定はまったく要りません。完全にLaravel用にデフォルト設定になっています。
$ ./vendor/bin/pint ...................................................... ───────────────────────────────────────────────────────────────── Laravel PASS ....................................................... 54 files
もちろん、何も変えてないのでエラーはゼロでPASSです。
今度は、前回作成したUglyクラスのファイルを追加して、
namespace App\Models; use Log; use Illuminate\Database\Eloquent\Model; use DB; class Ugly extends Model { public function test ($x, $y) { if ($x == 1) { // } else if ($y == 2) { /* */ } } }
再度実行すると、
$ ./vendor/bin/pint .....................................................✓. ───────────────────────────────────────────────────────────────── Laravel FIXED ................................. 55 files, 1 style issue fixed ✓ app/Models/Ugly.php indentation_type, elseif, braces, function_declara…
しっかり、修正(FIXED)されて、
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Ugly extends Model { public function test($x, $y) { if ($x == 1) { // } elseif ($y == 2) { /* */ } } }
綺麗に整形されました。
カスタム設定
Laravel Pintは、デフォルトで完全にLaravelのコードスタイルとしてくれます。しかし、ちょっとだけ私がカスタマイズしたい部分があります。
コードにおけるオブジェクトの表示です。私は以下のように、=>
で項目を揃えたいのです。
protected $rules = [ 'cost' => 'required|integer|min:0', 'cost_ship' => 'required|integer|min:0', 'cost_other' => 'required|integer|min:0', 'commission' => 'required|numeric|min:0', ];
しかし、これをpintで実行すると、
protected $rules = [ 'cost' => 'required|integer|min:0', 'cost_ship' => 'required|integer|min:0', 'cost_other' => 'required|integer|min:0', 'commission' => 'required|numeric|min:0', ];
となってしまいます。もちろんそれがLaravelのデフォルトのスタイルなのですが。
これを強制しないようにするには、設定ファイルが必要となります。以下のファイル(pint.json)をプロジェクトのルートディレクトリに置きます。
{ "preset": "laravel", "rules": { "binary_operator_spaces":{"default":"single_space","operators":{"=>":null}} }, "exclude": [ "bootstrap", "src" ] }
上のrulesのルールは、以下のphp-cs-fixerで使用するものと同じです。
https://mlocati.github.io/php-cs-fixer-configurator/#version:3.11|fixer:binary_operator_spaces
しかし、そこでの設定はphpの配列となります。以下のように。
'binary_operator_spaces' => [ 'default' => 'single_space', 'operators' => ['=>' => null], ],
pintツールは、phpなのになぜか設定ファイルはjsonフォーマットです。ということで、tinkerで以下のように変換して、pint.jsonに入れる必要あります。
>>> json_encode(['binary_operator_spaces' => [ 'default' => 'single_space', 'operators' => ['=>' => null], ]]); => "{"binary_operator_spaces":{"default":"single_space","operators":{"=>":null}}}"メルマガ購読の申し込みはこちらから。