複数行の配列や引数を書くとき
最後にカンマを付けない派
User.create!(
name: 'foo bar',
email: 'foo@baa.com',
password: 'password',
password_confirmation: 'password'
)
rubocop -a
で自動整形すると、デフォルトでは上記のように整形されます。
ruby以外の言語だと、引数や配列の最後にはカンマを付けるとエラーになったりするので、一般的に使われている書き方だと思います。
最後にカンマを付ける派
User.create!(
name: 'foo bar',
email: 'foo@baa.com',
password: 'password',
password_confirmation: 'password',
)
分かりづらいですが、先程の例と比べると、最後の引数の後にカンマが付いているのが分かります。
rubyでは上記のように最後の引数にカンマを付けても問題なく動きます。
慣れていないと気持ち悪く感じるかもしれませんが、引数を追加したい時などに素早くコピペできるので便利だったりします。
最後にカンマを付けるためのrubocopの設定
Style/TrailingCommaIn~~
を設定する
引数/配列/ハッシュでそれぞれ設定するスタイルが異なります。
種類 | スタイル名 |
---|---|
引数 | Style/TrailingCommaInArguments |
配列 | Style/TrailingCommaInHashLiteral |
ハッシュ | Style/TrailingCommaInArrayLiteral |
それぞれEnforcedStyleForMultiline
プロパティをcomma
またはconsistent_comma
に設定すればOKです。
Style/TrailingCommaInArguments:
EnforcedStyleForMultiline: comma
Style/TrailingCommaInArrayLiteral:
EnforcedStyleForMultiline: comma
Style/TrailingCommaInHashLiteral:
EnforcedStyleForMultiline: comma
これでrubocop -a
を実行したときに引数/配列/ハッシュの値にカンマがつくようになります。comma
をconsistent_comma
にしても同様の結果が得られます。
consistent_comma
と comma
の違い
こちらのようなドキュメントを読んでも違いがわからなかったのでいくつか試してみたところ、複数行に引数を書きつつも、1行に複数の引数がある場合に違いが出る事がわかりました。
# consistent_comma
User.create!(
name: 'foo bar',
email: 'foo@baa.com',
password: 'password', password_confirmation: 'password',
)
# comma
User.create!(
name: 'foo bar',
email: 'foo@baa.com',
password: 'password', password_confirmation: 'password'
)
分かりづらいですが、最後2つの引数を同じ行に書いています。
このようなときconsistent_comma
だと最後の引数にカンマが付き、comma
だと付きません。
ちょっとハマったところ
下記の様にメソッドの行から引数を書き始めると、どの設定にしても下記のように整形されてしまいますのでご注意ください。
User.create!(name: 'foo bar',
email: 'foo@baa.com',
password: 'password',
password_confirmation: 'password')
なお古いバージョンのrubocopでは引数/配列/ハッシュでのカンマ有無をすべてStyle/TrailingComma
で設定していたようですが、現在こちらは削除されているので使えません。