LoginSignup
3

More than 1 year has passed since last update.

エラーに遭遇(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.)

Last updated at Posted at 2021-04-18

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でパッチレベルバージョンでの構文の変更が今回の警告に影響したようです。

Backwards compatibility

whitequark/parser: A Ruby parser.

解決法

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をインストール

terminal
brew update && brew upgrade ruby-build && rbenv install 2.7.3 && rbenv local 2.7.3 && rbenv rehash

2..ruby-versionの数値を変更

.ruby-version
+ 2.7.3
- 2.7.2

3.Gemfileにrubyのバージョンを明記していれば数値を変更

Gemfile
+ ruby '2.7.3'
- ruby '2.7.2'

4.Dockerfileを修正後docker-compose build --no-cacheでコンテナを再構築(Docker環境のみ対象)

Dockerfile
+ FROM ruby:2.7.3
- FROM ruby:2.7.2

上記を実行して特にエラーが発生していなければVSCodeで適当なrubyファイルを開いて保存してみてください。
上記の警告は表示されなくなっていると思います。

以上です。
ありがとうございました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3