Dentoo.LT #15 : ATND での発表資料です
自己紹介
Masataka Kuwabara (Pocke)
- Engineer at Actcat Inc.
- Ruby
- RuboCop
- 奥華子
質問
- Ruby 知ってる人
- Ruby 書いたことある人
- RuboCop 使ったことある人
RuboCopとは
RuboCop is a Ruby static code analyzer.
- [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
- 何も考えずに導入すると大量のエラーが出てウッってなる
- プロジェクトに沿った設定を作ることもできるが、温かみのある手作業が必要
よくあるケース: 疲れてしまって導入できない
そこで、MeowCop
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の導入が簡単
(次回予告: 1からはじめるRuboCop やりたい)
ご清聴ありがとうございました