Ruby
初心者

【Ruby】コーディング規約抜粋

More than 1 year has passed since last update.

はじめに

下記の中から忘れそうなものをピックアップした
参照先:https://shugo.net/ruby-codeconv/codeconv.html

ソースコードの整形

インデント

インデント幅は2とする。また、インデントにはスペースのみを使用し、タブは使用しない。

コメント

メソッド定義の中にはコメントは記述しない。

構文に関する規約

クラスの構成要素

クラスの構成要素は以下の順序で記述する。

  1. モジュールのインクルード
  2. 定数の定義
  3. クラス変数・クラスのインスタンス変数の定義
  4. パブリックなクラスメソッドの定義
  5. アクセサの定義
  6. initializeの定義
  7. パブリックなインスタンスメソッドの定義
  8. プロテクティッドなクラスメソッドの定義
  9. プロテクティッドなアクセサの定義
  10. プロテクティッドなインスタンスメソッドの定義
  11. プライベートなクラスメソッドの定義
  12. プライベートなアクセサの定義
  13. プライベートなインスタンスメソッドの定義
  14. ネストしたクラスの定義

アクセサの定義

アクセサの定義には、attr_accessorattr_readerattr_writerを使用する。(attrは使用しない。)

メソッドの定義

メソッド定義に引数がない場合は、括弧を省略する。

example-method.rb
#正
def foo
  ...
end

#誤
def foo()
  ...
end

メソッド呼び出し

printputspの場合は、引数の括弧を省略してもよい。

ブロック

ブロックは基本的にdo ... endを使用する。ただし、メソッドチェインを行う場合は{ ... }を使用する。

return

メソッドの値を返す場合は、必ずreturnを使用する。また、returnの括弧は省略する。

example-return.rb
#正
def add(x, y)
  return x + y
end

#誤
def add(x, y)
  x + y
end

def add(x, y)
  return(x + y)
end

yield

yieldの呼び出し方法はメソッド呼び出しに準ずる。

条件分岐

  1. if !xのような場合は、unless xに置き換える。ただし、unlessの場合、elseは使用しない。
  2. 条件が十分に簡単で、一行で書ける場合は、if修飾子を使用してもよい。
  3. caseを使用できる場合は、caseを使用する。
  4. 条件分岐の式の値は使用しない。
example-if.rb
#正1
unless x
  puts "x is false"
end

#誤1
unless x
  puts "x is false"
else
  puts "x is true"
end

#正2
puts "x is true" if x

#誤2
puts "foo && bar && baz && quux" if foo &&
  bar && baz && quux

#正3
case x
when 1
  ...
when 2
  ...
end

#誤3
if x == 1
  ...
elsif x == 2
  ...
end

#正4
if x > 0
  msg = "x > 0"
else
  msg = "x <= 0"
end

#誤4
msg = if x > 0
        "x > 0"
      else
        "x <= 0"
      end

繰り返し

  1. while !xのような場合は、until xに置き換える。
  2. 無限ループにはloopを使用する。

論理演算子

論理演算には!&&||を使用する。(not/and/orは使用しない。)

文字列リテラル

文字列リテラルには基本的に"..."を使用する。ただし、特殊文字を解釈させたくない場合のみ、'...'を使用する。
また、原則的にヒアドキュメントは使用しない。

命名規約

全般

  1. 原則として、単語の省略は行わない。
  2. スコープが狭いループ変数には、i, j, kという名前をこの順序で使用する。
  3. スコープが狭い変数名には、クラス名を省略したものを使用してよい。(例:eo = ExampleObject.new)

クラス・モジュール名

クラス・モジュール名は、各単語の一文字目を大文字にし、_などの区切文字は使用しない。ただし、HTTPなどの略語の場合はすべて大文字のままとする。

example-class-name.rb
#正
ExampleClass  
HTTPClient

#誤
Example_Class
EXAMPLE_CLASS
HttpClient
HTTPclient
HTTP_Client

メソッド名

メソッド名は、すべて小文字とし、単語の区切りに_を用いる。メソッド名には動詞の原形を使用する。

example-method-name.rb
#正
add_something

#誤
addsSomething
Add_Something

定数名

クラス・モジュール名以外の定数名は、すべて大文字とし、単語の区切りに_を用いる。

変数名

変数名は、すべて小文字とし、単語の区切りに_を用いる。

ファイル名

ファイル名は、すべて小文字とし、単語の区切りに-を用いる。
また、ファイル中の主な定義クラスの名前を変換したものをファイル名に使用する。
(モジュールを名前空間として使用する場合は、ディレクトリを使用して階層構造を表現する。)

example-file-name.rb
foo.rb # クラスFooを定義
foo-bar.rb # クラスFooBarを定義
foo/bar-baz.rb # クラスFoo::BarBazを定義