Laravelのアップデートを手助けしてくれる「rector-laravel」を使ってみる

いつものtaanatsuです。
今回は、Laravelのアップグレードって大変だなーと思っていたらrector-laravelなるものを発見しました。 github.com

なので少し触ってみようと思います。

rector-laravelとは?

rector-laravelはrectorの拡張で、 rectorとはPHPのコードをアップグレードし、リファクタリングしてくれるもののようです。

nnahito.com

なので、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で見てみると、リファクタが自動で実行され差分が出ていることもわかります。

このツールがどのくらい業務に耐えうるかはまだまだわかりませんが、少しずつ触っていこうと思いますので、また続報がありましたら更新いたします。
それでは今回はこのへんで。