RubyとRailsのベストプラクティス

カッコはK&Rスタイル

概要

  • ブロックを制御する構造の末尾に、開きカッコを配置
  • ブロック内の内容を次の行から初めて、インデントを付ける
  • 最後に制御構造と同じインデントレベルで新しい行に閉じカッコを配置

my @names = {
  'test1',
  'test2',
}

参考サイト

制御文の引数をと後続の開きの間にスペース

概要

メソッド呼び出しと勘違いしないため

for $result (@results ) {
  print 'test'
}

参考サイト

メソッドまたは変数の名前と後続の開きカッコはくっつける

概要

メソッド呼び出しを制御文と勘違いしたり、配列要素の先頭部分を独立したスカラー変数と読み間違がいたりしないため

$candidates = get_candidates( $marker )

参考サイト

文末の後ろのセミコロンは省略

概要

文末のセミコロンは省略する

priint $test

参考サイト

複数行にまたがるリストで最後の値の後ろにコンマ

概要

複数行にまたがるリストで最後の値の後ろにコンマ

@dwarves = {
  'test1',
  'test2',
}

参考サイト

2列のインデントレベル

概要

インデントの深さは、2列

my @names = {
  'test1',
  'test2',
}

参考サイト

インデントにはタブではなくスペースを使用

概要

異なる出力デバイスで表示する場合に、タブとスペースが混ざっている場合みえかたが違ってしまうため、スペースのみを使用する

参考サイト

配列の名前は複数形、ハッシュの名前は単数形

概要

  • ハッシュエントリは個別にアクセスされるため、ハッシュの名前は単数形
  • 配列は、まとめて処理されることが多いので複数形

%option
@events

参考サイト

アンダースコアを使って複数の単語を区切る

概要

2つ以上の単語で構成される場合は、アンダースコアを使って区切る

input_stream

参考サイト

大文字の使い分け

概要

  • サブルーチン、メソッド、変数、ラベル付き引数の名前は小文字のみ
  • パッケージ、クラスには大文字と小文字
  • 定数には大文字のみ
  • 例外として固有名詞や略語や単位はなじみのある表記に従う。(HTTP、W3C::XHTML、LaTeX、Mbps)

参考サイト

複数行の文字列はヒアドキュメントを使う

概要

改行で分割して記述する方法は見た目がよくないので、ヒアドキュメントを使用する

$usage = <<"END_USAGE"
Usage: $0 <file> [-o]
  -o : dump in octal
END_USAGE

参考サイト

クラスやメソッドどうしの区切りは空行を挿入

概要

クラスやメソッドどうしの区切りは空行を挿入する。ただし、最初や最後の場合は、空行を入れない。

class Hoge
...
end

class Fuga
...
end
class Hoge
  def foo
    ...
  end

  def bar
    ...
  end
end

メソッドは引数がある場合は、カッコを付ける

概要

メソッドは引数がある場合は、カッコを付ける。引数が無い場合は、カッコ省力する。

def hoge(x, y)
  ...
def

def huga
  ...
end

ブロック処理は、基本的にdo endを使用

概要

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

hoge.foreach do |i|
...
end
hoge.collect { |i| i.to_s }.join(",")

if文のthenは省略

概要

if文のthenは省略する。

if x > 0
  ...
else
  ...
end

if !xはunless xに置き換える

概要

if !xはunless xに置き換える。

unless hoge

end

文字列リテラルには基本的に"..."を使用

概要

文字列リテラルには基本的に"..."を使用する。ただし、特殊文字を解釈させたくない場合のみ、'...'を使用する。

hoge = "fuga"

クラス名とモジュール名は、単語の1文字目を大文字で、区切り文字は使用しない

概要

クラス名とモジュール名は、単語の1文字目を大文字で使用する。区切り文字は使用しない。

HogeFuga

メソッド名は、すべて小文字で単語の区切りはアンダースコアを使用

概要

メソッド名は、すべて小文字で単語の区切りはアンダースコアを使用する。

hoge_fuga