8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【RuboCop】複数行の引数の最後の値にカンマを付けたい

Last updated at Posted at 2020-02-07

複数行の配列や引数を書くとき

最後にカンマを付けない派

seeds.rb
User.create!(
  name: 'foo bar',
  email: 'foo@baa.com',
  password: 'password',
  password_confirmation: 'password'
)

rubocop -aで自動整形すると、デフォルトでは上記のように整形されます。
ruby以外の言語だと、引数や配列の最後にはカンマを付けるとエラーになったりするので、一般的に使われている書き方だと思います。

最後にカンマを付ける派

seeds.rb
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です。

.rubocop.yml
Style/TrailingCommaInArguments:
  EnforcedStyleForMultiline: comma

Style/TrailingCommaInArrayLiteral:
  EnforcedStyleForMultiline: comma

Style/TrailingCommaInHashLiteral:
  EnforcedStyleForMultiline: comma

これでrubocop -aを実行したときに引数/配列/ハッシュの値にカンマがつくようになります。commaconsistent_commaにしても同様の結果が得られます。

consistent_commacomma の違い

こちらのようなドキュメントを読んでも違いがわからなかったのでいくつか試してみたところ、複数行に引数を書きつつも、1行に複数の引数がある場合に違いが出る事がわかりました。

seeds.rb
# 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だと付きません。

ちょっとハマったところ

下記の様にメソッドの行から引数を書き始めると、どの設定にしても下記のように整形されてしまいますのでご注意ください。

seeds.rb
User.create!(name: 'foo bar',
             email: 'foo@baa.com',
             password: 'password',
             password_confirmation: 'password')

なお古いバージョンのrubocopでは引数/配列/ハッシュでのカンマ有無をすべてStyle/TrailingCommaで設定していたようですが、現在こちらは削除されているので使えません。

参考

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?