仕事では Rails のプロジェクトに関わっていて、最近は RuboCop の導入と RuboCop による指摘箇所の修正を主に進めています。

最近の修正では、「文字列を囲むクオーテーションを統一する」に着手をして、今回の Rails プロジェクトでは「シングルクォート」に統一をしました。(正確には「基本はシングルクォートを使い、式展開や文字列内にシングルクォートがある場合はダブルクォートを使う」です。)

ただ、どちらを採用するのが良いのか、すごく悩みましたし、今でも本当にシングルクォートが良かったのか、悩んでいます。

多分、答えはないのですが、悩んだ過程やそのときに調べたことをブログ記事にまとめておきたいと思います。

RuboCop とは

RuboCop はコーディングスタイルをチェックする Ruby 向けの静的解析ツールです。

例えばインデントがズレていたり、今回の記事のようにシングルクォートとダブルクォートが混在していたり、その他たくさんのルールに対して Ruby のコードがコーディングスタイルに沿っているか、チェックしてくれます。

bbatsov/rubocop: A Ruby static code analyzer, based on the community Ruby style guide.

RuboCop のバージョン

この記事を書いているときの仕事の Rails プロジェクトで採用している RuboCop のバージョンは「0.49.0」です。

ちなみに、記事執筆時点の最新バージョンは「0.49.1」です。

RuboCop の初期値は「シングルクォート」

RuboCop の初期値は「シングルクォート」です。

Style/StringLiterals:
  EnforcedStyle: single_quotes
  SupportedStyles:
    - single_quotes
    - double_quotes
  # If `true`, strings which span multiple lines using `\` for continuation must
  # use the same type of quotes on each line.
  ConsistentQuotesInMultiline: false

https://github.com/bbatsov/rubocop/blob/master/config/default.yml#L1162

Rails の RuboCop の設定は「ダブルクォート」

これが一番、悩む原因なのですが、 Rails の RuboCop は「ダブルクォート」になっています。

# Check quotes usage according to lint rule below.
Style/StringLiterals:
  Enabled: true
  EnforcedStyle: double_quotes

https://github.com/rails/rails/blob/master/.rubocop.yml#L95

速度の問題

PHP だとシングルクォートの方が速い、という話を聞いたことがあるのですが、今はどうなんでしょうか。(右記は 2003 年の記事だけど、速度的にはほとんど変わらないらしい。 PHP のバージョンが書いてないのが気になるけど。 → php のシングルクォートはほんとうに早いのか – それマグで!

調べてみたら、 Ruby の場合は速度的にはほとんど変わらないらしいです。

参考

RuboCop のドキュメントにはどちらでも良いと書いてある

RuboCop のドキュメントには「どちらでも良いのでどちらかに統一しましょう」と書いてあります。

英語のドキュメント

Adopt a consistent string literal quoting style. There are two popular styles in the Ruby community, both of which are considered good—single quotes by default (Option A) and double quotes by default (Option B).

https://github.com/bbatsov/ruby-style-guide#consistent-string-literals

日本語のドキュメント

文字列リテラルの引用符は一貫したスタイルで使いましょう。 Rubyコミュニティでは、 デフォルトでシングルクォートを用いるもの (Option A)、 ダブルクォートを用いるもの (Option B) の二つのよく使われるスタイルがあって、 どちらも良いと考えられています。

https://github.com/fortissimo1997/ruby-style-guide/blob/japanese/README.ja.md#consistent-string-literals

他社(他者)はどちらを採用しているか

じゃあ他の会社や他のプロダクトはどうしているのかってことで、主に Google 検索と私の知っている Rails プロダクトの状況を調べてみました。

「うちはこうしているよ」とか「このプロダクトも調べて欲しい」などありましたら、コメントいただければ思います。

他社

永和システムマネジメント

Misoca

Forkwell

スパイスライフ

ドリコム(の中の人)

プロダクト

Rails

Redmine

  • RuboCop 無し(少しコードを読んで見たら、シングルクォートとダブルクォートの両方がありました)
  • https://github.com/redmine/redmine

Mastodon

Joruri

Errbit

合計

  • シングルクォート: 5
  • ダブルクォート: 2
  • どちらでもOK: 2
  • RuboCop 無し: 1

まとめ

以上、Ruby で文字列をシングルクォートで囲むかダブルクォートで囲むか、どちらを選択したらいいか悩ましい話でした。

上記の「合計」を見ると、シングルクォートでいいのかなと思いました。 RuboCop の初期値でもありますし。