キレイで読みやすいRubyコードを書くために。RuboCopスタイルガイド レイアウト編
- 2019.08.29
- Ruby on Rails
よこのじ(@yokonoji_work)です。
この記事は、RuboCopのThe Ruby Style Guide レイアウト編です。
キレイで読みやすいRubyコードを書きたい!ということで、Rubyのコード解析ツール RuboCop で採用されている「The Ruby Style Guide」の内容をまとめてみました。
処理内容が分かりやすくバグが少ないコードを書くために、ぜひ参考にさせてもらいましょう。
おすすめ本として必ず挙げられるリーダブルコードを読むのも良いと思います。
- 1. Ruby スタイルガイド(The Rails Style Guide)レイアウト編
- 1.1. インデントのスペースは2つにする
- 1.2. 1行につき1つの式を書く
- 1.3. 本文のないクラスは1行にする
- 1.4. 1行のメソッドは避ける
- 1.5. 演算子の前後、コンマ、コロン、セミコロンの後ろにはスペースを入れる
- 1.6. かっこ ( ) [ ] の前後にはスペース不要
- 1.7. !の後にはスペースは入れない
- 1.8. 範囲リテラルの内側にスペースは入れない
- 1.9. whenはcaseと同じ深さに揃える
- 1.10. 条件式を変数に代入するときは、 条件分岐のインデントを揃える
- 1.11. メソッド定義式の間には空行をいれ、 メソッド同士は論理的なかたまりに分ける
- 1.12. アクセス修飾子の前後には空行を入れる
- 1.13. メソッド、クラス、モジュール、ブロックの本文の前後には、空行を入れない
- 1.14. メソッド呼び出しの最後の引数の後ろのコンマは不要
- 1.15. メソッドの引数に初期値を割り当てるとき、 =演算子の前後にはスペースを入れる
- 1.16. 複数行のメソッドチェーンにおけるドット(.)の位置は統一する
- 1.17. メソッド呼び出しが複数行に及ぶときは引数を揃える
- 1.18. 複数行になる配列は要素を揃える
- 1.19. 大きな数値にはアンダースコアを付ける
- 1.20. その他の注意点
Ruby スタイルガイド(The Rails Style Guide)レイアウト編
インデントのスペースは2つにする
# 悪い例 - 4つのスペース def some_method do_something end # 良い例 def some_method do_something end
1行につき1つの式を書く
# 悪い例 puts 'foo'; puts 'bar' # 2つの式が1行にあります # 良い例 puts 'foo' puts 'bar' puts 'foo', 'bar' # putsの場合はこれも可
本文のないクラスは1行にする
# 悪い例 class FooError < StandardError end # 良い例 FooError = Class.new(StandardError)
1行のメソッドは避ける
# 悪い例 def too_much; something; something_else; end # 良い例 def some_method body end
演算子の前後、コンマ、コロン、セミコロンの後ろにはスペースを入れる
sum = 1 + 2 a, b = 1, 2 class FooError < StandardError; end
ただし、指数演算子、有理数のリテラル(rational literals)、safe navigation operator(ぼっち演算子)は例外です。
# 良い例 e = M * c**2 o_scale = 1/48r foo&.bar
かっこ ( ) [ ] の前後にはスペース不要
ただし、{ } の前後にはスペースを入れます。
# 悪い例 some( arg ).other [ 1, 2, 3 ].each{|e| puts e} # 良い例 some(arg).other [1, 2, 3].each { |e| puts e }
{ } を使う場合でも、文字の埋め込みではスペース不要です。
# 良い例
"From: #{user.first_name}, #{user.last_name}"
!の後にはスペースは入れない
# 悪い例 ! something # 良い例 !something
範囲リテラルの内側にスペースは入れない
# 悪い例 1 .. 3 'a' ... 'z' # 良い例 1..3 'a'...'z'
whenはcaseと同じ深さに揃える
# 悪い例 case when song.name == 'Misty' puts 'Not again!' when song.duration > 120 puts 'Too long!' else song.play end # 良い例 case when song.name == 'Misty' puts 'Not again!' when song.duration > 120 puts 'Too long!' else song.play end
条件式を変数に代入するときは、 条件分岐のインデントを揃える
# 悪い例 - かなり複雑です kind = case year when 1850..1889 then 'Blues' when 1890..1909 then 'Ragtime' else 'Jazz' end result = if some_cond calc_something else calc_something_else end # 良い例 kind = case year when 1850..1889 then 'Blues' when 1890..1909 then 'Ragtime' else 'Jazz' end result = if some_cond calc_something else calc_something_else end
メソッド定義式の間には空行をいれ、 メソッド同士は論理的なかたまりに分ける
def some_method data = initialize(options) data.manipulate! data.result end def some_method result end
アクセス修飾子の前後には空行を入れる
# 悪い例 class Foo attr_reader :foo def foo # do something... end end # 良い例 class Foo attr_reader :foo def foo # do something... end end
メソッド、クラス、モジュール、ブロックの本文の前後には、空行を入れない
# 良い例 class Foo def foo begin do_something do something end rescue something end end end
メソッド呼び出しの最後の引数の後ろのコンマは不要
# 悪い例 some_method(size, count, color, ) # 良い例 some_method(size, count, color)
メソッドの引数に初期値を割り当てるとき、 =演算子の前後にはスペースを入れる
# 悪い例 def some_method(arg1=:default, arg2=nil, arg3=[]) # do something... end # 良い例 def some_method(arg1 = :default, arg2 = nil, arg3 = []) # do something... end
複数行のメソッドチェーンにおけるドット(.)の位置は統一する
Rubyコミュニティでは次のどちらも良いとされていますが、どちらかの方法で統一すべきです。
one.two.three. four one.two.three .four
メソッド呼び出しが複数行に及ぶときは引数を揃える
# 悪い例 (インデントが倍) def send_mail(source) Mailer.deliver( to: '[email protected]', from: '[email protected]', subject: 'Important message', body: source.text) end # 良い例 def send_mail(source) Mailer.deliver(to: '[email protected]', from: '[email protected]', subject: 'Important message', body: source.text) end # 良い例 def send_mail(source) Mailer.deliver( to: '[email protected]', from: '[email protected]', subject: 'Important message', body: source.text ) end
複数行になる配列は要素を揃える
# 悪い例 menu_item = %w[Spam Spam Spam Spam Spam Spam Spam Spam Baked beans Spam Spam Spam Spam Spam] # 良い例 menu_item = %w[ Spam Spam Spam Spam Spam Spam Spam Spam Baked beans Spam Spam Spam Spam Spam ]
大きな数値にはアンダースコアを付ける
1_000のようにすると可動性が上がります。アンダーバーを付けても数値1000として扱われます。
# 悪い例 num = 1000000 # 良い例 num = 1_000_000
その他の注意点
- 1行は80字までにする
- 行末のスペースは避ける
- ファイルの終端には改行を入れる
- ブロックコメントは使わない
# 悪い例 =begin comment line another comment line =end # 良い例 # comment line # another comment line
以上、The Ruby Style Guide レイアウト編でした。
Rubyの記述方法として一般的なものばかりなので、このルールに従えば他の人からも読みやすいコードになるはずです。
- 前の記事
Ruby on Railsで削除ボタンを押したときに確認ダイアログを表示させる方法 2019.08.26
- 次の記事
記事がありません