Rails+Docker+VSCodeという環境でVSCodeから表示された警告がみたことがなかったのでメモ。
TL;DR
- Rubyのバージョンアップは大事(特にパッチレベル)
- Rubyのバージョンのパッチバージョンが上がったらバージョンアップするべし
- Dockerの場合は端末側のRubyのバージョン指定も変更するべし
動作環境
21/04時点での動作環境です。
MacOS | Catalina(10.15.7) |
VSCode | 1.55.0 |
Ruby | 2.7.3 |
Rails | 6.0.3.6 |
内容
VSCodeに突然下記のような警告が表示されるようになりました。
warning: parser/current is loading parser/ruby27, which recognizes warning: 2.7.3-compliant syntax, but you are running 2.7.2. warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri. cannot load such file -- rubocop-rspec
特にRailsやDockerの設定を変えた覚えはなかったのでとても焦りました。
原因
parser
というgemが原因でした。
上記のコメントの中にgithubへのリンクがあったのでその内容をgoogle先生で直訳すると
パーサーはセマンティックバージョニングを使用しません。パーサーのバージョンは次のように構成されますx.y.z.t。ここで、x.y.zはサポートされている最新のRubyリリースを示し(時系列的に早いすべてのRubyリリースのサポートを意味します)、t単調に増加する数です。
という内容が書かれていました。
「じゃあいいじゃん、問題ないじゃん」
という話になるのですが、その下に
Unfortunately, Ruby MRI often changes syntax in patchlevel versions. This has happened, at least, for every release since 1.
と書かれています。
直訳すると、
残念ながら、RubyMRIはパッチレベルバージョンで構文を変更することがよくあります。これは、少なくとも1.9以降のすべてのリリースで発生しています。
どうやらRubyMRIでパッチレベルバージョンでの構文の変更が今回の警告に影響したようです。
解決法
Rubyのバージョンを上げて、それに伴う変更を行いましょう。
それで解決する(はず)です。
今回の内容はDocker環境・非Docker環境でも流れは一緒(のはず)です。
例えば今回の内容であれば(2.7.2
から2.7.3
へバージョンアップ)、
- 使用しているプロジェクトのルートディレクトリで
.ruby-version
の数値を変更する(2.7.2
->2.7.3
) - ローカルでrbenvを使用しているなら
- ruby-buildのアップグレード(brewのアップデートも必要)
- rbenvで新しいバージョンのrubyをインストール
- 使用しているプロジェクトに新しいバージョンを適用する
といった感じです。
これを手順化すると下記になります(rubyのバージョンはご自身の状況に合わせてください)。
手順1と手順4はそれなりに時間がかかります。
1.terminalで下記を実行してruby-buildのアップグレード、Rubyをインストール
brew update && brew upgrade ruby-build && rbenv install 2.7.3 && rbenv local 2.7.3 && rbenv rehash
2..ruby-version
の数値を変更
+ 2.7.3
- 2.7.2
3.Gemfile
にrubyのバージョンを明記していれば数値を変更
+ ruby '2.7.3'
- ruby '2.7.2'
4.Dockerfileを修正後docker-compose build --no-cache
でコンテナを再構築(Docker環境のみ対象)
+ FROM ruby:2.7.3
- FROM ruby:2.7.2
上記を実行して特にエラーが発生していなければVSCodeで適当なrubyファイルを開いて保存してみてください。
上記の警告は表示されなくなっていると思います。
以上です。
ありがとうございました。