LoginSignup
7
5

More than 5 years have passed since last update.

0からはじめるRuboCop

Posted at
1 / 21

Dentoo.LT #15 : ATND での発表資料です


自己紹介

Masataka Kuwabara (Pocke)

  • Engineer at Actcat Inc. :cat:
  • :heart: Ruby
  • :heart: RuboCop
  • :heart: 奥華子

質問

  • Ruby 知ってる人 :raised_hand:
  • Ruby 書いたことある人 :raised_hand:
  • RuboCop 使ったことある人 :raised_hand:

RuboCopとは

RuboCop is a Ruby static code analyzer.

bbatsov/rubocop

  • [Style] コーディング規約に沿わないようなスタイルのコード
  • [Lint] バグの温床になりうるコード
  • [Performance] パフォーマンス上問題のあるコード
  • [Metrics] 定量的な値がしきい値を超えるようなコード
  • 他にも、Rails や Security など

Rubyのコードを静的に解析して、上記のような問題点を指摘します。


例1 Style

コーディングスタイルに関する問題を検出します。

# Bad. メソッド名はsnake_caseであるべき
def doSomething
  # ...
end

# Good
def do_something
  # ...
end

例2 Lint

バグになるような問題を指摘します。

# Bad. foo() は実行されない
def do_something
  return
  foo()
end

例3 Performance

パフォーマンス上問題のあるコードを指摘します。

# Bad ab から始まる文字列、というだけをチェックするのには正規表現は遅い
'abc' =~ /\Aab/
'abc'.match(/\Aab/)

# Good start_with? を使えばもっと速い!
'abc' =~ /ab/
'abc' =~ /\A\w*/

例4 Metrics

  • ものすごく長い行
  • ものすごく長いメソッド定義

等を検出


実用性

試しに、 mikutter/mikutter で走らせてみると…

$ cd mikutter/
$ rubocop
....
259 files inspected, 16199 offenses detected

16199 offences :innocent: :innocent: :innocent:


  • 何も考えずに導入すると大量のエラーが出てウッってなる
  • プロジェクトに沿った設定を作ることもできるが、温かみのある手作業が必要

よくあるケース: 疲れてしまって導入できない :cry:


そこで、MeowCop


MeowCop

sideci/meowcop

  • 汎用的に使えるルールのみを抽出したRuboCopの設定ファイル
  • バグの発見などにフォーカスしてRuboCopを使える
  • RuboCopwを使い始めるのに便利!

MeowCop の導入

$ gem install meowcop
# In .rubocop.yml
inherit_gem:
  meowcop:
    - config/rubocop.yml

以上!


適用してみると…

$ rubocop
259 files inspected, 460 offenses detected

まだ多いけど、460 offenses


なんとかなる!!! (気合)


DEMO


Auto Correction

  • RuboCop で問題が出た箇所を自動的に修正可能
  • ※ただし、完全に正しい修正結果が出てくることを期待してはいけない

DEMO


今日覚えて帰って欲しいこと

  • MeowCop を使うとRuboCopの導入が簡単 :star:

(次回予告: 1からはじめるRuboCop やりたい)

ご清聴ありがとうございました :bow:

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5