別言語からRubyに来た人にとって、最初に引っかかるポイントである言語の慣用について、今回はRubyらしくあるために、Rubyの命名規則をまとめてみました。
クラス名、モジュール名
キャメルケース(CamelCase):各単語の頭文字を大文字にする、_
は使用しない。
ただし、HTML
やFTP
などの略語はすべて大文字にします。
# NG
Foo_Class
barmodule
bazClass
ApiServer
# OK
FooClass
BarModule
BazClass
APIServer
ファイル名、ディレクトリ名
スネークケース(snake_cace):すべてを小文字にし、単語の区切りを_
で繋ぐ
そして、ファイル名にはクラス名やモジュール名をスネークケースに変更した名前を使用し、ディレクトリ名にはモジュールの名前空間をスネークケースに変更した名前を使用します。
class FooClass
end
# ファイル名はスネークケース
foo_class.rb
module HogeHoge
module Foo
class Bar
end
end
end
# ディレクトリ構造は名前空間と対応させる
hoge_hoge/foo/bar.rb
メソッド名、変数名
スネークケース(snake_cace):すべてを小文字にし、単語の区切りを_
で繋ぐ
# NG
Foomethod
barMethod
# OK
foo_method
bar_method
定数名
スクリーミングスネークケース(SCREAMING_SNAKE_CASE):すべてを大文字にし、単語の区切りを_
で繋ぐ
# NG
Max_Size
# OK
MAX_SIZE
返り値が真偽値のメソッド
真偽を返すメソッドであれば最後に?
を付与します。冗長になるためメソッドの先頭にis
やdoes
、またcan
などの助動詞を置かないようにします。
# NG
class MotocrossGP
def is_fast_rider?
true
end
end
# OK
class MotocrossGP
def fast_rider?
true
end
end
破壊的なメソッド
selfや引数を変更するようなメソッドは最後に!
を付与します。また可能であれば破壊的メソッドに対応する非破壊的なメソッドも用意します。
# NG
def update!
end
# OK
def update # 可能であれば非破壊的なメソッドも用意する
end
def update!
end
参考
https://shugo.net/ruby-codeconv/codeconv.html
https://techracho.bpsinc.jp/hachi8833/2017_02_13/35364