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?

【Ruby入門】yieldとProcの違いを解説

Last updated at Posted at 2025-07-16

【Ruby初心者向け】yieldとProcの違いを自分なりに整理してみた

こんにちは!Rubyを勉強中の初学者です。

勉強していて「yield?Proc?何が違うの?」と混乱したので、
自分自身の理解を深めるためにこの記事を書いています。

同じように悩んでいる人の助けになればうれしいですし、
「ここは違うよ!」などアドバイスがあれば、ぜひコメントで教えてください🙏

1. yieldとは?

yield(イールド)は、メソッドに渡されたブロックを呼び出すためのキーワードです。

基本的な使い方

ruby
def greet
  puts "こんにちは"
  yield if block_given?
  puts "さようなら"
end

greet do
  puts "お元気ですか?"
end
実行結果
こんにちは
お元気ですか
さようなら

補足

  • yieldは、渡されたブロックをその場で「実行」する
  • block_given?でブロックが渡されたかどうかを確認できる
  • 引数付きのブロックも使える
ruby
def twice
  yield("朝")
  yield("夜")
end

twice do |time|
  puts "こんにちは、#{time}のごあいさつです!"
end
実行結果
こんにちは朝のごあいさつです
こんにちは夜のごあいさつです

2. Procとは?

Proc(プロック)は、ブロックをオブジェクトとして変数に格納できる仕組みです。Proc.newprocメソッドで作成し、あとで呼び出すことができます。

基本的な使い方

ruby
hello = Proc.new { puts "こんにちは from Proc!" }
hello.call
実行結果
こんにちは from Proc!

引数も渡せる

ruby
greet = Proc.new { |name| puts "こんにちは、#{name}さん" }
greet.call("太郎")
実行結果
こんにちは太郎さん

何度も使えるのが特徴

ruby
repeat = Proc.new { puts "何度でも呼べるよ!" }

3.times { repeat.call }
実行結果
何度でも呼べるよ
何度でも呼べるよ
何度でも呼べるよ

3. yieldProcの違い

比較項目 yield Proc
呼び出し方 yield proc.call または proc[]
ブロックの渡し方 メソッドに直接ブロックを渡す Procオブジェクトを引数で渡す
オブジェクトか ❌ オブジェクトではない ✅ オブジェクト
引数の定義 暗黙的に受け取る 明示的に引数を定義できる
再利用性 一度だけ(基本) 何度でも呼べる
柔軟性 シンプルだけど柔軟性は低め 高い柔軟性がある

4. 実践例(使い分けイメージ)

yieldが便利なケース

ruby
def with_log
  puts "処理を開始します"
  yield
  puts "処理が完了しました"
end

with_log do
  puts "実行中の処理"
end

#実行結果
処理を開始します
実行中の処理
処理が完了しました
  • 簡単な処理を、前後に挟むログ付きで実行したいときなどに便利

Procが便利なケース

ruby
def custom_each(array, proc)
  array.each { |item| proc.call(item) }
end

printer = Proc.new { |item| puts "アイテム:#{item}" }

custom_each([1, 2, 3], printer)

#実行結果
アイテム1
アイテム2
アイテム3
  • 処理を変数に入れて再利用したいときに便利

5. まとめ

観点 yield Proc
目的 渡されたブロックを一度実行 ブロックを変数として再利用
柔軟性 少し制限あり 柔軟に組み合わせや再利用が可能
向いている場面 シンプルなブロック実行 複数箇所で使う処理をまとめたいとき

おわりに

自分自身もまだまだRubyを学んでいる途中なので、
もし間違いや改善点などがあれば、ぜひ優しく教えてください!

この記事が、同じように学習中の方の助けになれば幸いです。
読んでくださってありがとうございました 😊

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?