코드 리뷰 보조 도구 (RuboCop)

쓰는 것


  • 코드 검토 도구란?

  • 1.RuboCop 도입
    2.RuboCop 실행
    3. 참고 페이지
    4. 끝에

    코드 검토 도구란?



    코드 검토 도구는 문법, 버그 및 코딩 스타일을 자동으로 분석하는 도구를 말합니다.

    1.RuboCop 도입



    RuboCop이란?
    「들여쓰기가 갖추어지지 않는다」 「낭비적인 개행·스페이스가 있다」등의 지적을 RubyStyleGuide에 근거해 가 준다.
    리뷰에 걸리는 시간이 줄어든다.
    .rubocop.todo.yml에서 위반을 지우고 rubocop을 실행 → 수정이라는 흐름으로 진행한다.

    소개
    Gemfile에 다음을 추가

    Gemfile
    #省略
    group :development do
    #省略
      gem 'better_errors'
      gem 'binding_of_caller'
      gem 'bullet'
     gem 'rubocop-rails', require: false⭐︎12/13更新
      (#前の書き方 gem 'rubocop', require: false)
    end
    #省略
    

    쓸 수 있으면, bundle install 합니다.

    2.RuboCop 실행



    이대로 $bundle exec rubocop 를 하면 대량의 규율 위반이 나 버린다 ٩( ᐛ )و{
    하지만 실제로 이렇게 정확하게 고치는 것은 무리이므로, 체크 룰을 커스텀합니다.

    맞춤
    설정 파일은 .rubocop.yml 라는 이름이 아니면 안되기 때문에 Gemfile과 같은 깊이에 파일을 만듭니다

    .rubocop.yml
    #AllCops:の上に新たに追加##############
    require:
      - rubocop-rails
    ####################################
    AllCops:
      # Rubocopの規約の調査から除外するディレクトリ(自動生成されたファイル)
      # デフォルト設定にある"vendor/**/*"が無効化されないように記述
      # schemaファイルやmigration関連ファイルについてはほとんど書き直したりすることが無いため見逃す
      Exclude:
        - bin/*
        - db/schema.rb
        - node_modules/**/*
        - db/migrate/*  #migrate以下を追記するかしないかはご自由にどうぞ
        - vendor/**/*
    
    
    
    #こちらの記述は削除しました###############
      # Rails向けのRails copsを実行。"rubocop -R"と同じ
      Rails:
        enabled: true
    ####################################
    
    # これ以下は厳しすぎる規約を無効にする
    # "Missing top-level class documentation comment."を無効
    ⭐️個別に有効/無効を切り替えられるよ
    Style/Documentation:
      Enabled: false
    
    # "Prefer single-quoted strings when you don't need string interpolation or special symbols."を無効
    Style/StringLiterals:
      Enabled: false
    
    # "Line is too long"を無効
    Metrics/LineLength:
      Enabled: false
    
    #'frozen_string_literal: true'を無効
    Style/FrozenStringLiteralComment:
      Enabled: false
    

    터미널
    $bundle exec rubocop
    

    이 상태에서도 위반이 많이 나온다.

    현재 위반을 서서히 수정



    1. 현재의 위반을 모두 기록한 후, 일단 위반이 아닌 것으로 한다
    2. 기록한 위반 중 하나를 위반한 것으로 되돌리기
    3. 그 위반을 해소한다

    1. 현재의 위반을 모두 기록한 후, 일단 위반이 아닌 것으로 한다

    터미널
     $bundle exec rubocop --auto-gen-config 
    
    .rubocop.todo.yml 파일 가능.rubocop.yml 에 하기도 추기된다

    .rubocop.yml
    inherit_from: .rubocop_todo.yml
    

    .rubocop.yml에 .rubocop.todo.yml의 내용이 작성된 것과 동일하게 해줍니다.

    2. 기록한 위반 중 하나를 위반한 것으로 되돌리기
    아래 위반 회피 설명 삭제

    .rubocop.todo.yml
    Bundler/OrderedGems:
      Exclude:
        - 'Gemfile'
    #Gemfileのgroup do ~ endのグループの中に書いたGemはアルファベット順に並べる、という規約
    

    경고를 부활시키다

    터미널
    $bundle exec rubocop
    

    이 아래의 경고가 나오지 않도록 일부 수정했습니다. 12/3
    자세한 것은 코멘트란

    오, 오류가 발생했습니다.

    터미널
    Warning: AllCops does not support Rails parameter.
    

    잘 보면 $bundle exec rubocop --auto-gen-config 의 시점에서 나왔다. 눈치채지 않고 계속하고 있었다.
    로보컵, Rails 지원하지 않는다고 말하고 있으므로 지원시키는 방법을 찾는다.
    우선, 에러문을 그대로 copipe하고 구글 선생에게 물어본다.

    터미널로 돌아오면, 어, 실행 완료하고 있다.
    이것은 에러가 아니라 주의 환기였던 것일까. 매번 나왔습니다. 우선 문제 없을 것 같기 때문에 진행합니다.
    구글 선생님이 들은 내용의 링크는 아래에 남겨 둡니다.

    Rubocop에는, 어느 정도의 규약 위반은 자동으로 수정해 주는 기능이 있으므로 실행

    이번 에러는 Gemfile의 group do ~ end 의 그룹안에 쓴 Gem은 알파벳순으로 늘어놓는다,
    라는 규약에 대한 위반이므로 그쪽을 고쳐드립니다.
    런타임에 -a 옵션 사용

    터미널
    $ bundle exec rubocop -a
    

    정렬 순서가 있었습니다.

    보충-aオプション 사용 가능한지 여부는 .rubocop.todo.yml의 각 설정 위
    코멘트 아웃으로 # Cop supports --auto-correct. 라고 쓰여 있는지 어떤지로 판단.
    쓰는 경우에, 이용될 수 있다.

    ( ˙-˙ ) {매우 많이 쓰여진 규약이 있었다



    참고 페이지



    RuboCop 설정 알레콜레

    끝에



    필요한 코드 리뷰 툴을 정리해 도입하고 싶을 때는, Sider를 활용하는 것으로 간단하게 설정을 할 수 있는 것 같기 때문에
    다음은 GitHub에의 도입을 정리하려고 합니다.
    기재 내용에 오류나 조언이 있으시면 지적해 주시면 감사하겠습니다.

    좋은 웹페이지 즐겨찾기