Unsplash のMatteo del Piano による写真
進化し続ける PHP 開発の世界では、コードベースをクリーン、最新、効率的に保つことが非常に重要です。ここで、Rector PHP が活躍します。 Rector PHP の使用方法、インストール方法、または Rector PHP とは何なのか知りたい場合は、この包括的なガイドが最適です。基本を説明し、詳細な Rector PHP チュートリアルを提供し、PHP Rector とそれを効果的に使用する方法についての洞察を提供します。この記事を読み終えるまでに、Rector PHP とそれが開発ワークフローをどのように強化できるかをしっかりと理解できるようになります。
Rector は 2020 年に開始されましたが、1.0 リリースは 2024 年にのみ行われました。これは、コード ベースの静的分析を実行するコマンド ライン ツールです。その分析に基づいて変更を適用できます。この良い例は、コード ベースが array() 呼び出しでいっぱいだったらどうなるかということでしょう。これは現在では古い手法とみなされており、現在では [] 短い配列構文に置き換えられています。
コードベースを調べてこれを置き換えるのは面倒です。単純な検索と置換ツールを使用することもできますが、文字列または変更すべきではないコメント内にカプセル化された array() があった場合はどうなるでしょうか?ここで、置き換えられたすべてのインスタンスを確認する必要があります。
この種の問題はレクターの得意分野です。代わりに、Rector はコードを見て、それが置き換えられる配列であるかどうかを明確に知ることができます。
PHP CS Fixer でもこれができるのではないかと疑問に思われるかもしれませんが、それは本当です。しかし、Rector には、構文を認識するだけでなく型も分析するために内部で動作する PHPStan も組み込まれています。これは、Rector が、クラスが特定の親クラスを持つとき、変数が特定の型であるとき、または関数の期待される戻り値の型を検出できることを意味します。コードベースに大量の変更を加えるためのはるかに大きな範囲が与えられます。
これは経験豊富な PHP 開発者にとっては明らかなことかもしれませんが、主に 2 つの方法があり、それは実際に Rector をどのように使用したいかによって異なります。
継続的インテグレーションの一部として Rector を使用したい場合は、composer を通じてプロジェクトに別の Rector をインストールするのが合理的です。
composer require --dev rector/rector
ただし、アップグレードを実行するために 1 つまたは複数のプロジェクトで Rector を試したい場合は、
を使用して Rector をグローバルにインストールする方が良いかもしれません。
composer global require rector/rector
どのステップを選択しても、次のステップでは、プロジェクトのルート ディレクトリに構成ファイルを作成し、アップグレードする PHP コードを含むすべてのフォルダーを含めます。もちろん、ベンダー フォルダーは変更したくないので、これには含まれません。
これは、たとえば Laravel プロジェクトの構成は次のようになります:
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true);
前のセクションと同様に、Rector の使用は、それをどのように使用したいかによって決定できます。レクターはルールの選択を通じて変更を適用します。これは PHP CS Fixer と同じです。これらのルールは、問題を検出し、解決するように設計された問題の修正を試みます。
継続的インテグレーション方式で Rector を使用したい場合は、すべてのコードを開発時に可能な限り最適化して使用したいため、特定のルール セットのみを使用する可能性があります。
Rector には、デッド コードまたはコード品質と呼ばれることが多い一連のルールがあり、それぞれコードを削除したり、強化および最適化したりします。これらのセットはほとんどの場合に機能すると確信できるため、これらのセットだけに固執することは非常に有利です。ただし、Rector のコードの書き方は決して完璧ではないことを絶対に認識しておく必要があります。多くの場合、ルールを作成する場合、そのルールは典型的なシナリオをカバーしており、コード ベースで見つかったいくつかの状況を見逃している可能性があります。これにより、コードが壊れる可能性があります。
Rector を使用したい場合は、アプリケーション用にテストを作成する必要があります。これらがなければ、Rector は問題になるまで発見できないバグを簡単に導入してしまう可能性があります。
Rector を使用するときに考慮すべきもう 1 つのことは、PHP CS Fixer のような lint ツールを使用する必要があるということです。 Rector は空白、メソッド呼び出し間のスペース、改行、引数などを考慮しません。lint ツールを使用すると、Rector が修正を適用した後、コードの書式設定が期待される標準に保たれるはずです。
これで Rector がインストールされ、試す準備ができました。1 つのルールを適用してみましょう。先ほど作成した設定ファイルを更新することから始めましょう。
use Rector\Config\RectorConfig; use Rector\Php71\Rector\List_\ListToArrayDestructRector; return RectorConfig::configure() ->withPaths([__DIR__. '/config', __DIR__. '/src', __DIR__. '/tests', __DIR__. '/routes']) ->withImportNames(removeUnusedImports: true) ->withRules([ ListToArrayDestructRector::class, ]);
この構成の場合、リストの使用を置き換えて、代わりに配列の再構築を使用します。予想される変更は次のようなものです:
-list($a, $b) = ['a', 'b']; [$a, $b] = ['a', 'b'];
これで、Rector のドライランを実行して、この構成をテストできます。
rector --dry-run
すべてが成功すると、各ファイルに対するすべての変更の差分と、変更を行ったルールのリストを含む出力が表示されます。私たちの構成には 1 つのルールのみがリストされているため、適用されるルールは 1 つだけですが、さらにルールを追加すると、ここに 1 つ以上のリストが表示されます。
これは、変更をレビューし、ルールが期待どおりに動作していることを確認するのに最適な機会です。問題がなければ、Rector を再度実行できます。ドライ ラン フラグを指定しない場合、変更はファイルに書き込まれます。
rector
完了したら、お気に入りの lint ツールを実行してからテストを実行する必要があります。それでおしまい。今では、Rector を使用しています。
Rector PHP は、コードのリファクタリングを自動化し、コードベースをクリーンで最新の状態に保つことで、PHP 開発ワークフローを大幅に強化できる強力なツールです。 Rector PHP とは何かを理解し、インストール方法を学習し、効果的な使用方法を習得することで、その機能を活用してコードの更新を合理化し、コードの品質を向上させ、コードが「レガシー」プロジェクトのように感じられるリスクを軽減できます。 Rector を継続的インテグレーション パイプラインに統合する場合でも、大規模なコードベースのアップグレードに使用する場合でも、Rector は高水準の優れたコードを維持したいと考えている PHP 開発者にとって不可欠な資産です。
Rector についてさらに詳しく知りたい場合は、https://getrector.com/.
にアクセスすることをお勧めします。私は Peter Fox です。英国のソフトウェア開発者で、Laravel を使用しています。私の記事をお読みいただきありがとうございます。https://articles.peterfox.me には他にも読みたいものがたくさんあります。私は現在、GitHub のスポンサーにもなっています。このような記事をもっと書くよう私に勧めたい場合は、少額の 1 回限りの寄付を検討してください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3