私らの開発環境が最近やっと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}}}"
メルマガ購読の申し込みはこちらから。        
        