8
1

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 1 year has passed since last update.

あなたは知っている?Rubocop に教えてもらった Ruby の小ネタ5つ

Last updated at Posted at 2022-08-28

はじめに

Ruby 2.7 以降に追加された新しめの文法を5つ紹介します。
業務で Ruby のアップデート、および rubocop のアップデートをしました。
その際に学んだことですので、rubocop 関連の記事を参考にしています。

Rails/WhereExists 

where してから exists? するのではなく、exists? 単体でOK

# bad
User.where(name: 'john').exists?

# good
User.exists?(name: 'john')

Performance/MapCompact

map.compactfilter_mapで書き換えられる⚠︎
compact は自身から nil を取り除いた配列を生成して返します。
compact! は自身から破壊的に nil を取り除き、変更が行われた場合は self を、そうでなければ nil を返します。

# bad
ary.map(&:foo).compact
ary.collect(&:foo).compact

# good
ary.filter_map(&:foo)
# Enumerable#filter_map! というメソッドは存在しないので、以下のケースは例外となるので注意
ary.map(&:foo).compact!

⚠︎厳密には、置き換えられないケースもあります。
詳細は konic さんの記事を参照ください。

Performance/SelectMap

select.mapfilter_map で書き換えられる
ただし、good ケースの可読性について賛否があるので使用時は注意。

# bad
ary.select(&:foo).map(&:bar)
ary.filter(&:foo).map(&:bar)

# good
ary.filter_map { |o| o.bar if o.foo }

⚠︎単純な置き換えができない場合があります。

Rails/RedundantPresenceValidationOnBelongsTo

presence validatorは自動的に追加され、明示的なpresence validationは冗長

# bad
belongs_to :user
validates :user, presence: true

# good
belongs_to :user

Style/HashSyntax: Omit the hash value

ハッシュのキーと値が同じ場合は書かず、異なる (意図のある) 値は明示的に書く
これは Ruby3.1 からの追加されています。

# bad
{foo: foo, bar: bar}

# good
{foo:, bar:}

さいごに

全て知っていましたか?
自分はエンジニアになって5ヶ月ほどなので知らないことばかりでした!
実用性はともかく、更新される文法を追っていくのも楽しいですね!

参考

8
1
2

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?