カテゴリ: Ruby 更新日: 2026/02/26

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では、ブロックを記述するためにdo...end{}という2つの書き方が用意されています。どちらも「ブロックとしての役割」は同じですが、コードの読みやすさや意図を伝えるために使い分けられることが多く、これを理解しておくとRubyらしいきれいなコードを書けるようになります。


# do...end を使う例(複数行の処理)
[1, 2, 3].each do |n|
  puts n
end

# {} を使う例(1行で書ける処理)
[1, 2, 3].each { |n| puts n }

初心者がまず覚えておきたいのは、「処理が複数行になるなら do...end」「1行で終わるなら {}」というシンプルな基準です。これはRubyのスタイルガイドでも推奨されており、このルールに従うことでコードの形が自然と整い、他の人が読んだときの理解もスムーズになります。

  • do...end:複数行の処理に適しており、ブロックの範囲が視覚的に分かりやすい
  • {}:短い処理に向いており、一行で書くときにスッキリ見える

例えば次の例のように、処理が長くなる場合は do...end のほうが読み手の負担が少なく、プログラムの構造が明確になります。一方で、1行でまとまる処理なら {} を使ったほうが自然です。どちらかが正解というわけではなく、「状況に合わせて選ぶ」ことがRubyの書き心地の良さにつながります。

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などのメソッドでよく使われます。

Rubyのdo...endと{}の違いは何ですか?

どちらもRubyのブロック記法ですが、do...endは複数行の処理で使われ、{}は1行だけの処理で使うことが一般的です。どちらも同じ動作をしますが、可読性を意識して使い分けるのがポイントです。
関連記事:
カテゴリの一覧へ
新着記事
New1
Ruby
“すべてはオブジェクト”を体感!初心者向けRubyのオブジェクト指向入門【irbで学ぶ】
New2
Ruby
Rubyの標準入出力を完全ガイド!puts・print・pの違いとデバッグ活用法
New3
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
New4
Ruby
Rubyの文字エンコーディング入門!UTF-8・マジックコメント・外部/内部エンコーディングを完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.7
Java&Spring記事人気No7
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.8
Java&Spring記事人気No8
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説