シングルクォーテーションとダブルクォーテーションの違い（Rubyの文字列）

# シングルクォーテーションとダブルクォーテーション

Rubyでは文字列オブジェクトを作る方法がいくつかありますが、基本的な方法は、ダブルクオーテーション`(")`か、シングルクオーテーション`(')`で文字列にしたい文字を囲うことです。

```rb
"str"
'str'
"文字列"
'文字列'
```

# シングルクォーテーションとダブルクォーテーションの違い

## 改行文字列を埋め込みたい場合はダブルで囲む必要がある

他にもインデントを加える（`\t`）などのリテラルの特殊文字の機能を使うためにはシングルでは使えず、ダブルで加工必要がある。

```irb
irb(main):001:0> puts "あああ\nいいい"
あああ
いいい
=> nil

# 改行されてる

irb(main):002:0> puts 'あああ\nいいい'
あああ\nいいい
=> nil

# 改行されてない
```

## 式展開（#{ }）を埋め込みたい場合はダブルで囲む必要がある

```irb
irb(main):001:0> name = '佐藤'
=> "佐藤"
irb(main):002:0> puts "こんにちは、#{name}"
こんにちは、佐藤
=> nil
```

## シングルの中にシングル、ダブルの中にダブルを文字列として入れたい場合はバックスラッシュ

```irb
irb(main):001:0> puts '彼は言った\'こんにちは\''
彼は言った'こんにちは'
=> nil

irb(main):002:0> puts "彼は言った\"こんにちは\""
彼は言った"こんにちは"
=> nil
```

# シングルクォーテーション使う必要ある？

というのは、ググると記事としてよく見かけます。

シングルクォーテーション使う場合は、式展開や特殊文字が無いと判断しやすいとありますが、

https://necojackarc.hatenablog.com/entry/2015/09/12/220832

シンタックスハイライトは基本聞いた環境でプログラム書くので、あまりメリットでない。

また、特殊文字を使うかもよと機械に宣言するため、ダブルはシングルより機械に余計な配慮をさせるため、パフォーマンスが落ちる問題は、有意な差はないと書いてあります。

> Just use double-quoted strings
So if there's no meaningful performance difference between the two methods of Ruby string instantiation, shouldn't I just pick my favorite? Well, no. The absence of difference makes one better.

> Since there is no measurable performance advantage for either, any time (however marginal) spent thinking or talking about a choice between the two is wasted. When you prefer single quoted strings, you have to think when you need interpolation. When you use double quoted strings, you never have to think. (I'd also add, anecdotally, that apostrophes are more prevalent in strings than double quotes, which again means less thinking when using double-quoted strings.)

> Therefore always using double-quoted strings results in the least possible wasted time and effort.

https://www.viget.com/articles/just-use-double-quoted-ruby-strings/

> ダブルクォートされた文字列を使うだけです
だから、Rubyの文字列インスタンス化の2つのメソッドの間に意味のあるパフォーマンスの違いがない場合、私はただ自分の好みを選んではいけませんか？ うーん、ダメ。 違いがなければ、より良いものになります。

> 測定可能なパフォーマンス上の利点はないので、2人の間の選択について考えたり、話したりするのに費やされる時間は（わずかながらも）浪費されます。 一重引用符で囲まれた文字列が好きなときは、補間が必要なときに考える必要があります。 二重引用符で囲まれた文字列を使用する場合は、決して考える必要はありません。 （二重引用符よりも文字列にアポストロフィが多く見られますが、二重引用符を使用すると考えにくくなります

> したがって、二重引用符で囲まれた文字列を使用すると、無駄な時間と労力を最小限に抑えることができます。

[Google翻訳](https://translate.google.com/?hl=ja#en/ja/Just%20use%20double-quoted%20strings%0ASo%20if%20there's%20no%20meaningful%20performance%20difference%20between%20the%20two%20methods%20of%20Ruby%20string%20instantiation%2C%20shouldn't%20I%20just%20pick%20my%20favorite%3F%20Well%2C%20no.%20The%20absence%20of%20difference%20makes%20one%20better.%0A%0ASince%20there%20is%20no%20measurable%20performance%20advantage%20for%20either%2C%20any%20time%20(however%20marginal)%20spent%20thinking%20or%20talking%20about%20a%20choice%20between%20the%20two%20is%20wasted.%20When%20you%20prefer%20single%20quoted%20strings%2C%20you%20have%20to%20think%20when%20you%20need%20interpolation.%20When%20you%20use%20double%20quoted%20strings%2C%20you%20never%20have%20to%20think.%20(I'd%20also%20add%2C%20anecdotally%2C%20that%20apostrophes%20are%20more%20prevalent%20in%20strings%20than%20double%20quotes%2C%20which%20again%20means%20less%20thinking%20when%20using%20double-quoted%20strings.)%0A%0ATherefore%20always%20using%20double-quoted%20strings%20results%20in%20the%20least%20possible%20wasted%20time%20and%20effort.)

であれば、ダブル一択でいいのではと思いました。今日は以上です。

# 参考

- https://ruby-doc.org/core-2.5.1/String.html
- https://necojackarc.hatenablog.com/entry/2015/09/12/220832
- https://www.viget.com/articles/just-use-double-quoted-ruby-strings/