0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails初学者】 RubyとRailsのメソッドの使い分けに悩む

Posted at

Ruby学習を進めていると「あれ、これはRubyのメソッド?Railsのメソッド?どっちを使えばいいの?」と迷うことが多くなりました。
Ruby と Rails のメソッドの使い分け について、今後のためにまとめていきます。

1. Ruby と Rails の関係性

基本構造

  • Ruby: プログラミング言語(C言語で実装)
  • Rails: Ruby をベースにしたWebアプリケーションフレームワーク
Rails(フレームワーク)
    ↓ 拡張
Ruby(言語)
    ↓ 実装
C言語

ActiveSupport の役割

RailsではActiveSupportがRubyの標準クラスを拡張して、便利なメソッドを追加しています。

Rails由来のメソッド例:

  • present?, blank?
  • try
  • exists?
  • in?
  • delegate

2. 代表的な違いと使い分け

(1) empty?vspresent?vsblank?

data = []

# Ruby 標準
data.empty?   # => true(空配列かどうか)

# Rails 拡張
data.present? # => false(「中身がある?」)
data.blank?   # => true(「空またはnil?」)
# より実践的な例
user_name = ""

# Rubyの場合
if user_name.nil? || user_name.empty?
  puts "名前が未入力です"
end

# Railsの場合
if user_name.blank?
  puts "名前が未入力です"
end

使い分け

  • Ruby empty?: 単純に「空かどうか」だけを判定
  • Rails present?/blank?: nil・空文字・空配列をまとめて判定できて便利

(2)any?vsexists?

# 配列に対して(Ruby Enumerable)
users = [user1, user2, user3]
users.any? { |u| u.active? }

# DBに対して(Rails ActiveRecord)
User.exists?(id: 1)
User.where(active: true).exists?

使い分け

  • any?:配列やEnumerableオブジェクト向け
  • exists?:DBクエリ向け(大量データでも効率的)

(3) Rubyの真偽値の特徴

Rubyでは「空配列も真」という特徴があるようです。

data = []

if data
  puts "空配列でも真になる" # ← こちらが実行される
else
  puts "偽"
end

# Rails のpresent?なら期待通りの動作
if data.present?
  puts "データあり"
else
  puts "データなし" # ← こちらが実行される
end

3. その他のよく使うRails拡張メソッド

try-nilセーフなメソッド呼び出し

# Ruby標準(nilチェックが面倒)
user&.profile&.name

# Rails拡張(読みやすい)
user.try(:profile).try(:name)

in?-包含判定

# Ruby標準
["active", "pending"].include?(status)

# Rails拡張(自然な読み方)
status.in?(["active", "pending"])

4. 実際の使い分け

基本方針

  1. 原則:Rubyのメソッドを優先した方がいいみたい

    • 標準的で壊れにくい
    • Ruby 知識があれば他のプロジェクトでも通用する
    • パフォーマンスが優れていることが多い
  2. Railsメソッドは便利さ重視で採用

    • present?/blank?は開発の現場で非常によく使われるようです。
    • DB関連は exists? などRails独自メソッドの方が効率的みたいです。
  3. こだわりすぎない

    • 書き換えは簡単
    • まずは読みやすく正しく動くコードを書く

判断フローチャート

やりたいことが明確
    ↓
Ruby メソッドで実現可能?
    ↓ Yes
Ruby メソッドを使用
    ↓ No(または煩雑)
Rails メソッドを検討
    ↓
より読みやすい・効率的な方を選択

5. まとめ

  • Ruby = 言語、Rails = フレームワーク(ActiveSupport で拡張)
  • empty?present?/blank? の違いを理解する
  • 配列には any?、DBには exists?
  • 迷ったらRuby優先、便利な場面でRails
  • 最終的には 書きやすさ・読みやすさ を優先

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?