- GitHub - rectorphp/rector: Instant Upgrades and Automated Refactoring of any PHP 5.3+ code
- Instant Upgrades and Automated Refactoring of any PHP 5.3+ code - rectorphp/rector
AIが翻訳した投稿です。
durumis AIが要約した投稿
- PHPバージョンアップグレードツールであるRectorを活用して、PHP 5.3コードをPHP 7.4にマイグレーションする方法を紹介します。
- Composerでインストールした後、Rectorをプロジェクトにインストールし、rector.php設定ファイルでアップグレード対象のコードとPHPバージョンを指定します。
- 修正ルールの設定と実行により、コードを自動修正し、変更内容はGitで管理することで、安全にアップグレードを進めます。
韓国の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で確認する必要があります。