durumis AIが要約した文章
- PHP 5.3 から 8.2 までのコードを最新バージョンにアップグレードするツール Rector を紹介します。
- Rector は 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 を インストールします。
```bash composer require rector/rector --dev
3. 設定ファイルである rector.php を作成します。
rector.php 設定
理解を助けるために状況を設定します。
対象ソースコードは php5.3 コードで、アップグレード目標バージョンは php 7.4 と仮定して進めます。
Rector バージョンは 1.0.3 です。
```php <?php
use Rector\Config\RectorConfig; use Rector\Php54\Rector\Array_\LongArrayToShortArrayRector; use Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector;
return RectorConfig::configure() ->withPhpSets(php74: true) ->withParallel(1200, 8, 8) ->withPaths([ DIR . '/src', // ソースコード 경路 ]) ->withSkip([ Rector\Php73\Rector\ConstFetch\SensitiveConstantNameRector::class, Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::class, Rector\CodeQuality\Rector\If\SimplifyIfElseToTernaryRector::class, Rector\Php53\Rector\Ternary\TernaryToElvisRector::class, Rector\Php80\Rector\Class\ClassPropertyAssignToConstructorPromotionRector::class, Rector\Php80\Rector\FunctionLike\MixedTypeRector::class, Rector\CodeQuality\Rector\If\SimplifyIfNullableReturnRector::class, Rector\Php80\Rector\Switch\ChangeSwitchToMatchRector::class, Rector\Php74\Rector\Closure\ClosureToArrowFunctionRector::class, Rector\Php71\Rector\ClassConst\PublicConstantVisibilityRector::class, ]);
RectorConfig::config() は、ソースコードフォルダ、PHP バージョンの設定を行います。
withPhpSets 関数は、アップグレードしたい PHP 関数を設定します。
現在 rector を実行している php バージョンが php 8.0 の場合
```php ->withPhpSets(php74: true)
このように phpバージョン : true が設定できます。
ただし、実行中の PHP バージョンが php 7.4 以下の場合
関数には名前付きパラメーター構文を使用できないため、希望するバージョンが利用可能になったときに true を設定する必要があります。
rector は php 8.3 をサポートしているため、php 74 を指定するには次のようにします。
```php ->withPhpSets( false, // php 8.3 false, // php 8.2 false, // php 8.1 false, // php 8.0 false, // php 8.1 true // php 7.4 )
->withPaths([
__DIR__ , // rector.php があるディレクトリです。
])
```php
->withSkip([
Rector\Php73\Rector\ConstFetch\SensitiveConstantNameRector::class,
Rector\Php74\Rector\LNumber\AddLiteralSeparatorToNumberRector::class,
Rector\CodeQuality\Rector\If\SimplifyIfElseToTernaryRector::class,
Rector\Php53\Rector\Ternary\TernaryToElvisRector::class,
Rector\Php80\Rector\Class\ClassPropertyAssignToConstructorPromotionRector::class,
'/data/*',
])
適用したくないルールとフォルダを指定します。
フォルダは '/フォルダー名/*'
ファイルは 'ファイル名' です。
ルールに "SensitiveConstantNameRector" を追加しましたが、
rector は PHP 配列内に未定義インデックスがある場合、これを検出하지 못하고 상수로만 인식하여 잘못 바꾸려고 합니다. 그래서 제외 규칙에 추가합니다.
```php
AddLiteralSeparatorToNumberRector //array -> []
SimplifyIfElseToTernaryRector
TernaryToElvisRector
ClassPropertyAssignToConstructorPromotionRector
これらのルールはコーディングスタイルであるため除外します。
実行
2 通りあります。
```bash vendor/bin/rector --dry-run --memory-limit=2G
このコマンドを実行すると、変更する必要があるコードがコンソールに出力されます。
ソースコードが多いほど多くの RAM が必要になるため、--memory-limit=2G というオプションを使用してメモリ RAM を指定する必要があります。