検索が一瞬でできる!Ruby on Railsのpluckの使い方【初心者向け】
Ruby on Railsで書くpluckの使い方について解説しています。pluckを利用すればモデル内の検索が一発でできます。他のメソッドと比較して紹介しているので、どんな時に便利なのか理解できるはずです。
TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。
RubyのフレームワークのRuby on Railsにはpluckという機能が存在します。これを活用すればモデルの探索を高速に行うことが可能となります。それではpluckについて解説していきたいと思います。
なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

今回はpluckについて学習しよう。

田島メンター!!pluckは何をするんですか〜?

pluckは指定したカラムの配列を取得するときに使用するんだ。具体的な書き方を見てみよう。

はい!
pluckを使用してみる。
pluckは指定したカラムの配列を取得することができます。
User.pluck(:id) #=>[1,2,3]
上記のように指定したモデルの指定したカラムを配列で返すことができます。
また以下のように複数のカラムを指定することも可能となっています。
User.pluck(:id,:name) #=>[[1,Tarou],[2,Hanako],[3,Toshi]]
複数のカラムを指定した場合配列の配列で値が帰ってきます。

このUser.pluck(:id)というのはどこで行うんですか?

pluckを行う前にまずrails console(あるいはrails c)を実行しよう。そこから取得を行うよ。終了するときはexitだね。

なるほど。idと名前、指定した値が配列で表示されました!
mapとの違い
pluckとよく似たメソッドにmapというものが存在します。
User.all.map(&id) #=>[1,2,3]
このように指定されたカラムの配列を返すことができます。それではmapとpluckの違いを解説していきたいと思います。
ソースコードの書きやすさ
例のソースコードを見てもわかる通りpluckは、ソースコードをmapよりもより簡単に書くことができます。上のような例だとあまり変わらないように感じますが、例えば、ランクが3以上のユーザーのidを取得したいと言った場合に、
#map使用 User.select(:id).where("rank > =?",3).map(&id) #pluck使用 User.where("rank>=?",3).pluck(:id)
と、より簡単に記入できていることが確認できます。
処理が早い
みなさんが現在コードを書くにあたってあまり意識しなくてもいい事ですが、将来大規模なRailsアプリケーションを開発した際に処理速度というのは非常に重要になってきます。pluckはmapに比べて標準的なデータベースの探索のみなら、約4倍程の速度を出せると言われています。
今回はpluckについて簡単に解説しました。pluckはモデルの検索を早く簡単に行う事ができます。是非マスターしておくようにしましょう。

最後にmapについて説明したよ。

mapよりもpluckの方が全体的に使いやすく、早いということですね。

もちろん例外もあるけれど、基本的にはpluckの方を使う形で問題ないと思うよ。積極的に利用していこう。

なるほど、分かりました。ありがとうございます!
[お知らせ]TechAcademyでは初心者でも8週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。RubyでWebアプリを開発したい方はご参加ください。