Rubyメモ: Ruby のコーディングスタイル

命名規則

Ruby では変数名のプレフィックスに記号をつけることにより、グローバル変数、インスタンス変数、クラス変数を区別します。

タイプ変数名のルール
ローカル変数英数字で始まるlocal_var
グローバル変数$ で始まる$global_var
インスタンス変数@ で始まる@instance_var
クラス変数@@ で始まる@@class_var

大文字、小文字の使い分けについては次のようにすることが多いようです。

  • クラス名は大文字で始める(例: MyClass
  • 変数名、メソッドは小文字で始める(例: my_varmy_method
  • 定数名はすべて大文字(例: MY_CONSTANT

インデント/スペース

  • インデントはスペース 2 文字(Ruby 公式サイトと同様)
  • 一行は 80 文字まで

文字列リテラル

  • 式展開の必要のない文字列リテラルはシングルクォーテーションで囲む(例: 'abc'
  • 式展開の必要がある文字列リテラルはダブルクォーテーションで囲む(例: "Hello #{name}"

ファイル名

ファイル名はすべて小文字で、クラス名などの単語の区切りはアンダースコア (_) を使用する。 モジュールの階層はディレクトリ階層で表現する。

  • test_case.rb(TestCase クラス)
  • unit/test_case.rb(Unit モジュール以下の TestCase クラス)

このルールは、下記の RubyGems の命名規則を考慮しています。

RubyGems で公開する Gem パッケージの命名規則

RubyGems.org などで公開する Gem の名前は、フラットなファイル名で一意に命名する必要があるため、アンダースコアやハイフンの使い方がルール化されています。

Gem nameRequire statementMain class or module
ruby_parserrequire 'ruby_parser'RubyParser
rdoc-datarequire 'rdoc/data'RDoc::Data
net-http-persistentrequire 'net/http/persistent'Net::HTTP::Persistent
net-http-digest_authrequire 'net/http/digest_auth'Net::HTTP::DigestAuth
  • ファイルシステムへの依存を防ぐため、Gem 名はすべて小文字。
  • モジュール名やクラス名の単語の区切りはアンダースコア (_) 。
  • 既存モジュールを拡張する場合の区切りはハイフン (-)。実際のモジュールファイルはディレクトリ構造を作って格納する。
  • 拡張が複数階層になった場合は、その分だけディレクトリ構造を掘り下げればよい。

例えば、net-http-digest_auth という名前の Gem が提供する DigestAuth クラスは、実際には下記のようなファイルとして作成されています。

net/http/digest_auth.rb
class Net::HTTP::DigestAuth
  VERSION = '1.4'
  ...
end

上記では Net::HTTP::DigestAuth と、:: 区切りでクラス定義していますが、上位のクラスが定義されていない場合は class 定義を入れ子構造で記述する必要があります。

クラスではなくモジュールを提供している場合は、例えば下記のようなファイルになります。

foo/bar/my_module.rb
module Foo
  module Bar
    module MyModule
      def self.my_method
        ..
      end
    end
  end
end

参考サイト