はじめに
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のフォーマットに修正してくれるようです
便利ですね!
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。