Laravelのアップデートを半自動化してくれる「rector-laravel」を使ってみる

執筆日: 更新日:
この記事の目次
chevron_right はじめに
chevron_right サンプル
chevron_right 使い方
chevron_right rector.phpの追加

はじめに

Laravelの新バージョンが出たとき、アップデートが大変ですよね。
結構破壊的変更出たりすると、もううわーーーってなります。
コンパイル言語でもないので、エラー検知も難しいですが、セキュリティ的にはアップデートをしていきたいです。
そんなときにrector-laravelというものが使えそうなので、試してみました。

そもそもrectorとは?

rector-laravelはrectorの拡張で、
rectorとはPHPのコードをアップグレードし、リファクタリングしてくれるもののようです。
CakePHPにもrectorが公式で用意されているようですね。

サンプル

コマンドを実行すると、以下のようにdiffを出しつつファイルをそのLaravelのバージョンに合わせてアップデートしてくれます。

1 file with changes
===================

1) app/Models/User.php:35

    ---------- begin diff ----------
@@ @@
     /**
      * The attributes that should be cast.
      *
-     * @var array<string, string>
+     * @return array<string, string>
      */
-    protected $casts = [
-        'email_verified_at' => 'datetime',
-        'password' => 'hashed',
-    ];
+    protected function casts(): array
+    {
+        return [
+            'email_verified_at' => 'datetime',
+            'password' => 'hashed',
+        ];
+    }
 }
    ----------- end diff -----------

使い方

ライブラリの追加

開発用のライブラリにdriftingly/rector-laravelを追加します

composer require --dev driftingly/rector-laravel

--devをつけることで、composer installをしたときにはvendorに追加されますが、
本番などで利用するcomposer install --no-devではvendorに追加されません。

rector.phpの追加

プロジェクトのroot(composer.jsonとかがある部分)に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にアップデートするのでこの定数
    ]);
};

このサンプルはLaravel11にアップデートするための設定ですが、
他のバージョンにアップデートしたときはvendor配下にあるRectorLaravel\Set\LaravelLevelSetListファイルを見てください。
定数がいっぱい書いてあるので、そちらを見つつ設定してください。

リファクタコマンドの実行

以下のコマンドを実行することで、リファクタしてくれます。

$ vendor/bin/rector process [updateしたいディレクトリ名]

$ vendor/bin/rector process app
$ vendor/bin/rector process bootstrap
$ vendor/bin/rector process config
$ vendor/bin/rector process database
$ vendor/bin/rector process public
$ vendor/bin/rector process resources
$ vendor/bin/rector process routes
$ vendor/bin/rector process tests

こんな感じで実行できます。
これでLaravel11のフォーマットに修正してくれるようです

便利ですね!

[PR] おすすめの本
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。