いつものtaanatsuです。
今回は、Laravelのアップグレードって大変だなーと思っていたらrector-laravelなるものを発見しました。
github.com
なので少し触ってみようと思います。
rector-laravelとは?
rector-laravelはrectorの拡張で、 rectorとはPHPのコードをアップグレードし、リファクタリングしてくれるもののようです。
なので、Laravelのアップグレードを補佐してくれるツールですね。
触ってみる
プロジェクトへのインストール
composerでプロジェクトに追加します。
このときに--dev
をつけて、本番には適応されないようにします。
$ composer require --dev driftingly/rector-laravel
定義ファイルの作成
rector.php
をプロジェクト内に作成します。
中身としては以下です。
<?php declare(strict_types=1); use Rector\Config\RectorConfig; use RectorLaravel\Set\LaravelLevelSetList; return static function (RectorConfig $rectorConfig): void { $rectorConfig->sets([ LaravelLevelSetList::UP_TO_LARAVEL_110, // Laravel11にアップデートするのでこの定数 ]); };
リファクタの実行
以下のようなコマンドを実行します。
$ vendor/bin/rector process ディレクトリ名
例えばappディレクトリ配下に適応する場合は以下になります。
$ vendor/bin/rector process app
実行すると解析が行われ、自動的にリファクタしてくれます。
vendor/bin/rector process app 79/79 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% 1 file with changes =================== 1) app/Models/User.php:39 ---------- begin diff ---------- @@ @@ /** * The attributes that should be cast. * - * @var array<string, string> + * @return array<string, string> */ - protected $casts = [ - 'email_verified_at' => 'datetime', - ]; + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + ]; + } } ----------- end diff ----------- Applied rules: * AddArgumentDefaultValueRector * ModelCastsPropertyToCastsMethodRector * StringToClassConstantRector [OK] 1 file has been changed by Rector
今回のPHPのコードはLaravelを利用しておりますが、
極力Laravelへの依存度を少なくする方針でコード書いているため、リファクタの範囲は既存のUser.phpだけでした。
SourceTreeで見てみると、リファクタが自動で実行され差分が出ていることもわかります。
このツールがどのくらい業務に耐えうるかはまだまだわかりませんが、少しずつ触っていこうと思いますので、また続報がありましたら更新いたします。
それでは今回はこのへんで。