Child pages
  • StyleCI 로 PHP 코딩 스타일 교정하기

Contents


TL;DR

StyleCI 는 웹 기반의 코딩 스타일 교정 서비스로 github 에 push 가 일어나면 정해진 coding style 에 맞는지 자동으로 검사 및 교정해 줍니다.


프로젝트 설정

  1. https://styleci.io 에 회원 가입후 Profile → Repository 에서 github 동기화를 클릭해서 OAuth app 으로 등록합니다.

  2. 설정 파일인 .styleci.yml 를 프로젝트 루트에 작성합니다.

     Click here to expand...

  3. 커밋후 푸시합니다.

사용

  1. ProfileRepository 에서 styleci 를 적용할 project 에서의 Enable StyleCI 클릭합니다.

  2. 버튼이 Show Analyses 로 변경되면 클릭합니다.

  3. 좌측에서 분석할 브랜치를 선택하고 Analyze Now 클릭하면 정해진 규칙에 따라 소스를 분석합니다.
  4. 룰에 어긋나는 부분이 있으면 위와 같이 Failed 메시지가 표시됩니다.

PR로 스타일 교정하기

실패한 커밋을 styleCI 가 수정한 후에 저장소로 Pull Request 로 보내서 반영할 수 있습니다.


  1. 실패한 커밋 옆의 Show details 버튼을 클릭합니다.

  2. 상단의 Create Fix PR 버튼을 클릭하면 버튼이 Process 으로 변경되며 PR 을 작성합니다.

  3. 작성이 완료되면 버튼이 View Fix PR 로 변경되며 클릭하면 github 의 PR 로 연결됩니다.

  4. PR 로 온 내용을 merge 해서 저장소에 반영합니다.

개요

프로젝트 수행시 코딩 스타일을 규격화하는 것은 소스 가독성을 높이고 실수를 줄이기 위해 필요한 절차입니다.


하지만 개발자마다 각자의 스타일이 있으므로 코딩 스타일 표준화는 이견이 많이 발생하는 일이며 자율성을 침해한다고 반발하기도 하며 심지어 탭을 몇 칸으로 할지를 두고 불꽃 튀는 설전이 벌어지기도 합니다.

(Linux kernel 은 탭으로 8칸을 사용하는데 복잡한 if/else 구문을 제한하는데 효과가 있다고 합니다.)


PHP 의 경우 커뮤니티 표준인 PSR(PHP Standard Recommendation) 에서 PSR-1 와 PSR-2 라는 규약을 통해 표준 코딩 스타일을 제시하고 있습니다.


제 경우에는 PSR 1,2 의 자세한 규약을 못 외워서 실제 코딩을 하면 PSR 규약에 어긋난 코드를 작성할 때가 많습니다.


하지만 가득이나 익히고 배워야 할게 많은 이때 코딩 표준 스타일을 시간을 투자하며 배우고 싶진 않지만 가독성을 위해 규약을 지키는게 좋으니 이런 부분은 도구를 사용하여 처리하는 좋다고 생각합니다.


PHP 의 코딩 스타일을 교정해 주는 다양한 도구가 있고 PC 에서 적당한 도구로는 Symfony 프레임워크를 만든 Sensio labs 에서 만든 php-cs-fixer 같은 도구를 사용해서 커밋전에 이 도구로 PSR 1,2 여부를 검사하고 push 를 하면 됩니다.


StyleCI 는 웹 기반의 코딩 스타일 교정 서비스로 github 계정과 연동하여 push 가 발생하면 자동으로 정해진 규칙에 맞게 코딩했는지를 검사해 주고 교정해 줍니다. 


가격 정책은 공개 저장소는 무료이지만 Private 저장소를 사용할 경우 비용을 지불해야 합니다.


Fixer

StyleCI 에 포함된 룰에 맞게 소스를 수정하는 로직으로 사전 정의된 다양한 fixer 를 제공하고 있으며 활성화하려면 설정 파일의 enable: 에 fixer 이름을 기술해 주면 됩니다.

preset: laravel

disabled:
    #  - self_accessor

enabled:
  - encoding
  - elseif
  - mb_str_functions

예로 encoding fixer 는 PSR 에 정의된 대로 UTF-8 BOM 인코딩으로 소스를 수정해 줍니다.


fixer 중에 코드의 행동을 변경하여 사이드 이펙트가 발생할 수 있는 fixer 가 있으니 주의 깊게 사용해야 하지만 개인적으로는 아래의 fixer 들은 버그의 여지가 있는 코드를 개선해 주므로 적용하기를 권장합니다. 

이런 fixer 를 risky 라고 하며 enabled: 항목에 risky 를 기술해 주어야 제대로 동작합니다.

enabled:
  - risky
  - mb_str_function


mb_str_functions

일반적인 string 함수는 UTF8 일 경우 의도대로 작동하지 않으므로(예: 한글에 대해 strlen() 할 경우 EUCKR 은 2, UTF-8 은 3이 나옵니다.)  mb_str* 을 사용하는 습관을 들이는게 좋습니다.

이 fixer 를 사용하면 str* 함수를 mb_str* 로 변경해 줍니다.


section-no_homoglyph_names

PHP 개발자를 괴롭히려면 알파벳과 비슷한 호모글리프 문자를 PHP 소스 코드의 변수명에 삽입해 놓으면 된다는 농담이 있습니다.

이 fixer 를 사용하면 알파벳이 아닌 문자를 치환해줍니다.


non_printable_character

폭 없는 공백 같이 소스 코드에서는 표시되지 않는 특수 문자를 제거해 줍니다.


그외에도 다양한 risky fixer 가 있으니 필요에 맞게 취사 선택하면 됩니다.

Preset

사용하기 편리하도록 다양한 fixer 를 묶어서 preset 으로 제공하고 있으며 사전 정의된 preset 은 psr1, psr2, symfony, laravel, recommended  이며 기본 값은 recommended  입니다. 아래 설정은 preset 을 laravel 로 지정합니다.

preset: laravel


Finder

코드 검사를 할 대상을 찾을 규칙을 지정합니다. 아래 설정은 vendor, storage, node_modules 폴더 아래의 파일은 검사하지 않으며 .twig 확장자 파일도 제외합니다.

finder:
#  include:
#    - "app"
#    - "src"
  not-name:
    - "*.php.twig"
  not-path:
    - "src/StyleCI/Fixers.php"
  exclude:
    - "vendors"
    - "storage"
    - "node_modules"


뱃지 달기

아래 화면을 참고하여 프로젝트 저장소 id를 알아낸 후에 https://styleci.io/repos/30015369/shield  와 같이 badge URL 에 저장소 id 를 넣으면 README.md 에 StyleCI 통과 여부 뱃지를 달 수 있습니다.


브랜치를 지정하려면 url 에 branch 파라미터를 지정하면 됩니다. 뱃지 스타일을 지정할 경우 style 파라미터에 flat-square(기본), flat, plastic  등 스타일 명을 적어주면 됩니다.

[![StyleCI](https://styleci.io/repos/30015369/shield?branch=master&style=flat)](https://styleci.io/repos/30015369)



Ref


  • No labels

This page has no comments.