はじめに
今回はタイトル記載の通り、「"」と「`」という違いだけでエラーが発生するのか、という事を知ったので、エラー発生から、どのような解決手法があるのかを記事にしていきたいと思います。
環境
- Windows, WSL
- Docker
- Ruby 3.2.3
- Rails 7.1.3
1:具体的なエラー内容
Run bin/rubocop -f github
bin/rubocop -f github
shell: /usr/bin/bash -e {0}
Error: Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
Error: Process completed with exit code 1.
2:エラーの原因:
-
Rubocopのルールでは、ダブルクォート(
" "
)を優先的に使うべきだという規則があり、シングルクォート(' '
)を使っている場合にエラーを出します - シングルクォートは、特定のエスケープ文字を避けたい場合のみ使うのが望ましいとされています。たとえば、文字列内にダブルクォートを含める場合です。
3:対処方法
エラー原因から察するに単純にシングルのコードをダブルにすればいいだけになります、いかんせん、どこに入力したのか全く覚えていません
調べえると次のような対処手順がありました。
具体的な手順、自分で探すのではなくコードを利用する!
エラーの数が多い場合、Rubocopには自動修正機能があります!
それを使ってまとめて修正していきます
-
以下のコマンドを実行して、自動でエラーを修正します。
bin/rubocop -a
- なんと
a
オプションを使うと、自動でコードを修正してくれます!
- なんと
-
そして再度下記を実行してエラーが解消されたか確認します
bin/rubocop -f github
実際の流れ(どんなものが出力されるのか)
$ docker compose exec web bash
# bin/rubocop -a
Inspecting 30 files
........................C.....
Offenses:
config/routes.rb:2:8: C: [Corrected] Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping.
root 'static_pages#top'
^^^^^^^^^^^^^^^^^^
30 files inspected, 1 offense detected, 1 offense corrected
はい、上記でRubocopが自動的に修正してくれたました
具体的に言うと、config/routes.rb
ファイルの2行目にあるシングルクォートを、Rubocopが自動的にダブルクォートに変更しています。
1 offense corrected
というメッセージが出ているので、Rubocopがこの箇所を修正したことが確認できます。
-
Before (修正前):
root 'static_pages#top'
-
After (修正後):
root "static_pages#top"
最後に、修正が正しく行われたかもう一度確認して終了になります
```
# bin/rubocop
Inspecting 30 files
..............................
30 files inspected, no offenses detected
```
さいごに
単に文字列を囲むクォートの使い方に関するエラーでしたが、エラーが発生したコードを探しに行くのではなく、Rubocopの自動修正機能を使うことで解消できるという事を知りました!!すごい。
今回の記事が何か参考になれば幸いです。