Unsplash의 Matteo del Piano 사진
계속 진화하는 PHP 개발 세계에서는 코드베이스를 깨끗하고 최신이며 효율적으로 유지하는 것이 중요합니다. 이것이 Rector PHP가 작동하는 곳입니다. Rector PHP를 사용하는 방법, 설치하는 방법 또는 Rector PHP가 정확히 무엇인지 궁금하신 경우 이 종합 가이드가 도움이 될 것입니다. 기본 사항을 안내하고, 자세한 Rector PHP 튜토리얼을 제공하며, PHP Rector에 대한 통찰력과 이를 효과적으로 사용하는 방법을 제공합니다. 이 기사를 마치면 Rector PHP에 대해 확실히 이해하고 이를 통해 개발 작업 흐름을 향상시키는 방법을 알게 될 것입니다.
Rector는 2020년에 시작되었지만 2024년에야 1.0 릴리스가 되었습니다. 코드 베이스의 정적 분석을 수행하는 명령줄 도구입니다. 해당 분석을 통해 변경 사항을 적용할 수 있습니다. 이에 대한 좋은 예는 코드 기반이 array() 호출로 가득 차 있는데 이것이 이제 오래된 관행으로 간주되어 이제 [] 짧은 배열 구문으로 대체된 경우입니다.
이를 대체하기 위해 코드 기반을 살펴보는 것은 지루한 작업입니다. 간단한 찾기 및 바꾸기 도구를 사용할 수 있지만 변경해서는 안 되는 문자열이나 주석 내부에 array()가 캡슐화되어 있다면 어떻게 될까요? 이제 교체된 모든 인스턴스를 확인해야 합니다.
이런 종류의 문제가 Rector의 뛰어난 점입니다. 대신 Rector는 코드를 보고 교체할 배열인지 확실히 알 수 있습니다.
PHP CS Fixer도 이 작업을 수행할 수 있다고 궁금해하실 수도 있는데 이는 사실입니다. 그러나 Rector는 구문 인식뿐만 아니라 유형 분석도 수행하기 위해 내부적으로 PHPStan을 사용하고 있습니다. 이는 Rector가 클래스에 특정 상위 클래스가 있는 경우, 변수가 특정 유형인 경우 또는 함수의 예상되는 반환 유형이 무엇인지 감지할 수 있음을 의미합니다. 코드베이스에 대량 변경을 적용할 수 있는 훨씬 더 넓은 범위를 제공합니다.
숙련된 PHP 개발자에게는 당연한 것처럼 보일 수 있지만 두 가지 기본 방법이 있으며 실제로 Rector를 어떻게 사용하려는지에 따라 다릅니다.
지속적인 통합의 일부로 Rector를 사용하려면 작곡가를 통해 프로젝트에 다른 Rector를 설치하는 것이 좋습니다.
composer require --dev rector/rector
그러나 업그레이드를 수행하기 위해 단일 또는 여러 프로젝트에서 Rector를 실험하려는 경우
를 사용하여 전역적으로 Rector를 설치하는 것이 더 나을 수 있습니다.
composer global require rector/rector
어떤 단계를 선택하든 다음 단계는 프로젝트의 루트 디렉터리에 구성을 만들고 업그레이드하려는 PHP 코드가 포함된 모든 폴더를 포함하는 것입니다. 물론 Vendor 폴더는 수정하고 싶지 않기 때문에 포함되지 않습니다.
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에는 종종 데드 코드(Dead Code) 또는 코드 품질(Code Quality)이라고 설명되는 일련의 규칙이 있으며, 이는 각각 코드를 제거하거나 향상 및 최적화합니다. 대부분의 시간 동안 작동한다고 확신할 수 있으므로 이러한 세트만 고수하는 것이 매우 유리합니다. 그러나 Rector가 코드를 작성하는 방식은 결코 완벽하지 않다는 점을 절대적으로 인식해야 합니다. 종종 규칙을 작성할 때 일반적인 시나리오를 다룰 수 있으며 코드 기반에서 찾을 수 있는 일부 상황을 놓칠 수도 있습니다. 이로 인해 코드가 손상될 수 있습니다.
Rector를 사용하려면 애플리케이션에 대한 테스트가 반드시 작성되어 있어야 합니다. 그들 없이는 Rector가 문제가 될 때까지 발견하지 못할 버그를 도입하게 될 수 있습니다.
Rector를 사용할 때 고려해야 할 또 다른 사항은 PHP CS Fixer와 같은 린팅 도구를 사용해야 한다는 것입니다. Rector는 공백, 메서드 호출과 인수 사이의 공백 및 개행 등을 확인하지 않습니다. Linting 도구를 사용하면 Rector가 수정 사항을 적용한 후 예상한 표준에 맞게 코드 형식을 유지해야 합니다.
이제 Rector를 설치하고 시험해 볼 준비가 되었습니다. 규칙을 하나 적용해 보겠습니다. 이전에 만든 구성 파일을 업데이트하는 것부터 시작해 보겠습니다.
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
모든 것이 성공했다면 이제 각 파일에 대한 모든 변경 사항의 차이점과 변경 사항을 적용한 규칙 목록이 포함된 출력이 표시됩니다. 우리 구성에는 하나의 규칙만 나열되므로 하나의 규칙만 적용되지만 더 많은 규칙이 추가되면 여기에 하나 이상의 목록이 표시됩니다.
이제 변경사항을 검토하고 규칙이 예상대로 작동하는지 확인할 수 있는 좋은 기회입니다. 만족스러우면 Rector를 다시 실행할 수 있습니다. 테스트 실행 플래그가 없으면 변경 사항이 파일에 기록됩니다.
rector
완료된 후에는 즐겨 사용하는 Linting 도구를 실행한 다음 테스트를 실행해야 합니다. 그게 다야. 이제 Rector를 사용했습니다.
Rector PHP는 코드 리팩토링을 자동화하고 코드베이스를 깔끔하고 현대적으로 유지함으로써 PHP 개발 워크플로우를 크게 향상시킬 수 있는 강력한 도구입니다. Rector PHP가 무엇인지 이해하고, 설치 방법을 배우고, 효과적으로 사용하는 방법을 익히면 해당 기능을 활용하여 코드 업데이트를 간소화하고, 코드 품질을 개선하고, 코드가 "레거시" 프로젝트처럼 느껴질 위험을 줄일 수 있습니다. Rector를 지속적인 통합 파이프라인에 통합하든 대규모 코드베이스 업그레이드에 사용하든 Rector는 높은 수준의 코드 우수성을 유지하려는 PHP 개발자에게 없어서는 안 될 자산입니다.
Rector에 대해 더 자세히 알고 싶다면 https://getrector.com/을 방문하는 것이 좋습니다.
저는 Laravel과 함께 일하고 있는 영국의 소프트웨어 개발자 Peter Fox입니다. 제 기사를 읽어주셔서 감사합니다. https://articles.peterfox.me에서 읽을 내용이 더 많이 있습니다. 저는 이제 GitHub에서도 후원을 받고 있습니다. 제가 이와 같은 기사를 더 많이 쓸 수 있도록 격려하고 싶다면 소액의 일회성 기부를 고려해 보시기 바랍니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3