文字列展開(式展開)は、文字列の中に変数や式の結果を埋め込む機能です。Rubyでは#{}を使って、ダブルクォーテーションで囲まれた文字列の中に任意の値を挿入できます。文字列を+で連結するよりも簡潔で読みやすいコードが書けるため、Rubyプログラミングでは非常に多用されます。
基本的な使い方
式展開は"#{式}"の形式で記述します。ダブルクォーテーション(")の文字列内でのみ有効です。
name = 'Ruby'
version = 3.2
# 式展開を使った文字列
puts "言語名: #{name}"
puts "バージョン: #{version}"
puts "#{name}は楽しいプログラミング言語です"言語名: Ruby
バージョン: 3.2
Rubyは楽しいプログラミング言語です#{}の中に変数名を書くと、その変数の値が文字列に埋め込まれます。数値やその他のオブジェクトも自動的に文字列に変換(to_sが呼ばれる)されるため、明示的な型変換は不要です。
シングルクォーテーションでは使えない
式展開が有効なのはダブルクォーテーションの文字列のみです。シングルクォーテーションでは#{}がそのまま文字として出力されます。
name = 'Ruby'
puts "ダブルクォーテーション: #{name}"
puts 'シングルクォーテーション: #{name}'ダブルクォーテーション: Ruby
シングルクォーテーション: #{name}この違いは非常に重要です。式展開を使いたい場合は必ずダブルクォーテーションを使ってください。シングルクォーテーションは式展開やエスケープシーケンス(\nなど)が不要な純粋な文字列に使います。
式展開で計算を行う
#{}の中には変数だけでなく、計算式やメソッド呼び出しなどの任意の式を書くことができます。
price = 1000
tax_rate = 0.1
puts "税込価格: #{(price * (1 + tax_rate)).to_i}円"
puts "2の10乗は#{2 ** 10}です"
puts "現在時刻: #{Time.now}"
puts "大文字変換: #{'hello'.upcase}"税込価格: 1100円
2の10乗は1024です
現在時刻: 2026-02-19 12:00:00 +0900
大文字変換: HELLO式展開の中では四則演算、メソッド呼び出し、条件式など、Rubyの式であれば何でも書けます。ただし、式が複雑になりすぎると可読性が下がるため、複雑な処理は事前に変数に代入してから式展開に使うのがおすすめです。
実践的な使い方
# ユーザー情報の表示
first_name = '太郎'
last_name = '田中'
age = 25
puts "名前: #{last_name} #{first_name}"
puts "年齢: #{age}歳"
puts "来年の年齢: #{age + 1}歳"
# 配列と組み合わせ
fruits = ['りんご', 'バナナ', 'みかん']
puts "果物は#{fruits.length}種類あります"
puts "一覧: #{fruits.join('、')}"名前: 田中 太郎
年齢: 25歳
来年の年齢: 26歳
果物は3種類あります
一覧: りんご、バナナ、みかん+演算子と式展開の比較
name = '太郎'
age = 25
# +演算子(読みにくい)
puts '名前は' + name + 'で、年齢は' + age.to_s + '歳です。'
# 式展開(読みやすい)
puts "名前は#{name}で、年齢は#{age}歳です。"名前は太郎で、年齢は25歳です。
名前は太郎で、年齢は25歳です。式展開を使えば、to_sによる型変換も不要で、コードがシンプルになります。Rubyでは文字列に変数を埋め込む場合、ほぼすべてのケースで式展開が推奨されます。
#{}内のオブジェクトは自動的にto_sメソッドが呼ばれて文字列に変換されます。数値、配列、nilなど、あらゆるオブジェクトを式展開に使えます。
式展開やエスケープシーケンスを使わない場合はシングルクォーテーション、使う場合はダブルクォーテーションという使い分けが一般的です。パフォーマンスの差はほぼないため、可読性を優先して選びましょう。
まとめ
#{}でダブルクォーテーション文字列内に変数や式を埋め込める- シングルクォーテーションでは式展開は無効
#{}内には計算式やメソッド呼び出しも書ける- 文字列結合(
+)よりも式展開の方が簡潔で推奨される - 式展開は自動で
to_sを呼ぶため、型変換が不要