42
Help us understand the problem. What are the problem?

posted at

updated at

Rubocop がチェックしてくれるもの一覧表 (Style編)

基本的に Rubocop - Rubydoc を元に書いてます。
一部、RubyStyleGuideからの引用や、自分で書いたサンプルもあります。

=> GitHub

  • 未完成のため、追記要望があれば編集リクエストをお送りください。

AccessModifierIndentation

private / protected / public は def と同じ列に書こう。

# bad
class SomeClass
private
  
  def private_method
    # ...
  end
end

# good
class SomeClass
  private
  
  def private_method
    # ...
  end
end

AccessorMethodName

セッタは attribute= というメソッド名にしよう。
ゲッタは attribute というメソッド名にしよう。

先頭に set_ / get_ は不要だ。

# bad
def set_attribute(value) ...

# good
def attribute=(value)

# bad
def get_attribute ...

# good
def attribute ...

(※単純なセッタ/ゲッタの場合は attr_accessor/attr_reader/attr_writer を使おう)

Alias

AlignArray

AlignHash

AlignParameters

AndOr

and は && に置き換えよう。
or は || に置き換えよう。

and / or は使う価値が無い。

RubyStyleGuide

###ArrayJoin

Array#join をする時に * を使わないようにしよう。謎めいた書き方だ。
明確に join を書こう。

# 悪い例
%w(one two three) * ', '
# => 'one, two, three'

# 良い例
%w(one two three).join(', ')
# => 'one, two, three'

(Ruby Style Guide より)

AsciiComments

AssignmentInCondition

if の中で代入するのはやめよう。( == の書き間違えに見える )

# bad
if x = 1 
end

AsciiIdentifiers

###Attr

attr は ruby のバージョンによって挙動が違う。
Ruby 1.8 以前では、引数によってゲッタ/セッタのどちらを定義するかが変わってしまう。分かりにくい。

かわりに attr_read / attr_writer / attr_accessor を使おう。

# 例
attr_accessor :getter_with_setter
attr_reader :getter1, :getter2, :getter3
attr_writer :setter1, :setter2, :setter3

RubyStyleGuideより

BeginBlock

BlockComments

ブロックコメントを使うのはやめよう。

エディタにもよるが、簡単にコメントだと見分けがつかない。
あとは、=begin =end の前に空白を置くことも出来ない。

# 悪い例
== begin
comment line
another comment line
== end

# 良い例
# comment line
# another comment line

RubyStyleGuide

BlockNesting

Blocks

BracesAroundHashParameters

CaseEquality

CaseIndentation

case 文で、when のインデントが不整列なら見つけてくれる。
(case / when / end はすべて同じ列に書くこと )

# bad
case
  when song.name == 'Misty'
    puts 'Not again!'
  when song.duration > 120
    puts 'Too long!'
  when Time.now.hour > 21
    puts "It's too late"
  else
    song.play
end

# good
case
when song.name == 'Misty'
  puts 'Not again!'
when song.duration > 120
  puts 'Too long!'
when Time.now.hour > 21
  puts "It's too late"
else
  song.play
end

CharacterLiteral

ClassAndModuleCamelCase

ClassAndModuleChildren

ClassLength

ClassMethods

ClassVars

CollectionMethods

ColonMethodCall

CommentAnnotation

アノテーションコメントは正しい形式で書こう。

# bad
#FIXME Comment

# good
# FIXME: Comment

ConstantName

CyclomaticComplexity

DefWithParentheses

DeprecatedHashMethods

Documentation

DotPosition

DoubleNegation

EmptyLineBetweenDefs

EmptyLines

EmptyLinesAroundAccessModifier

EmptyLinesAroundBody

###EmptyLiteral

空のリテラルを定義するとき。

Array.new のかわりに [] を使おう。
Hash.new のかわりに {} を使おう。
String.new のかわりに '' を使おう。

some_array = []
some_hash = {}
some_string = ''

Encoding

EndBlock

EndOfLine

コード内にCRの改行コード ( \r ) があれば見つけてくれる。

###EvenOdd

<<<<<<< HEAD
偶数の判定には even? を。
奇数の判定には odd? を使おう。

偶数の判定には even? を。
奇数の判定には odd? を使おう。

EDIT_REQUEST

# bad
if x % 2 == 0

# good
if x.even?

FileName

FinalNewline

FlipFlop

For

FormatString

GlobalVars

ユーザー定義のグローバル変数は使わないようにしよう。
(デフォルトのもの以外は使わない)

# bad
$ORIGINAL_PATH = '/path/to/user'
puts $ORIGINAL_PATH

# good
puts $LOAD_PATH

GuardClause

HashSyntax

新しいハッシュ記法でシンボルを書こう。

# bad
hash = { :kind => 'Apple' }

# good
hash = { kind: 'Apple' }

IfUnlessModifier

IfWithSemicolon

IndentArray

IndentHash

###IndentationConsistency

インデントには矛盾がないように。

def test
  puts 'hello'
-   puts 'world'
+  puts 'world'
end

IndentationWidth

インデントにはスペース二個を使うこと。

# bad
def test
 puts 'hello'
end

# good
def test
  puts 'hello'
end

Lambda

LambdaCall

LeadingCommentSpace

コメントの # の後にはスペースを置こう。
ただし、Rdoc用の記述では スペースを詰めて書いても良い。

MultilineIfThen

条件文を複数行で書くときに then は不要だ。

# bad
if cond then
end

# good
if cond
end

# good
if cond then a
elsif cond then b
end

SpaceBeforeBlockBraces

ブレースの前にはスペースを置こう。

- expect{ subject } 
+ expect { subject } 

MultilineTernaryOperator

三項演算子を複数行で書かないようにしよう。
その場合は if か unless を使おう。

# bad
true ?
yes :
no

# good
true ? yes : no

# good
if true
  yes
else
  no
end

###LineEndConcatenation

行末で文字連結をするときは \ を使おう。

# bad
some_str = 'ala' +
           'bala'

some_str = 'ala' <<
           'bala'

# good
some_str = 'ala' \
           'bala'

LineLength

MethodCallParentheses

MethodCalledOnDoEndBlock

MethodDefParentheses

メソッドを定義するとき。
メソッドが何のパラメータも受け取らない時は、カッコを省略しよう。

# bad
def some_method()
 # body omitted
end

# good
def some_method
 # body omitted
end

# bad
def some_method_with_parameters param1, param2
 # body omitted
end

# good
def some_method_with_parameters(param1, param2)
 # body omitted
end

MethodLength

MethodName

メソッド名は snake_case にしよう。

# bad
def ExampleMethod
end

# good
def example_method
end

設定によっては camelCase に揃えることも出来る。

ModuleFunction

MultilineBlockChain

MultilineIfThen

MultilineTernaryOperator

NegatedIf

NegatedWhile

NestedTernaryOperator

NilComparison

NonNilCheck

「nilでないこと」を冗長に判定していないか。


# bad
if x != nil
if !x.nil?

# good
if x

ただし最後の節として記述するならOK。

# good
def signed_in?
  !current_user.nil?
end

Not

NumericLiterals

OneLineConditional

OpMethod

ParameterLists

ParenthesesAroundCondition

条件文のカッコを省略できる場合はしよう。


# bad
if (a && b)
end

# good
if a && b
end

# good

if (a && b) || c
end

PercentLiteralDelimiters

PerlBackrefs

PredicateName

メソッド名の最初に has / have / is などの前置詞は不要だ。

# bad
def is_even?(value) ...

# good
def even?(value)

# bad
def has_value? ...

# good
def value? ...

Proc

RaiseArgs

RedundantBegin

例外処理がメソッド定義全体に対して行われる場合には begin と end を省略できる (参照)

省略しよう。

def redundant
  begin
    ala
    bala
  rescue StandardError => e
    something
  end
end

def preferred
  ala
  bala
rescue StandardError => e
  something
end

RedundantException (中途半端な例外)

RuntimeError を起こす場合は、クラス名は省略できる。
( raise / fail のデフォルトが RuntimeError なので )

# bad
raise RuntimeError, 'message'

# good - signals a RuntimeError by default
raise 'message'

RedundantException

RedundantReturn

冗長な return はやめよう。

# maybe bad
def test
  return something
end

# maybe good
def test
  something
end

RescueEnsureAlignment

begin/rescue/end はすべて同じ列に書こう。

# bad
begin
  something
  rescue
  puts 'error'
end

# good
begin
  something
rescue
  puts 'error'
end

RedundantSelf

RegexpLiteral

詳しくは RuboCop | Style/RegexpLiteral - Qiita を参照。

設定によって、判定の動作が変わる。
オプションは slashes (デフォルト) / percent_r / mixed の三種類。

.rubocop.yml
#例:

Style/RegexpLiteral:
  EnforcedStyle: percent_r
# EnforcedStyle の設定が slashes / mixed の場合は良い。 percent_r の場合は悪い。
snake_case = /^[\dA-Z_]+$/

# EnforcedStyle の設定が percent_r の場合は良い。 slashes / mixed の場合は悪い。
snake_case = %r{^[\dA-Z_]+$}

# EnforcedStyle の設定が slashes の場合は良い。 percent_r / mixed の場合は悪い。
regex = /
  foo
  (bar)
  (baz)
/x

# EnforcedStyle の設定が percent_r / mixed の場合は良い。 slashes の場合は悪い。
regex = %r{
  foo
  (bar)
  (baz)
}x

# スラッシュ記法の中でスラッシュを使わないこと。
# AllowInnerSlashes の設定を true にしていれば警告しない。
x =~ /home\//

RescueModifier

SelfAssignment

変数が自分自身を扱う場合は、簡潔な書き方をしよう。

# bad
x = x + 1

# good
x += 1

Semicolon

SignalException

SingleLineBlockParams

SingleLineMethods

メソッドを1行で定義しないこと。

# bad
def method; nil; end

# good
def method
  nil
end

ただしオプションで、メソッドのボディがない場合に限り許容させることも出来る。

SingleSpaceBeforeFirstArg

SpaceAfterColon

いくつかの場合、セミコロンの後にスペースを置こう。

# bad
x = 1;y = 2

# good
x = 1; y = 2

SpaceAroundBlockParameters

ブロックパラメータの外側には空白を置こう。
逆に内側には置かないようにしよう。

# bad
hash.map! {|k, v|v }

# bad
hash.map { | k, v | v }

# good
hash.map { |k, v| v }

SpaceAfterComma

(いくつかの種類の)カンマの後にはスペースを置こう。

#bad
['Apple','Banana','Strawberry']

#good
['Apple', 'Banana', 'Strawberry']

SpaceAfterControlKeyword

1行で書く場合。
if/unless などの後にはスペースを置こう。

# bad
if(a && b) || c then result end

# good_
if (a && b) || c then result end

SpaceAfterMethodName

メソッドを定義するとき。
メソッド名とカッコの間は、スペースを置かずに詰めよう。

# bad
def func (x)
end

# good
def func(x)
end

SpaceAfterNot ( ! の後の空白 )

! の後にスペースを置かないようにしよう。

# bad
! something

# good
!something

SpaceAfterSemicolon

1行に複数式を書く場合。
セミコロンの後にはスペースを置こう。

# bad
x = 1;y = 2;

# good
x = 1; y = 2;

SpaceAroundEqualsInParameterDefault

引数の初期値を決めるとき。イコールの周りには空白を置こう。

# bad
def example(value='')
end

# good
def example(value = '')
end

SpaceAroundOperators ( 演算子の周りの空白 )

演算子の周りには空白を1個置こう。

# bad
x=1+1

# bad
x  =  1  +  1

# good
x = 1 + 1

ただし ** (乗の計算) ではスペースを置くべきではない。

# bad
x = 2 ** 3

# good
x = 2**3

SpaceBeforeBlockBraces

ブロックの波括弧の前にはスペースを置こう。

# bad
(1..10).each{ |i| i }

# good
(1..10).each { |i| i }

SpaceBeforeComment

行末コメントの前にはスペースを置こう。

# bad
method# Comment

# good
method # Comment

SpaceBeforeModifierKeyword

後方の if/unless などの前にはスペースを置こう。

# bad
result if(a && b) || c

# good
result if (a && b) || c

SpaceInsideBlockBraces

ブロックの波括弧の内側にはスペースを置こう。

# bad
(1..10).each {|i| i}

# good
(1..10).each { |i| i }

SpaceInsideBrackets

SpaceInsideHashLiteralBraces

ハッシュ記法で、波括弧の内側にはスペースを置こう。

# bad
furuits = {apple: 10, banana: 20}

# good
furuits = { apple: 10, banana: 20 }

SpaceInsideParens

カッコの内側にはスペースを置かないようにしよう。

# bad
some( arg ).other
[ 1, 2, 3 ].size

# good
some(arg).other
[1, 2, 3].size

SpaceInsideRangeLiteral

範囲リテラルの内側にスペースは不要だ。

# bad
1 .. 3

# good
1..3

# bad
'a' .. 'z'

# good
'a'..'z'

SpecialGlobalVars

スーパーグローバル変数を Perl スタイルで書かないようにしよう。
かわりに、意味が明確な方のスタイルで書こう。

対照表:

$: => $LOAD_PATH
$" => $LOADED_FEATURES
$0 => $PROGRAM_NAME
$! => $ERROR_INFO
$@ => $ERROR_POSITION
$; => $FIELD_SEPARATOR / $FS
$, => $OUTPUT_FIELD_SEPARATOR / $OFS
$/ => $INPUT_RECORD_SEPARATOR / $RS
$\\ => $OUTPUT_RECORD_SEPARATOR / $ORS
$. => $INPUT_LINE_NUMBER / $NR
$_ => $LAST_READ_LINE
$> => $DEFAULT_OUTPUT
$< => $DEFAULT_INPUT
$$ => $PROCESS_ID / $PID
$? => $CHILD_STATUS
$~ => $LAST_MATCH_INFO
$= => $IGNORECASE
$* => $ARGV => / => ARGV
$& => $MATCH
$` => $PREMATCH
$\' => $POSTMATCH
$+ => $LAST_PAREN_MATCH

StringLiterals

SymbolArray

SymbolLiteral

文字定義みたいなシンボルは書かないようにしよう。

# bad
:symbol"

# good
:symbol

Tab

タブ ( \t ) を使わないようにしよう。

(*注…プログラミングの世界では、タブ揃えより、空白スペース揃えのほうが主流だ)

SymbolProc

proc をシンボル記法に置き換えられる場合は、そうしよう。

# bad
something.map { |s| s.upcase }

# good
something.map(&:upcase)

TrailingBlankLines

ファイル末には空行を入れないようにしよう。

TrailingComma

TrailingWhitespace

行末の空白を見つけてくれる。

TrailingUnderscoreVariable

変数はアンダースコアで終わらせないようにしよう。

# maybe bad
x_ = 1

TrivialAccessors

ありふれたセッタ/ゲッタメソッドは、 attr_xxx に置き換えよう。

# bad
class Foo
  def example=(value)
    @example = value
  end

  def example
    @example
  end
end

# good
class Foo
  attr_accessor :example
end

UnlessElse

VariableInterpolation

VariableName

変数は snake_case で書こう。

# bad
someVar = 5

# good
some_var = 5

設定次第では camelCase に統一させることも出来る

WhenThen

when then の表現でセミコロンを使わないこと。then を使うこと。

# bad
when x; apple

# good
when x then apple

WhileUntilDo

複数行の while/until に do が使われている部分を見つけてくれる。

# bad
while x > 5 do
  # body omitted
end

until x > 5 do
  # body omitted
end

# good
while x > 5
  # body omitted
end

until x > 5
  # body omitted
end

WhileUntilModifier

WordArray

Metrics

ParameterLists

メソッド定義では。引数の種類を増やし過ぎないようにしよう。

# bad 
class Example
  def some_method(argument1, argument2, argument3, argument4, argument5, argument6)
  end
end

設定によって警告の個数は変更できる。

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

メンター受付

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
42
Help us understand the problem. What are the problem?