Rubyの文字列リテラルの種類と使い分け方

Rubyでは文字列リテラルの記述にダブルクォート("),シングルクォート('),そして%記法が使える.Rubyでコードを書く上でそれぞれをどのように使い分ければいいか迷ったことがある人も多いのではないかと思う.というわけで自分なりの使い分け方を簡単にまとめてみることにした.

文字列リテラルの括りの種類

ダブルクォート ("str")
  • バックスラッシュ記法 ("\n"など) や式展開 ("#{exp}") が使える
  • 文字列中のダブルクォートはバックスラッシュでエスケープする必要がある ("\"")
シングルクォート ('str')
  • バックスラッシュ記法や式展開は使えない
  • 文字列中のシングルクォートはバックスラッシュでエスケープする必要がある ('\'')
%記法 (%!str! や %Q{str} など)
  • 文字列を任意の非英数字で括ることができる.
  • %!str! や %Q!str! はダブルクォート文字列と同様にバックスラッシュや式展開が使える.文字列中のダブルクォートのエスケープは必要ない.
  • %q!str! はシングルクォート文字列と同様にバックスラッシュや式展開が使えない.文字列中のシングルクォートのエスケープは必要ない.

括りの使い分け方

  • バックスラッシュ記法や式展開を使うかどうかにかかわらず,基本的にダブルクォートを使う.
  • 文字列中にダブルクォートが2回以上出現してエスケープが面倒な場合は,バックスラッシュ記法や式展開が有効な%記法 (%!str!) を使う.
  • シングルクォートは基本的に使わない.

ダブルクォートを優先的に使う理由

  • シングルクォートは後の修正でバックスラッシュ記法や式展開が必要になった時に括りをダブルクォートに変える必要があり面倒.また,うっかり括りを変えずにそのままバックスラッシュ記法や式展開を追加してしまうと意図通りの文字列にならずenbugしてしまう可能性がある.そのため,シングルクォートはあまり使わない方がいいと思う.
  • %記法は基本的に見た目が文字列らしくなくなるので,\"を何度も書かなければならないケースを除いてダブルクォートを優先的に使った方がいい.

以上

というわけで,迷ったらダブルクォートを使うといいと思います.