Rubocop、使っていますか?
RubocopはRubyコードを静的に解析して問題を指摘します。
更にauto-correct
機能を使うことで、指摘した内容を自動で修正することも可能です。
今回は、そのauto-correct
を使用して、Railsのモデル内のメソッドをソートするGemを作りました。
Links
What's this?
例えば、下記のようなapp/models/user.rb
があったとします。
class User < ActiveRecord::Base belongs_to :plan validate :validate_name after_create :after_create_1 has_many :messages attr_readonly :email after_create :after_create_2 belongs_to :role before_create :set_name end
belongs_to
などの association を示すメソッドや、before_create
などの callback メソッドがごっちゃになっていて見づらいですね。
特に callback は実行される順番に揃っていてほしいものです。
この状況でrubocop --auto-correct
を実行すると、app/models/user.rb
が以下のように修正されます。
class User < ActiveRecord::Base belongs_to :plan belongs_to :role has_many :messages validate :validate_name before_create :set_name after_create :after_create_1 after_create :after_create_2 attr_readonly :email end
メソッドが並び替えられてきれいになりましたね。
ポイントは二つです。
Installation and Usage
Rubygems として公開されているため、Gemfile に以下のように追記するか
gem 'rubocop-rails-order_model_declarative_methods'
gem
コマンドを実行することでインストールすることが出来ます。
gem install rubocop-rails-order_model_declarative_methods
また、このGemを有効にしてRubocopを実行するには、以下の3つの内のどれかを実施する必要があります。
.rubocop.yml
に以下を追記
require: rubocop-rails-order_model_declarative_methods
Command line 引数で指定
rubocop --require rubocop-rails-order_model_declarative_methods
Rake task に以下を追記
RuboCop::RakeTask.new do |task| task.requires << 'rubocop-rails-order_model_declarative_methods' end
最後に
このようなGemを作ったと言う紹介でした。
まだまだ作ったばかりで荒削りですが、Railsでmodel内のメソッドの並び替えに迷ったことのある方は是非一度使ってみて下さい。
今回このGemを作成するにあたって、いくつかハマった点がありました。
そのため、別の記事としてRubocop Extensionの作り方をそのうちまとめようと思います。