概要
下記記事を読んでRector素敵!かっこいい!ってなったので実際に使ってみました!
導入
前提環境
Composer version 2.5.1
Laravel Framework 9.48.0
公式のDocs通りコマンド実行する。
composer require rector/rector --dev
rector.phpを生成
vendor/bin/rector
rector.phpにディレクトリパスとルールを指定する
<?php
declare(strict_types=1);
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;
use Rector\Set\ValueObject\SetList;
return static function (RectorConfig $rectorConfig): void {
// ルールを適用したいディレクトリを指定する
$rectorConfig->paths([
__DIR__ . '/app',
]);
// ここに適用したいルールを記述する
$rectorConfig->sets([
LevelSetList::UP_TO_PHP_82,
SetList::CODE_QUALITY
]);
};
実行コマンドを打つと、指定したルール通りに、該当ディレクトリ以下のソースコードを変更してくれる!
vendor/bin/rector process
ざっくりどんなことができるのか?
公式ドキュメント読むとわかりやすいので詳しくはそっちを読んでほしい。
私がすごいと思ったのはこの辺りだ。
Tips
Tips1
- RuleSetの一部ルールのみ適用することも可能
例えばDEAD_CODEルールのソースコードを読んでいると、たくさんのRectorクラスが適用されていることがわかる
このRectorクラスの中から一部のルールのみを適用することもできるので、かなりカスタマイズできる!
<?php
declare(strict_types=1);
// use 宣言は省略
return static function (RectorConfig $rectorConfig): void {
// ルールを適用したいディレクトリを指定する
$rectorConfig->paths([
__DIR__ . '/app',
]);
// ここに適用したいルールを記述する
$rectorConfig->rules([
UnwrapFutureCompatibleIfPhpVersionRector::class,
RecastingRemovalRector::class,
RemoveDeadStmtRector::class,
RemoveDuplicatedArrayKeyRector::class,
RemoveUnusedForeachKeyRector::class,
RemoveParentCallWithoutParentRector::class,
RemoveEmptyClassMethodRector::class,
RemoveDoubleAssignRector::class,
SimplifyMirrorAssignRector::class,
RemoveUnusedPrivatePropertyRector::class,
RemoveUnusedPrivateClassConstantRector::class,
RemoveUnusedPrivateMethodRector::class,
RemoveDeadReturnRector::class,
RemoveDeadContinueRector::class,
RemoveDeadIfForeachForRector::class,
RemoveAndTrueRector::class,
RemoveConcatAutocastRector::class,
SimplifyUselessVariableRector::class,
RemoveDuplicatedCaseInSwitchRector::class,
RemoveNullPropertyInitializationRector::class,
RemoveUnreachableStatementRector::class,
SimplifyIfElseWithSameContentRector::class,
TernaryToBooleanOrFalseToBooleanAndRector::class,
RemoveDeadTryCatchRector::class,
RemoveUnusedVariableAssignRector::class,
RemoveUnusedNonEmptyArrayBeforeForeachRector::class,
RemoveDeadConditionAboveReturnRector::class,
RemoveUnusedConstructorParamRector::class,
RemoveDeadInstanceOfRector::class,
RemoveTypedPropertyDeadInstanceOfRector::class,
RemoveDeadLoopRector::class,
RemoveUnusedPrivateMethodParameterRector::class,
// docblock
RemoveUselessParamTagRector::class,
RemoveUselessReturnTagRector::class,
RemoveNonExistingVarAnnotationRector::class,
RemoveUselessVarTagRector::class,
RemoveUnusedPromotedPropertyRector::class,
RemoveJustPropertyFetchForAssignRector::class,
RemoveAlwaysTrueIfConditionRector::class,
RemoveDeadZeroAndOneOperationRector::class,
RemovePhpVersionIdCheckRector::class,
]);
};
Tips2
細かいルールどこで確認すれば良いのよ!って思うかもしれないがソースコード読むとわかりやすくSAMPLEが書いてある!
RemoveDoubleAssignRectorクラスを見てみる。
SAMPLE見る限り、重複している変数宣言があった場合に、重複を取り除いてくれるんだなとわかる。
まとめ
Rectorとても便利なライブラリで、夢中で調べてしまった!
CIに組み込むなどすることで、自動でコード整形してくれるようになるなど応用的な使い方も紹介されているので、有効利用していきたいところだ!