はじめに
こんにちは。Gakken LEAPで働いていますkoboriです。
VSCodeとRubyを使って開発をする場合、Rubyの拡張機能パック を使用される方は多いのではないかと思います。ご多分に漏れず私もその1人なわけですが、先日 拡張機能パックに含まれる ruby-lsp に関するエラーに遭遇しました。その際、エラーの解消にやや手間取ったので、解消方法とそのプロセスをまとめてみました。かいつまみながらでも読んでみていただけると嬉しいです。
用語の整理
まず初めに、ruby-lspに関する用語を下記に整理しておきます。
- ruby-lspサーバ: ローカルにインストールされたRuby Gem
- ruby-lspクライアント: VSCodeの拡張機能(ruby-lsp)に含まれる機能
今回遭遇したエラー
今回遭遇したエラーは、 こちらのissue に該当するもので、issueの記載にある通り、ruby-lspサーバ(gem)のバージョンが古いことが原因で発生していました。
Gemのバージョンアップは問題なくできた(つもりだった)のですが、ruby-lspクライアント(VSCodeの拡張機能)が参照するruby-lspサーバのバージョンが古いままであるために、エラーが解消されないというのが今回の問題でした。
先に結論
VSCodeの拡張機能のruby-lspが提供する、VSCodeのコマンドを実行することで、ruby-lspクライアントが参照するruby-lspサーバのバージョンを最新に更新することができます。
具体的な手順は下記の通りです。
- VSCodeのコマンドパレットを開く
- Windows/Linux:
Ctrl + Shift + P
- macOS:
Cmd + Shift + P
- Windows/Linux:
-
Ruby LSP: Update Ruby LSP Server
を選択して実行する
本コマンドについては、VSCodeの拡張機能のruby-lspのドキュメントに記載がありました。
解消までのプロセス
上述の通り、簡単に解決できる問題ではあったのですが、ここからは自戒を込めて、解消までのプロセスをまとめてみます。
「ruby-lspサーバのバージョンが古いことが原因」であることが分かった後、グローバルにインストールされたGemのバージョンを確認しました。すると、下記の通り、2つのバージョンがインストールされていることが分かり、v0.17.17によりエラーが発生している仮説が立ちました。
$ gem list | grep ruby-lsp
ruby-lsp (0.23.14, 0.17.17)
# 出力結果は一部省略しています。
何らかの理由で、VSCodeが v0.17.17を参照しているのだろうと考え、試しにv0.17.17をアンインストールしてみました。これにより、解消される or 参照先のruby-lsp gemが見つからない旨を示すエラーが発生することを期待しました。
しかし、結果はいずれにも該当せず、VSCodeを再起動すると、再び v0.17.17が復活しており、ruby-lspクライアントはv0.17.17参照しています。困りました。
もっと早く見ておけという話なのですが、ここでVSCodeの拡張機能のruby-lspのドキュメントを見てみると、下記の記述を見つけ、 .ruby-lsp
というディレクトリがVSCodeの拡張機能のruby-lspにより作成され、そこでruby-lspサーバのバージョンを管理していることが分かりました。
By default, the Ruby LSP will generate a .ruby-lsp directory with a composed bundle that includes the server gem.
ここで、 .ruby-lsp
ディレクトリへ移動し、ruby-lspサーバ(gem)のバージョンを確認したところ、v0.17.17 がインストールされていることが分かりました。
次に、.ruby-lsp
内の Gemfile
を編集し、バージョンアップを試みることにしました。下記のようにGemfileを編集し、bundle install
を実行しました。
gem 'ruby-lsp', '~> 0.23.0'
しかし、VSCodeを再起動すると、またもや v0.17.17 が復活し、VSCodeの拡張機能もそれを参照しています。.ruby-lsp
内の Gemfile
を見ると、先ほどの編集内容が消えています。VSCodeの拡張機能のruby-lspが、.ruby-lsp
ディレクトリを管理しているようです。
次に、下記の対応を実施しました。
-
.ruby-lsp
ディレクトリを削除する - VSCodeの拡張機能のruby-lspをアンインストールする
- グローバルにインストールされているruby-lspサーバ(gem)の v0.17.17 をアンインストールする
- VSCodeを再起動する
- VSCodeの拡張機能のruby-lspをインストールする
これにより、VSCodeが参照するruby-lspサーバのバージョンを最新に更新することができました。
しかし、「.ruby-lsp
ディレクトリを削除する」のは、開発環境とはいえ力技過ぎるなと思い、VSCodeの拡張機能のruby-lspのドキュメントを再度確認すると、Ruby LSP: Update Ruby LSP Server
というVSCodeのコマンドが提供されていることが分かり、これが正攻法だったかと思うに至りました。
まとめ
ドキュメントを読もう。(自戒)
おわりに
以上、gem ruby-lspのバージョンアップについて自身の経験も交えつつまとめてみました。どなたかの参考になれば幸いです。
エンジニア募集
Gakken LEAP では教育をアップデートしていきたいエンジニアを絶賛大募集しています。
ぜひお気軽にカジュアル面談へお越しください。