Rubocopにダブルクォーテーションを指摘させない方法

f:id:endoakak:20200727195612j:plain

Rubocopは、インデントや改行やスペースなどコードの書き方におかしいところがないかをチェックしてくれる便利なツールです。

課題のアプリ作成中に使っていて、「シングルクォーテーションにしなさい」という注意が100件以上きたので、クォーテーションについて文句を言わないようにする方法を調べました。

f:id:endoakak:20200805103434p:plain

クォーテーションだけが原因ではないけど、246箇所って…笑

Rubocopの導入

gemをインストールします。開発段階でしか使わないので、gemfileのdevelopmentの中に記述します。

group :development do
  gem 'rubocop', require: false
end
% bundle install
% touch .rubocop.yml

touch .rubocop.ymlはrubocopの設定ファイルを作成するためのコマンドです。

本題 クォーテーションについてのチェックを無効化

クォーテーションについてデフォルトでは、ダブルにする必要がないところではシングルを使うように設定されているみたいです。

クォーテーションのチェックを無効化するにはrubocop.ymlにこれを追加すればOK。

Style/StringLiterals:
 Enabled: false

クォーテーションについて何も言わなくなります。

ダブルクォーテーションとシングルクォーテーションのどっちを使うべき?

そもそもダブルクォーテーションを使うのは良くないことなのか、調べてみたけど人によるのかなーという印象でした。

ダブルとシングルの違い

ダブルクォーテーションもシングルクォーテーションも、文字列を表すときに使います。私の知る限り、唯一の違いは変数などを埋め込むことができるか否か。変数を埋め込みたいときはダブルでなければいけません。

例えばこんな感じです。

name = "taro"
puts "私の名前は#{name}です"

この場合は「私の名前はtaroです」と出力されます。

一方シングルクォーテーションではこうなります。

name = "taro"
puts '私の名前は#{name}です'

この場合は「私の名前は#{name}です」とそのまま出力されます。これで出力したいことって滅多にないですよね。

多分ダブルクォーテーションとシングルクォーテーションの違いはこれだけです。つまり、ダブルでしかできないことはあるけどシングルでしかできないことは(ほぼ)ないです。

シングルクォーテーションを使った方がいいのか?

調べた感じ、変数を埋め込まないときはシングルクォーテーションを使った方がいいと言う意見もありました。その言い分としては

  • 埋め込みがあるかないかの区別がしやすい
  • ダブルだと機械の負担が増えて遅くなる
  • シングルの方が見やすい

一方で、シングルクォーテーションを使わない派としては

  • Rubyに関してはダブルでも速さはほとんど変わらない
  • 別にシングルだからと言って埋め込みの区別や見やすさに大して影響がない
  • ダブルでいいのにわざわざシングルと使い分ける必要なくない?

という感じでした。

まとめ

  • Rubocopはコードの書き方をチェックしてくれるツール
  • StringLiteralsについてのチェックを無効にすることでクォーテーションについて何も言わなくなる
  • シングルクォーテーションを使う意味はあまりない