カテゴリ: Ruby 更新日: 2025/12/18

Rubyのブロック記法do...endと{}の違いを完全ガイド!初心者でもわかる可読性と選び方

ブロック記法 do...end と { } の選び方:引数・戻り値・可読性の指針
ブロック記法 do...end と { } の選び方:引数・戻り値・可読性の指針

先生と生徒の会話形式で理解しよう

生徒

「Rubyのプログラムでdo...endとか{}って出てくるんですけど、どう違うんですか?」

先生

「それはRubyのブロック記法と呼ばれるものですね。同じ意味を持ちますが、使い分けのルールや読みやすさに関係しています。」

生徒

「じゃあ、どっちを使えばいいんですか?」

先生

「よし、それでは具体的に例を交えて解説していきましょう!」

1. Rubyのブロックとは?

1. Rubyのブロックとは?
1. Rubyのブロックとは?

Rubyにおけるブロックとは、ある処理をひとまとまりにしてメソッドへ渡すための「小さな処理セット」のようなものです。難しく聞こえますが、実際には「この部分だけあとで実行してね」とメソッドに依頼するイメージに近く、Rubyでは非常に頻繁に使われます。ブロックを使うと、繰り返し処理などが驚くほどスッキリと書けるようになります。

例えば、配列の中身を順番に取り出して表示する処理は、ブロックを使うことで次のように簡潔に書けます。


# 配列の要素を1つずつ取り出して表示する
[1, 2, 3].each do |n|
  puts n   # n には順番に1,2,3が入る
end

1
2
3

do...endで囲まれた部分がブロックであり、|n|は「ブロック引数」と呼ばれるものです。配列の要素が1つずつこの変数に渡され、ブロック内部の処理が実行されます。プログラミング未経験の方でも、まずは「繰り返し処理を書くための便利な箱」と考えると理解しやすいでしょう。ブロックを扱えるようになると、Rubyのコードは一気に読みやすく、書きやすくなります。

2. do...endと{}の違い

2. do...endと{}の違い
2. do...endと{}の違い

Rubyでは、ブロックを表す方法として2つの書き方があります。


# do...endを使う場合
[1, 2, 3].each do |n|
  puts n
end

# {}を使う場合
[1, 2, 3].each { |n| puts n }

この2つはどちらも同じ意味を持ちます。ただし、Rubyコミュニティの慣習として次のように使い分けます。

  • do...end:複数行の処理に使う
  • {}:1行だけの短い処理に使う

こうすることで、コードの見やすさ(可読性)が向上します。

3. 可読性の指針

3. 可読性の指針
3. 可読性の指針

プログラムは自分だけでなく、他の人が読んだり、自分が数ヶ月後に読み返すこともあります。そのため、どちらのブロック記法を選ぶかは読みやすさがとても大切です。

例えば、処理が長くなると{}ではどこからどこまでがブロックなのか分かりづらくなります。


# 読みにくい例
users.each { |user| puts user.name; puts user.age; puts user.email }

この場合は、do...endを使った方が見やすくなります。


# 読みやすい例
users.each do |user|
  puts user.name
  puts user.age
  puts user.email
end

4. 引数と戻り値について

4. 引数と戻り値について
4. 引数と戻り値について

Rubyのブロックには引数戻り値があります。引数はブロックの中で使うために受け取る値、戻り値はブロックを実行した結果として返す値です。


numbers = [1, 2, 3]

# eachでは戻り値は配列そのもの
result = numbers.each do |n|
  puts n * 2
end

puts result.inspect

2
4
6
[1, 2, 3]

eachメソッドは戻り値として元の配列を返します。一方でmapメソッドは、ブロックの戻り値を集めた新しい配列を返します。


doubled = numbers.map { |n| n * 2 }
puts doubled.inspect

[2, 4, 6]

5. どちらを選べばいいのか?

5. どちらを選べばいいのか?
5. どちらを選べばいいのか?

ブロックの選び方には絶対的なルールはありませんが、Rubyのスタイルガイドや現場の慣習では次のように考えると良いです。

  • 処理が1行 → {}
  • 処理が複数行 → do...end

このルールに従うと、コードの見た目が整い、初心者でも理解しやすくなります。

また、メソッドチェーン(複数のメソッドをつなげる書き方)の場合は、{}を優先することが多いです。


# メソッドチェーンでは{}が読みやすい
result = [1, 2, 3].map { |n| n * 2 }.select { |n| n > 2 }
puts result.inspect

6. 初心者が混乱しやすいポイント

6. 初心者が混乱しやすいポイント
6. 初心者が混乱しやすいポイント

初心者の方が混乱しやすいのは、「どちらを使っても動くけど、書き方が違う」という点です。これはRubyが柔軟な文法を持っているためであり、最初は迷っても大丈夫です。

大事なのは、読みやすさを優先すること。最初はルールを守って書き、慣れてきたら状況に応じて使い分けられるようになると良いでしょう。

まとめ

まとめ
まとめ

Rubyのブロック記法であるdo...end{}は、どちらも同じようにブロックを表しながら、場面に応じて適切に選ぶことでコードの読みやすさを大きく向上させる非常に重要な書き方です。とくにRubyでは、配列操作や繰り返し処理、メソッドチェーンなどにブロックが頻繁に登場するため、正しいブロック記法を理解して使い分けることがプログラム全体の品質にも直結します。今回の記事では、Rubyのコード作成に欠かせないブロックの基本構造や、do...end{}の違い、使い分けの考え方、そして可読性を重視したスタイルのポイントなどを詳しく学んできました。これらの知識をしっかり身につけることで、実践的なRubyコードの書き方が理解しやすくなり、綺麗で保守しやすいコードを書く力が自然と養われます。 Rubyのブロックは「小さな処理のまとまり」であり、メソッド内で一時的に実行させたい処理を渡すために使われます。配列のeachやmapなどの代表的なメソッドはどれもブロックを受け取る形式が多いため、ブロック記法を覚えることで、Ruby言語の内部的な仕組みも理解しやすくなります。また、do...endは複数行の処理を書くときに視覚的に美しく、{}は短い記述で自然と読みやすくなるため、用途に応じてメリハリのあるコードを記述できます。このようにRubyではコードの美しさを大切にする文化があり、ブロック記法の選択はプログラマー同士のコミュニケーションにも影響するほど重要な役割を持っています。 さらに、読みやすさを意識した書き方をすることで、時間が経ってから読み返したときにもスムーズに理解できるようになります。特に初心者のうちは、どちらを使っても動くという事実が混乱を招きやすいポイントですが、まずは基本的なルールとして「1行→{}」「複数行→do...end」という指針を守るのが最も効果的な学習方法です。これを習慣化していくことで、自然とメソッドチェーンや複雑な処理でも適切な記法が選べるようになります。 また、ブロックには引数や戻り値という概念があり、配列操作のような場面では特に重要です。mapのように変換処理を行うメソッドでは、ブロックの戻り値が直接新しい配列に反映されるため、ブロック内でどのような処理を行っているかがコード全体の意図に深く関わります。Rubyの柔軟さは魅力であると同時に、読みやすさやメンテナンス性を意識しない書き方をすると、後から理解しづらくなる要因にもなります。そのため、今回のまとめでは、実際のコードで意識すべきポイントを踏まえながら、ブロック選択の基礎と応用を整理して理解しやすくしてあります。 最後に、今回の内容を踏まえて、Rubyのブロック記法を自然に扱えるようになるための簡単なサンプルコードを掲載しておきます。記法の違いや読みやすい書き方を復習しながら、どのように使い分けるかを確認してみましょう。

■ do...end と {} の使い分けを確認するサンプルコード


numbers = [1, 2, 3, 4, 5]

# 複数行の処理では do...end を使う
numbers.each do |n|
  doubled = n * 2
  puts "二倍の値:#{doubled}"
end

# 一行だけの処理は {} が読みやすい
squared = numbers.map { |n| n * n }

puts "二乗の配列:#{squared.inspect}"

# メソッドチェーンでは {} を使うことが多い
filtered = numbers.map { |n| n * 3 }.select { |n| n > 6 }
puts "三倍したあと六より大きい値:#{filtered.inspect}"

上記のサンプルでは、複数行と一行処理でブロック記法が自然に使い分けられており、Rubyらしい柔軟で読みやすいコードの書き方がよく分かる例となっています。とくにメソッドチェーンでは{}を優先することで、ブロックがどこで閉じているのかが視覚的に把握しやすくなり、複雑な処理を続けて書く場合にも混乱しにくくなります。また、Rubyの標準的な書き方として広く浸透しているスタイルでもあるため、この書き方に慣れておくことは非常に大切です。 Rubyのブロック記法は、柔軟性がありながらも読みやすさが重視されるため、自分自身や他のプログラマーが後で読みやすいコードを書くための重要なポイントとなります。今回紹介した考え方を意識しながら、実際のプログラムでも積極的に使い分けを練習することで、より洗練されたRubyコードが書けるようになるでしょう。

先生と生徒の振り返り会話

生徒:「今日のブロック記法の勉強で、do...end と {} の違いがすごくわかりやすく整理できました!」

先生:「それは良かったですね。Rubyでは読みやすさを大切にするので、その理解はとても重要ですよ。」

生徒:「今までどちらを使えばいいのか迷っていたんですけど、1行なら{}、複数行ならdo...endというルールが覚えやすかったです。」

先生:「そうですね。まずはその基本を守れば大丈夫です。慣れてきたらメソッドチェーンのときなど、状況に応じて判断できるようになりますよ。」

生徒:「あと、mapやeachで戻り値がどう変わるかも理解できました!」

先生:「ブロックの戻り値を把握することはとても大切です。配列操作で特に役立ちますからね。」

生徒:「サンプルコードも分かりやすくて、今後の練習に活かせそうです!」

先生:「その意欲があれば大丈夫です。これからも少しずつ経験を積んで、より良いRubyコードを書けるよう頑張りましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Rubyのブロックとは何ですか?初心者にも分かりやすく教えてください。

Rubyのブロックとは、処理のかたまりを意味するもので、メソッドに渡して実行できる小さなプログラムのようなものです。eachやmapなどのメソッドでよく使われます。
関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
Rubyのハッシュ走査を完全マスター!each・each_key・each_valueの使い方