読者です 読者をやめる 読者になる 読者になる

Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

Rubyのコードの臭い検出ツールReekをAtomで利用する

Reek Ruby

f:id:tbpg:20160825230423p:plain

Rubyの静的解析ツールReekのAtom Packageについてまとめます

Reekとは?

f:id:tbpg:20160825230430p:plain

Code smell detector for Ruby

ということでコードの臭い検出ツールです。
修正すべき好ましくないコードを検出してくれます。

github.com

Reek の警告例

  • test.rb
# Hoge
# detail
class Hoge
  def hoge
    ato = 'hoge'.bytes.map(&:next)
    mae = 'hoge'.bytes.map { |char| char - 1 }
    puts ato.map(&:chr).join
    puts mae.map(&:chr).join
  end
end

Hoge.new.hoge
  • reek 実行
$ reek test.rb
test.rb -- 1 warning:
  [5, 6]:DuplicateMethodCall: Hoge#hoge calls 'hoge'.bytes 2 times [https://github.com/troessner/reek/blob/master/docs/Duplicate-Method-Call.md]

Duplicate Method Call の警告がでました。
Duplicate Method Call に関する解説ページへのリンクも表示されます。
親切。

  • 修正コード
# Hoge
# detail
class Hoge
  def hoge
    hoge_bytes = 'hoge'.bytes
    ato = hoge_bytes.map(&:next)
    mae = hoge_bytes.map { |char| char - 1 }
    puts ato.map(&:chr).join
    puts mae.map(&:chr).join
  end
end

Hoge.new.hoge
  • reek 再実行
$ reek test.rb
test.rb -- 1 warning:
  [4]:TooManyStatements: Hoge#hoge has approx 6 statements [https://github.com/troessner/reek/blob/master/docs/Too-Many-Statements.md]

DuplicateMethodCall の警告が消えました。
代わりに TooManyStatements がでましたけど・・・。

Atom linter-reek

Reek の機能を Atom のエディタに組み込んで利用する
linter-reek Packageがあります。

atom.io

利用時には、事前に reek をインストールしておく必要があります。

$ gem install reek

linter-reek の警告例

検証コードは Reek 単体で使ったものと同じです。

f:id:tbpg:20160825230526p:plain

コーディング中にリアルタイムで警告表示してくれます。