SlideShare a Scribd company logo
1 of 13
Download to read offline
Rubocop
についてざっくり解説
ota42y
2016/10/26 Shinjuku.rb #42
自己紹介
ota42y
ヘルスケア系の会社勤務
rubyとかgoとかC++とか
最近dartが凄いというウワサ
Rubocop
https://github.com/bbatsov/rubocop
コーディング規約にそっているかをチェック
修正可能なら自動修正(オプション)
規約は設定ファイルで細かく変更可能
ベースはRuby style guide (同作者)
How to works (demo)
% rubocop
Inspecting 67 files
.C..CCCCCCCCWCCC.W.C..C.C..C.....C.CCCCCWCCC......C.WWCCC
Offenses:
test/utils_test.rb:9:43: C: Prefer single-quoted strings
assert_equal true, Prmd::Utils.blank?(" ")
^^^
...
67 files inspected, 552 offenses detected
行と警告内容を出してくれる
auto-correct (demo)
% rubocop --auto-correct
test/utils_test.rb:4:3: C: Assignment Branch Condition siz
def test_blank?
^^^
test/utils_test.rb:8:43: C: [Corrected] Prefer single-quot
assert_equal true, Prmd::Utils.blank?("")
--auto-correctオプションで自動で直してくれる
[Corrected]がつく
直さない物もある
メソッド長すぎ系や例外握り潰すな系
対応しているcon g
https://github.com/bbatsov/rubocop/blob/master/
con g/default.yml
多すぎて説明無理
スタイル系からバグ検出まで様々
x == nil よりx.nil?
{には空白を入れろ
メソッド多重定義の検出
downcase比較よりcasecmp
copの区分け
cop (チェックルールをこう呼ぶ)
Style
Lint
bad practicesやエラーになりそうなの抽出
Metrics
一定量超えたらダメ系(行長すぎ、関数巨大すぎ)
Performance
Rails
Rails特有のもの( nd_by_name,where(). rst)
既存プロジェクトへの導入
linterで困るのが既存コードへの適応
既に入ってたので途中からの導入は(゚⊿゚)シラネ
http://blog.onk.ninja/2015/10/27/rubocop-
getting-started
おすすめの入れ方っぽい
現状で警告が出るものを全て無効にする
設定を一ずつ有効にして消していく
便利
簡単
その他
内部ではASTにして頑張って解析しているみたい
parser gemが解析やってる
https://github.com/whitequark/parser
rubyソースコードで遊ぶとき便利そう
Rubocopは主に解析ルールを持ってる
300個以上(´・_・`)!
独自ルールを作るのは凄い大変そう…?
コード構成
色々ありますが重要なのはほぼこれぐらい
Runner
解析実行するところ
auto-correctでは差分が消えるまで実行
Cop
解析のルールを実装するクラス
xxxxCopクラスで解析をする
on_whileとかon_ifとかをパーサーから受け取る
実際どんな感じ
line length チェック
本体
https://goo.gl/E9FqBY
共通のものはincludeされている
https://goo.gl/CrlZcI
https://goo.gl/q9B0BU

More Related Content

More from ota42y

なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話ota42y
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱いRails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱いota42y
 
goroutineはどうやって動いているのか
goroutineはどうやって動いているのかgoroutineはどうやって動いているのか
goroutineはどうやって動いているのかota42y
 
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかbootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかota42y
 
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点ota42y
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャota42y
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ota42y
 
CarrieWaveについてざっくり解説
CarrieWaveについてざっくり解説CarrieWaveについてざっくり解説
CarrieWaveについてざっくり解説ota42y
 
身近なサイバー攻撃から身を守る
身近なサイバー攻撃から身を守る身近なサイバー攻撃から身を守る
身近なサイバー攻撃から身を守るota42y
 
HCI分野の紹介と最新研究
HCI分野の紹介と最新研究HCI分野の紹介と最新研究
HCI分野の紹介と最新研究ota42y
 

More from ota42y (11)

なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱いRails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
 
goroutineはどうやって動いているのか
goroutineはどうやって動いているのかgoroutineはどうやって動いているのか
goroutineはどうやって動いているのか
 
bootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのかbootsnapはどれくらい早くなるのか
bootsnapはどれくらい早くなるのか
 
Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点Microservices Architecture の利点と欠点
Microservices Architecture の利点と欠点
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
 
CarrieWaveについてざっくり解説
CarrieWaveについてざっくり解説CarrieWaveについてざっくり解説
CarrieWaveについてざっくり解説
 
身近なサイバー攻撃から身を守る
身近なサイバー攻撃から身を守る身近なサイバー攻撃から身を守る
身近なサイバー攻撃から身を守る
 
HCI分野の紹介と最新研究
HCI分野の紹介と最新研究HCI分野の紹介と最新研究
HCI分野の紹介と最新研究
 

Rubocop についてざっくり解説