목차

워드프레스 사용하면서 플러그인의 코딩 스타일을 PhpStorm 에 맡기는 편이다. 그러다보니 너무 IDE에 의존하는 것이 아닌가 싶다. 공통적인 스타일 통일이 필요하다 생각하여 PhpCS를 스터디한 결과를 적는다.

PHP Code Sniffer

코드를 검사하여 지정한 규격대로 작성되었는지 검사한다.

설치

wget이나 curl을 이용해 글로벌로 설치 가능하다. 아래 참고문서에서 github 의 가이드를 따라 설치하면 된다.

phpcs.xml 예시

아래는 간단한 phpcs.xml 예시이다. 플러그인에 맞춰 적절히 작성했다. 주석을 참고하여 적절히 설정을 가감한다. 괜찮은 설정이 있다면 업데이트 바람.

<?xml version="1.0"?>
<ruleset name="WordPress Site Utilities Ruleset">
    <!-- What to scan -->
    <file>.</file>
    <exclude-pattern>/vendor/</exclude-pattern>
    <exclude-pattern>/node_modules/</exclude-pattern>
 
    <!-- How to scan -->
    <!-- Usage instructions: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Usage -->
    <!-- Annotated ruleset: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml -->
    <arg value="sp"/> <!-- Show sniff and progress -->
    <arg name="basepath" value="./"/><!-- Strip the file paths down to the relevant bit -->
    <arg name="colors"/>
    <arg name="extensions" value="php"/>
    <arg name="parallel" value="8"/><!-- Enables parallel processing when available for faster results. -->
 
    <!-- Rules: Check PHP version compatibility -->
    <!-- https://github.com/PHPCompatibility/PHPCompatibility#sniffing-your-code-for-compatibility-with-specific-php-versions -->
    <config name="testVersion" value="5.6-"/>
 
    <!-- https://github.com/PHPCompatibility/PHPCompatibilityWP -->
    <rule ref="PHPCompatibilityWP"/>
 
    <!-- Rules: WordPress Coding Standards -->
    <!-- https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards -->
    <!-- https://github.com/WordPress-Coding-Standards/WordPress-Coding-Standards/wiki/Customizable-sniff-properties -->
    <config name="minimum_supported_wp_version" value="5.2"/>
    <rule ref="WordPress"/>
    <rule ref="WordPress.NamingConventions.PrefixAllGlobals">
        <properties>
            <!-- Value: replace the function, class, and variable prefixes used. Separate multiple prefixes with a comma. -->
            <property name="prefixes" type="array" value="wpsu"/>
        </properties>
    </rule>
    <rule ref="WordPress.WP.I18n">
        <properties>
            <!-- Value: replace the text domain used. -->
            <property name="text_domain" type="array" value="wpsu"/>
        </properties>
    </rule>
    <rule ref="WordPress.WhiteSpace.ControlStructureSpacing">
        <properties>
            <property name="blank_line_check" value="true"/>
        </properties>
    </rule>
</ruleset>

플러그인 composer.json 예시

위 xml 문서 중 rule ref 속성이 있음을 발견할 수 있다. 이것들은 모두 스니퍼에서 읽어들일 수 있는 외부 규칙 세트들을 언급한 것이며 스니퍼가 인식할 수 있어야 한다.

그러나 이런 규칙들은 스니퍼의 일부분이 아니기 때문에 별도로 설치하고 인식시켜 주어야 한다. 규칙 세트는 주로 composer를 활용하여 작성 가능하다.

위 예제에서 사용된 규칙은 PHPCompatibilityWP, WordPress 이다. 이 둘은 다음 명령어로 설정 가능하다.

composer.phar require --dev phpcompatibility/phpcompatibility-wp wp-coding-standards/wpcs dealerdirect/phpcodesniffer-composer-installer

얼마정도 시간이 흐르고 나면 vendor 디렉토리에 의존성이 설치된다.

phpcs 룰셋 인식시키기

룰을 설치하고 난 다음에는 스니퍼가 정확히 해당 룰셋의 경로를 인식해야 한다. 세번째에 언급된 dealerdirect/phpcodesniffer-composer-installer를 설정하면 자동으로 인식이 된다.

만약 사용하지 않고 수동으로 인식해야 한다면, 다음 설정을 composer.json 에다 넣어 주어야 한다.

"scripts": {
    "post-install-cmd": "\"vendor/bin/phpcs\" --config-set installed_paths vendor/phpcompatibility/php-compatibility,vendor/phpcompatibility/phpcompatibility-paragonie,vendor/phpcompatibility/phpcompatibility-wp,vendor/wp-coding-standards/wpcs/WordPress,vendor/wp-coding-standards/wpcs/WordPress-Core,vendor/wp-coding-standards/wpcs/WordPress-Docs,,vendor/wp-coding-standards/wpcs/WordPress-Extra",
    "post-update-cmd" : "\"vendor/bin/phpcs\" --config-set installed_paths vendor/phpcompatibility/php-compatibility,vendor/phpcompatibility/phpcompatibility-paragonie,vendor/phpcompatibility/phpcompatibility-wp,vendor/wp-coding-standards/wpcs/WordPress,vendor/wp-coding-standards/wpcs/WordPress-Core,vendor/wp-coding-standards/wpcs/WordPress-Docs,,vendor/wp-coding-standards/wpcs/WordPress-Extra"
  }

그냥 간단하게 패키지를 설치하는 것을 추천한다. 이렇게 되면 다음처럼 인식이 된다. 주의할 점은 composer로 설치된 phpcs 에만 설정이 먹힌다. 글로벌로 잡힌 phpcs와는 결과가 다를 것이다.

$ ./vendor/bin/phpcs -i
The installed coding standards are Squiz, PSR2, PSR12, MySource, PEAR, PSR1, Zend, PHPCompatibility, PHPCompatibilityParagonieSodiumCompat, PHPCompatibilityParagonieRandomCompat, PHPCompatibilityWP, WordPress, WordPress-Core, WordPress-Docs and WordPress-Extra

PHPStorm

  1. Settings > Languages&Frameworks > PHP > Quality Tools > Code Sniffer 에서 설정을 맞춘다.
  2. Settings > Editor > Inspections > PHP > Quality Tools > PHP Code Sniffer validation 체크
  3. Coding Standard를 custom으로 맞추고 설정한 phpcs.xml 파일을 인식시켜주면 IDE 화면에서 검사 결과를 바로 보여줌

참고 문서