はじめに
はじめてのRailsプロジェクトで作成したプルリクエストで、RuboCopから指摘された事項をまとめます。
RuboCopとは
Rubyのコードが「コーディング規約どおりに書かれているか」をチェックする静的コード解析ツールです。 私のようなRails初心者にはとてもありがたいツールです。
RuboCopの実行コマンド
$ bundle exec rubocop
指摘事項
Use %i or %I for an array of symbols.
指摘例
app/controllers/hoge1s_controller.rb:4:36: C: Use %i or %I for an array of symbols. before_action :new_hoge1, only: [:index, :new] ^^^^^^^^^^^^^^
詳細
配列を指定する際に、%i
または%I
がない。
【参考】Ruby 2.4.0 リファレンスマニュアル > リテラル %記法
- %i
- 要素がシンボルの配列(空白区切り)
- %I
- 要素がシンボルの配列(空白区切り)。式展開、バックスラッシュ記法が有効
修正内容
配列を指定するときに、%i
または%I
をつける。
before_action :new_hoge1, only: %i[:index, :new]
':' and ',' are unnecessary and may be unwanted in the resulting symbols.
指摘例
app/controllers/hoge1s_controller.rb:4:36: W: Within %i/%I, ':' and ',' are unnecessary and may be unwanted in the resulting symbols. before_action :new_hoge1, only: %i[:index, :new]
詳細
':'と '、'は不要であり、結果として生じるシンボルで望ましくないかもしれません。
修正内容
配列内から:
および、,
を削除。
before_action :new_hoge1, only: %i[index new]
Put empty method definitions on a single line.
指摘例
def index end
詳細
空のメソッドは1行で定義する。
修正内容
空のメソッドは1行で定義する。 また、アクションの後ろにセミコロンを付与する。
def index; end
Keep a blank line before and after private.
指摘例
app/controllers/hoge1s_controller.rb:47:3: C: Keep a blank line before and after private. private ^^^^^^^
詳細
private
キーワードの前後には空白行を入れる。
修正内容
詳細の通り。
Inconsistent indentation detected.
指摘例
app/controllers/hoge1s_controller.rb:48:5: C: Inconsistent indentation detected. def new_hoge1 ... ^^^^^^^^^^^^^^
詳細
インテンドの不一致。
今回は、private
メソッドのインテンドが不一致だと指摘されていました。
Railsチュートリアルの記載方法に習いましたが、Rubocop的にはダメなんですね。
(privateメソッドの下は1段下げておいた方が見やすくないか???)
private def new_hoge1 @hoge1 = hoge1.new end
修正内容
インテンドを半角スペース4つから、半角スペース2つに修正。
また、private
キーワード以下がprivateメソッドであることが分かるように記号を追加。
(先輩からのアドバイスに習いましたが、世の中的にどうなんだろう?)
private ################################################################################################### def new_hoge1 @hoge1 = hoge1.new end
Indent ) the same as the start of the line where ( is.
指摘例
app/controllers/hoge1s_controller.rb:57:9: C: Indent ) the same as the start of the line where ( is. ) ^
詳細
)のインテンドは、先頭の(と同じにする。
params.require(:hoge1).permit( :hoge1_code, :hoge1_name_ja, :hoge1_name_en )
修正内容
)のインテンド位置を、先頭の(と同じになるように修正。
params.require(:hoge1).permit( :hoge1_code, :hoge1_name_ja, :hoge1_name_en )
Extra empty line detected at class body end.
指摘例
app/controllers/hoge1s_controller.rb:75:1: C: Extra empty line detected at class body end. app/models/hoge1.rb:8:62: C: Space inside } missing. uniqueness: { case_sensitive: false} ^
詳細
クラス本体の最後で余計な空行が検出された。
def set_order_move self.move_order_item = hoge1 end end
修正内容
最後のendの前にある余計な空行を削除する。
def set_order_move self.move_order_item = hoge1 end end
Align the elements of a hash literal if they span more than one line.
指摘例
app/models/hoge1.rb:10:25: C: Align the elements of a hash literal if they span more than one line. presence: true ^^^^^^^^^^^^^^
詳細
ハッシュリテラルの要素が複数の行にまたがっている場合は、それらの要素をそろえる。
validates :hoge1_name_ja, length: { maximum: 50 }, presence: true
修正内容
EnforcedColonStyle key(デフォルト) でチェックしているため、キーを左揃えにする。
validates :hoge1_name_ja, length: { maximum: 50 }, presence: true
Final newline missing.
指摘例
app/decorators/hoge1_decorator.rb:4:4: C: Final newline missing. end
詳細
最終行に改行がない。
修正内容
最終行に改行を追加する。
Space inside } missing.
指摘例
app/models/hoge1.rb:8:62: C: Space inside } missing. uniqueness: { case_sensitive: false} ^
詳細
内側のスペースがない。
修正内容
falseの後ろにスペースを追加。
validates :hoge1_code, length: { maximum: 15 }, presence: true, uniqueness: { case_sensitive: false }