초록 기린

PHPバージョンアップグレードツールRectorの紹介

作成: 2024-03-24

作成: 2024-03-24 23:17

韓国のPHP CMSであるグヌボード5のサイトを見ていたら、PHPのバージョンのアップグレード後にサポートが終了した文法とバージョンで

苦労しているという投稿がいくつかありました。そこで探していたら…

redditで、rectorというツールを使えばマイグレーションを助けてくれるというのを見つけたので、使い方を紹介します。



PHP 7.0がリリースされた2015年以降、PHPのマイグレーションツールが登場しました。php cs-fixer、rectorなどです。

rectorの方が使い勝手が良いようです。

rector(発音:レクター)は、PHP 5.3~8.2のコードを、希望するバージョンに合わせて文法チェックを行い、修正してくれます。


残念なことに、rectorは静的解析ツールなので、ランタイムに発生するエラーは検出できません。



Rectorは、PHPのパッケージ管理ツールであるComposerがインストールされている必要があります。

1. Composerをインストールします。

2. 現在のプロジェクトフォルダにrectorをインストールします。

3. 設定ファイルであるrector.phpを作成します。



rector.phpの設定

理解を助けるために、状況を設定します。

対象のソースコードはPHP5.3のコードで、アップグレードの目標バージョンはPHP 7.4と仮定して進めます。

Rectorのバージョンは1.0.3です。


RectorConfig::config()は、ソースコードのフォルダ、PHPのバージョンの設定を行います。

withPhpSets関数は、アップグレードしようとしているPHP関数を設定します。


現在、rectorを実行しているPHPのバージョンがPHP 8.0の場合


このように、PHPバージョン:trueとすることができます。

しかし、実行中のPHPのバージョンがPHP 7.4以下の場合


関数に名前付きパラメータの文法を使用できないため、希望するバージョンが出力されたときにtrueを設定する必要があります。

rectorはPHP 8.3をサポートしているので、PHP 7.4を指定するには、下記のようになります。


->withPaths([
__DIR__ , // rector.phpのあるディレクトリです。
])



適用したくないルールとフォルダを指定します。

フォルダは'/フォルダ名/*'

ファイルは'ファイル名'です。


ルールは"SensitiveConstantNameRector"を追加したのですが

rectorはPHPの配列でundefined indexがある場合、これを検出せず、定数として認識してしまい、誤って変更しようとしてしまいます。そのため、除外ルールに追加します。

これらのルールはコードスタイルなので、除外します。


実行する

2つの方法があります。

このコマンドは、変更する必要があるコードをコンソールに出力するだけです。

ソースコードが多いほどRAMを多く必要とするため、--memory-limit=2Gというオプションで使用するRAMを指定する必要があります。


このコマンドは、ソースコードを直接修正します。

オプションが多いため、意図しないオプションが適用されている可能性があるため、gitで確認する必要があります。



コメント0