Zenn
⚛️

Rubyの便利なメソッド20選!初心者から中級者まで使える活用例

2025/03/24に公開

はじめに

Rubyで開発を行うと様々なメソッドを利用します。この記事では、初心者から中級者まで役立つRubyのメソッドを厳選して20個ご紹介します。実際のコード例と実用的なシナリオを交えて解説します。

✅ 基本的な文字列操作

1. upcase / downcase - 文字列の大文字・小文字変換

文字列の大文字・小文字を統一する際に便利です。ユーザー入力の正規化などに使用されます。

"hello".upcase # => "HELLO"
"WORLD".downcase # => "world"

# 実用例: メールアドレスの正規化
email = "User@Example.com"
normalized_email = email.downcase # => "user@example.com"

2. capitalize - 先頭文字の大文字化

名前や文章の先頭文字を大文字にしたい場合に使用します。

"ruby programming".capitalize # => "Ruby programming"

# 実用例: 名前の整形
first_name = "john"
formatted_name = first_name.capitalize # => "John"

3. strip - 前後の空白を削除

ユーザー入力データの前後の空白を除去する際に非常に役立ちます。

"  Hello World  ".strip # => "Hello World"

# 実用例: フォーム入力のクリーニング
user_input = "   ruby@example.com   "
cleaned_input = user_input.strip # => "ruby@example.com"

4. chomp - 行末の改行を削除

ファイル読み込みやコマンドライン入力処理に便利です。

"hello\n".chomp # => "hello"

# 実用例: ファイル行の処理
File.readlines("sample.txt").map(&:chomp).each do |line|
  puts "処理中: #{line}"
end

5. gsub - パターン置換

テキスト内の特定パターンを置換するための強力なメソッドです。正規表現も使えます。

"Ruby is fun".gsub("fun", "awesome") # => "Ruby is awesome"

# 実用例: 電話番号の整形
phone = "090-1234-5678"
formatted_phone = phone.gsub("-", "") # => "09012345678"

🔢 数値操作

1. to_i / to_f - 文字列から数値への変換

ユーザー入力や外部データを数値として扱う際に必須のメソッドです。

"42".to_i # => 42
"3.14".to_f # => 3.14

# 実用例: 計算処理
price = "1200"
tax_rate = "0.1"
tax = price.to_i * tax_rate.to_f # => 120.0

2. abs - 絶対値の取得

数値の大きさだけを考慮したい場合に便利です。

-10.abs # => 10

# 実用例: 差分計算
actual_value = 85
expected_value = 100
difference = (actual_value - expected_value).abs # => 15

3. round - 四捨五入

小数点以下の桁数を指定して丸める際に使用します。

3.14159.round(2) # => 3.14

# 実用例: 金額計算
total = 1234.567
display_amount = total.round(2) # => 1234.57

4. even? / odd? - 偶数・奇数判定

値が偶数か奇数かを簡単に判定できます。条件分岐に便利です。

4.even? # => true
7.odd? # => true

# 実用例: テーブルの行に交互にクラスを適用
rows.each_with_index do |row, index|
  if index.odd?
    puts "odd-row: #{row}"
  else
    puts "even-row: #{row}"
  end
end

5. times - 指定回数の繰り返し

指定した回数だけ処理を繰り返すシンプルな方法です。

5.times { |i| puts "Iteration #{i}" }

# 実用例: テストデータの生成
users = []
3.times do |i|
  users << { id: i, name: "User #{i}" }
end
# => [{:id=>0, :name=>"User 0"}, {:id=>1, :name=>"User 1"}, {:id=>2, :name=>"User 2"}]

🗂 配列操作

1. push / pop - 配列への追加と取り出し

スタック操作のように配列の末尾にデータを追加したり、取り出したりできます。

arr = [1, 2, 3]
arr.push(4) # => [1, 2, 3, 4]
arr.pop # => 4
# arr は [1, 2, 3] になる

# 実用例: 履歴管理
history = []
history.push("開く")
history.push("編集")
history.push("保存")
last_action = history.pop # => "保存"

2. map - 要素の変換

配列の各要素に同じ処理を適用して新しい配列を作成します。データ変換に非常に便利です。

[1, 2, 3].map { |n| n * 2 } # => [2, 4, 6]

# 実用例: JSONデータの整形
users = [
  { name: "alice", age: "25" },
  { name: "bob", age: "30" }
]
formatted_users = users.map do |user|
  { 
    name: user[:name].capitalize,
    age: user[:age].to_i
  }
end
# => [{:name=>"Alice", :age=>25}, {:name=>"Bob", :age=>30}]

3. select - 条件に合う要素のフィルタリング

条件に一致する要素だけを集めた新しい配列を作成します。

[1, 2, 3, 4, 5].select { |n| n.odd? } # => [1, 3, 5]

# 実用例: 未完了タスクのフィルタリング
tasks = [
  { name: "書類作成", completed: true },
  { name: "会議", completed: false },
  { name: "メール返信", completed: false }
]
incomplete_tasks = tasks.select { |task| !task[:completed] }
# => [{:name=>"会議", :completed=>false}, {:name=>"メール返信", :completed=>false}]

4. reject - 条件に合わない要素のフィルタリング

selectの逆で、条件に一致しない要素を集めます。否定条件でのフィルタリングがより読みやすくなります。

[1, 2, 3, 4, 5].reject { |n| n.even? } # => [1, 3, 5]

# 実用例: 無効なデータの除外
inputs = ["apple", "", "banana", nil, "cherry"]
valid_inputs = inputs.reject { |input| input.nil? || input.empty? }
# => ["apple", "banana", "cherry"]

5. uniq - 重複要素の削除

配列から重複した要素を取り除いて一意な要素のみの配列を作成します。

[1, 2, 2, 3, 3, 3].uniq # => [1, 2, 3]

# 実用例: タグリストの重複排除
tags = ["ruby", "programming", "ruby", "web", "programming"]
unique_tags = tags.uniq # => ["ruby", "programming", "web"]

🔍 ハッシュ操作

1. keys / values - キーと値の一覧取得

ハッシュのキーのみ、または値のみを配列として取得します。

hash = {a: 1, b: 2, c: 3}
hash.keys # => [:a, :b, :c]
hash.values # => [1, 2, 3]

# 実用例: フォームのバリデーション
errors = {}
errors[:name] = "名前は必須です" if name.empty?
errors[:email] = "メールアドレスが無効です" unless email.include?("@")

if errors.keys.any?
  puts "入力エラーがあります:"
  errors.each { |field, message| puts "#{field}: #{message}" }
end

2. fetch - 安全なキー参照

存在しないキーにアクセスした場合のデフォルト値を指定できます。

hash = {a: 1, b: 2}
hash.fetch(:a) # => 1
hash.fetch(:z, 'Not Found') # => 'Not Found'

# 実用例: 設定値の取得
config = {timeout: 30, retries: 3}
timeout = config.fetch(:timeout, 60) # デフォルト値は60秒
max_size = config.fetch(:max_size, 1024) # :max_sizeがないのでデフォルト値1024が返る

3. merge - ハッシュの結合

複数のハッシュを1つにまとめることができます。後のハッシュのキーが優先されます。

{a: 1}.merge({b: 2}) # => {a: 1, b: 2}
{a: 1}.merge({a: 2}) # => {a: 2}

# 実用例: デフォルト設定とユーザー設定のマージ
default_settings = {theme: "light", font_size: 12, notifications: true}
user_settings = {theme: "dark"}
actual_settings = default_settings.merge(user_settings)
# => {:theme=>"dark", :font_size=>12, :notifications=>true}

4. transform_keys - キーの変換

ハッシュの全キーに対して同じ変換を適用します。

{"a" => 1, "b" => 2}.transform_keys(&:to_sym) # => {:a => 1, :b => 2}

# 実用例: JSONデータのキー正規化
api_response = {"userId" => 1, "userName" => "Alice"}
normalized_response = api_response.transform_keys { |key| key.downcase.to_sym }
# => {:userid=>1, :username=>"Alice"}

5. invert - キーと値を入れ替える

キーと値を入れ替えた新しいハッシュを作成します。

{a: 1, b: 2}.invert # => {1 => :a, 2 => :b}

# 実用例: 列挙型のマッピング
status_codes = {active: 1, pending: 2, inactive: 3}
status_names = status_codes.invert
# => {1=>:active, 2=>:pending, 3=>:inactive}

user_status = 2
status_name = status_names[user_status] # => :pending

📚 学習を深めるためのヒント

この記事では20個の便利なメソッドを紹介しましたが、Rubyにはまだまだ多くのメソッドがあります。
次のステップとして以下のカテゴリのメソッドを学んでみましょう:

  • Enumerable モジュール - each_with_index, inject, group_by などの強力なイテレーションメソッド
  • ファイル操作 - File.read, File.write, Dir.glob などのファイル処理メソッド
  • 時間・日付操作 - Timeクラスの strftime, parse などの日付処理メソッド

実践的なコード例

最後に、ここまで紹介したメソッドを組み合わせた実践的な例を紹介します:

# CSVデータの処理と集計
csv_data = <<~CSV
名前,年齢,都道府県
山田太郎,28,東京
佐藤花子,24,大阪
田中一郎,32,東京
鈴木次郎,30,愛知
CSV

# CSVパース
rows = csv_data.chomp.split("\n").map { |line| line.split(",") }
headers = rows.shift

# データ整形(mapとzip)
users = rows.map do |row|
  Hash[headers.zip(row)]
end

# 都道府県別集計(group_by)
by_prefecture = users.group_by { |user| user["都道府県"] }

# 結果出力
by_prefecture.each do |prefecture, prefecture_users|
  puts "#{prefecture}: #{prefecture_users.count}人"
  
  average_age = prefecture_users.map { |u| u["年齢"].to_i }.sum / prefecture_users.count
  puts "  平均年齢: #{average_age}歳"
  
  names = prefecture_users.map { |u| u["名前"] }.join(", ")
  puts "  ユーザー: #{names}"
  puts
end

ここまで読んで頂き誠にありがとうございました!!

※本記事は2部構成となっております。
本記事は1部目となり、続きの記事は以下よりお読み頂けます!
https://zenn.dev/osakayakyu/articles/11d812b4e8c1ea

Discussion

ログインするとコメントできます