Rails Tipsいろいろ(Rubocop、magic comment除去等)


RailsやRuboCopに関するTipsをいくつか紹介します。

🐹 RuboCop

Rubyのコーディングルールのチェックを行うツール「RuboCop」を扱う際に捗るTipsを紹介します。RuboCopを使うことでチーム内でコーディング規約に違反しているコードを自動チェックできます。コードレビューで不要な指摘もなくなるので、チーム開発の際にはぜひ使ってみてください。

警告をコメントで無効化

コードの中の一部だけ例外的にRuboCopの警告を無視したいケースでは次のようにコメントを書いてチェック対象外にします。

警告を複数行で無効化

rubocop:disableの後に無効化したい警告を記述します。

# rubocop:disable Style/XXX
DoSomething.execute
# rubocop:enable Style/XXX

すべて無効化したい場合はrubocop:disable allとします。

一行だけ警告を無効化

rubocop:disableを無視したい行に記述します。

DoSomething.execute # rubocop:disable Style/XXX

🐞 magic commentの除去

# -*- encoding: utf-8 -*-といったmagic commentがRuby 2.0以降不要になりました。古いコードをキレイキレイするときには次のコマンドで駆逐しましょう。

# マジックコメントの削除
find . -type f -name '*.rb' -print0 | xargs -0 sed -i '' '/^#.*coding.*[uU][tT][fF]\-8/d'
# ファイルの先頭の空の行の削除
find . -type f -name '*.rb' -print0 | xargs -0 -n 1 sed -i '' '/./,$!d'

🏈 delegateメソッド

ActiveSupportのdelegateメソッドは別のオブジェクトに処理を委譲する設定です。

class Greeter < ActiveRecord::Base
def hello
'hello'
end
def goodbye
'goodbye'
end
end
class Foo < ActiveRecord::Base
belongs_to :greeter
delegate :hello, to: :greeter
end
Foo.new.hello # => "hello"
Foo.new.goodbye # => NoMethodError: undefined method `goodbye' for #<Foo:0x1af30c>

delegateには次の2つのオプションがあります。

  • allow_nil: true => 委譲先がない場合はnilを返します
  • prefix => delegateしたメソッドにprefixをつけることができる

🐠 参考リンク

📚 おすすめの書籍