初めに
NeovimでRubyのLspを使う方法の一つに、coc.nvimとcoc-solargraphを使う方法があります。
このライブラリを導入し、READMEの通りに設定を行なっても正しく動作をしなかったため、解決方法をTipsとしてまとめます。
問題が起こった環境
- マシン: Mac (M1)
- Ruby: rbenvでv3.2をglobalに指定
- シェル: zsh
- Neovim: v0.9.4
起こっていた問題
READMEの通りに設定を行い、いざRubyのファイルを開くと以下のようなエラーがNeovimのコンソールに表示されました。
[coc.nvim]: UnhandledRejection: /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': can't find gem solargraph (>= 0.a) with executable solargr
aph (Gem::GemNotFoundException)
from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
from /Users/getty104/.anyenv/envs/rbenv/gems/3.2.0/bin/solargraph:25:in `<main>'
エラーの内容を見る限り、rbenvで指定したRubyではなく、MacにプリインストールされているRubyのパスを参照しているようでした。
MacにプリインストールされているRubyは2.6系のため、solargraphをインストールすることはできないため、なんとかrbenvで指定したRubyを参照するようにする必要がありました。
原因
以下のIssueの通り、shell
オプションにシェルの指定を行わないと、ログインしているシェルではないシェルを読みにいってしまうことがあるようでした。
rbenvのセットアップはzshrc
に書いていたため、zsh以外のシェルを用いてコマンドが実行され、それによりデフォルトのプリインストールされているRubyが参照されてエラーになっていたのが原因でした。
解決方法
coc-settings.json
でシェルの指定を行うことで解決しました。
{
"solargraph.shell": "/bin/zsh"
}