Rubyの%記法のまとめ

Ruby on Rails

こんにちは!ゆきまさです!!(@yyykms

Rubyの勉強をしていくうちに、%から始まる記述をよく見かけるようになって、いくつか種類があるのを知りました。

そこで今回は、Rubyで使う%記法についてまとめてみました。

はじめに

%記法とは、文字列や正規表現で使用するシングルクォート(')やダブルクォート(")、エスケープ(\)などを省略することができ、また配列では文字列やシンボルを簡単に記述することができます。

p %w!Ruby PHP!
#=> ["Ruby", "PHP"]
p %i(Ruby PHP)
#=> [:Ruby, :PHP]

これらは上記の例ように、「!」などの非英数字で区切ることによって表現することができます。

また、始まりの区切り文字がカッコである場合は、終わりの区切り文字はそれに対応するカッコとなります。

カッコを区切り文字にした場合に、始まりと終わりの対応ができていれば区切り文字と同じカッコを含めることができます。

%(())  #=> "()"

%記法

Rubyの%記法は以下のような種類があります

  • %、%Q(ダブルクォート文字列)
  • %q(シングルクォート文字列)
  • %x(コマンド出力)
  • %r(正規表現)
  • %w(文字列の配列)
  • %W(文字列の配列):式展開等が有効
  • %s(シンボル)
  • %i(シンボルの配列)
  • %I(シンボルの配列):式展開等が有効

詳しくは以下のとおりです。

%、%Q(ダブルクォート文字列)

%と%Qはダブルクォートで囲んだことと同じになります。

また、ダブルクォートなので改行文字や変数、定数の式展開が使用できます。

puts %(今日は"晴れ"です!)
#=> 今日は"晴れ"です!
puts %Q(今日は"晴れ"です!)
#=> 今日は"晴れ"です!

weather = "雨"
puts %(今日は"#{weather}"です!)
#=> 今日は"雨"です!
puts %Q(今日は"#{weather}"です!)
#=> 今日は"雨"です!

%q(シングルクォート文字列)

シングルクォートで囲んだことと同じになります。

シングルクオートなので、変数や定数の式展開はされません。

puts %q(今日は"曇り"です!)
#=> 今日は"曇り"です! 

%x(コマンド出力)

コマンドの出力を行います。

また、バッククオートで囲った場合と同じです。

p %x(date)
#=>  2019年 7月 9日 火曜日 21時51分21秒 JST

%r(正規表現)

正規表現のパターンをスラッシュで囲んだことと同じになります。

エスケープする必要が無くなり、また式展開も可能です。

p %r(http://example.com)
#=> /http:\/\/example\.com/

url = "http://example.com"
p %r(#{url})
#=> /http:\/\/example\.com/

%w(文字列の配列)

カンマではなく空白文字(スペースや改行)によって文字列の配列を作ります。

式展開はされません。

array = %w(Ruby PHP Java)

p array
#=> ["Ruby", "PHP", "Java"]

%W(文字列の配列)

%wと同じで文字列の配列を作りますが、式展開や空白文字を含めることができます。

値にスペースを含めたい場合はバックスラッシュでエスケープすることができます。

ruby = "Ruby"
PHP = "PHP"

p %W(#{ruby} #{PHP} Java)
#=> ["Ruby", "PHP", "Java"]

p %W(Ruby Ruby\ on\ Rails)
#=> ["Ruby", "Ruby on Rails"]

%s(シンボル)

シンボルを作成することができます。

式展開やバックスラッシュ記法はできません。

p %s(Ruby)
#=> :Ruby

%i(シンボルの配列)

カンマではなく空白文字(スペースや改行)によってシンボルの配列を作ります。

式展開はされません。

array = %i(Ruby PHP Java)

p array
#=> [:Ruby, :PHP, :Java]

%I(シンボルの配列)

%iと同じでシンボルの配列を作りますが、式展開や空白文字を含めることができます。

値にスペースを含めたい場合はバックスラッシュでエスケープすることができます。

ruby = "Ruby"
PHP = "PHP"

p %I(#{ruby} #{PHP} Java)
#=> [:Ruby, :PHP, :Java]

p %I(Ruby Ruby\ on\ Rails)
#=> [:Ruby, :Ruby on Rails]

まとめ

%記法を使うとダブルクォートやシングルクォートを省略できるので短く書くことができます。

また可読性が上がりバグの減少にもつながると思いますのでぜひ活用してみてください!

参考記事