本文書は、Rubyによりコーディングを行う際の規約について述べる。 実際のプロジェクトに適用する際には、このコーディング規約をカスタ マイズして用いることを推奨する。
プログラムを読みやすくするため、インデントを適宜行う。インデント 幅は2とする。また、インデントにはスペースのみを使用し、タブは使用 しない。(環境によりタブ幅が異なるため。)
例:
if x > 0 if y > 0 puts "x > 0 && y > 0" end end
一行の桁数は最大80桁までとする。
複数のクラスの区切には空行を挿入する。
例:
class Foo ... end class Bar ... end
誤った例:
class Foo ... end class Bar ... end
また、クラス内の各構成要素の区切にも空行を挿入する。 ただし、最初の構成要素の前や、最後の構成要素の後には空行は挿入し ない。
例:
class Foo attr :bar def baz ... end def quux .. end end
誤った例:
class Foo attr :bar def baz ... end def quux ... end end
メソッド定義の中にはコメントは記述しない。(コメントが必要だと思わ れるようなコードにはリファクタリングを行う。)
ただし、クラス・モジュールやパブリックなメソッドには仕様をRDocス タイルで記述する。
例:
# コンマ区切の文字列+str+を分割し、結果を配列にして返す。 def split_csv(str) return str.split(/,/) end
クラスの構成要素は以下の順序で記述する。
アクセサの定義には、attr_accessor
・attr_reader
・
attr_writer
を使用する。(attr
は使用しない。)
メソッド定義の仮引数リストには括弧を付ける。 ただし、引数がない場合は、括弧を省略する。
例:
def foo(x, y) ... end def foo ... end
誤った例:
def foo x, y ... end def foo() ... end
クラスメソッドの定義にはself
を使用する。
例:
class Foo def self.foo ... end end
誤った例:
class Foo def Foo.foo ... end end
メソッド呼び出しの引数リストには括弧を付ける。ただし、引数がない
場合は、括弧を省略する。また、print
やputs
やp
の
場合は、引数の括弧を省略してもよい。
例:
foo(1, "abc") obj.foo(1, "abc") bar print "x = ", x, "\n"
誤った例:
foo 1, "abc" obj.foo 1, "abc" bar()
ブロックは基本的にdo ... end
を使用する。
例:
foo(x, y) do ... end x = bar(y, z) do ... end
誤った例:
foo(x, y) { ... } x = bar(y, z) { ... }
ただし、メソッドチェインを行う場合は{ ... }
を使用する。
例:
s = ary.collect { |i| i.to_s }.join(",")
誤った例:
s = ary.collect do |i| i.to_s end.join(",")
メソッドの値を返す場合は、必ずreturn
を使用する。
また、returnの括弧は省略する。
例:
def add(x, y) return x + y end
誤った例:
def add(x, y) x + y end def add(x, y) return(x + y) end
yieldの呼び出し方法はメソッド呼び出しに準ずる。
if
式のthen
は省略する。また、if !x
のような場合は、
unless x
に置き換える。ただし、unless
の場合、
else
は使用しない。また、条件が十分に簡単で、一行で書ける場
合は、if
/while
修飾子を使用してもよい。
例:
if x > 0 puts "x > 0" else puts "x <= 0" end unless x puts "x is false" end puts "x is true" if x
誤った例:
if x > 0 then puts "x > 0" end unless x puts "x is false" else puts "x is true" end puts "foo && bar && baz && quux" if foo && bar && baz && quux
case
を使用できる場合は、case
を使用する。
また、then
は省略する。
例:
case x when 1 ... when 2 ... end
誤った例:
if x == 1 ... elsif x == 2 ... end case x when 1 then ... when 2 then ... end
条件分岐の式の値は使用しない。
例:
if x > 0 msg = "x > 0" else msg = "x <= 0" end
誤った例:
msg = if x > 0 "x > 0" else "x <= 0" end
while
のdo
は省略する。また、while !x
のような場合は、
until x
に置き換える。
例:
while cond ... end until cond ... end
誤った例:
while cond do ... end
また、無限ループにはloop
を使用する。
例:
loop do ... end
誤った例:
while true ... end
論理演算には!
や&&
や||
を使用する。
(not
/and
/or
は使用しない。)
明らかに可読性に問題がない場合を除いて、三項演算子はなるべく使用しない。 とくに、括弧が必要なほど条件が複雑な場合や、複数行になってしまう 場合は、三項演算子は使用しない。
文字列リテラルには基本的に"..."
を使用する。ただし、特殊文字
を解釈させたくない場合のみ、'...'
を使用する。
また、原則的にヒアドキュメントは使用しない。
eo = ExampleObject.new
)クラス・モジュール名は、各単語の一文字目を大文字にし、`_'などの区切 文字は使用しない。 ただし、HTTPなどの略語の場合はすべて大文字のままとする。
例:
ExampleClass HTTPClient
誤った例:
Example_Class EXAMPLE_CLASS HttpClient HTTPclient HTTP_Client
メソッド名は、すべて小文字とし、単語の区切りに`_'を用いる。メソッ ド名には動詞の原形を使用する。
例:
add_something
誤った例:
addsSomething Add_Something
真偽値を返すメソッド名は、動詞または形容詞に`?'を付け、形容詞に `is_'は付けない。
例:
visible?
誤った例:
is_visible is_visible?
また、破壊的なメソッドと非破壊的なメソッドの両方を提供する場合、破 壊的なメソッドには`!'を付ける。
例:
split split! # splitの破壊的バージョン
クラス・モジュール名以外の定数名は、すべて大文字とし、単語の区切 りに`_'を用いる。
例:
EXAMPLE_CONSTANT
変数名は、すべて小文字とし、単語の区切りに`_'を用いる。
例:
tmp local_variable @instance_variable $global_variable
ファイル名は、すべて小文字とし、単語の区切りに`-'を用いる。 また、ファイル中の主な定義クラスの名前を変換したものをファイル名 に使用する。(モジュールを名前空間として使用する場合は、ディレクト リを使用して階層構造を表現する。)
例:
foo.rb # クラスFooを定義 foo-bar.rb # クラスFooBarを定義 foo/bar-baz.rb # クラスFoo::BarBazを定義
Copyright (C) 2007 Shugo Maeda
licensed under Creative Commons Attribution License