みなさんこんにちは、かじりです。vscodeにsolargraphを入れようとしたら、最新のversionがinstallされてしまいエラーが発生したので修正した時のことを共有します
gem install solargraph -v 0.31.2
今回solargraphを入れたプロジェクトでは、bundlerのバージョンが1.16.1と古かった(Gemfile.lockの一番下に書いてある BUNDLED WITH)。この場合、solargraphのバージョンは古いものを使用することになる。現在(2020/09/27)はsolargraphの最新は0.39.16のようだが、bundler 1.16.1では0.31.2のsolargraphが使えるらしいlink。なので上記コマンドを使って、solargraphを古いバージョンでインストールする。
もし、新しいバージョンのsolargraphを使っていた場合、solargraphを実行しようとして、下記エラーがでるはず。
solargraph -v
Traceback (most recent call last):
8: from /home/kajiri/.rbenv/versions/2.5.1/bin/solargraph:23:in `<main>'
7: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:309:in `activate_bin_path'
6: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:309:in `synchronize'
5: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems.rb:310:in `block in activate_bin_path'
4: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/specification.rb:1440:in `activate'
3: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/specification.rb:1458:in `activate_dependencies'
2: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/specification.rb:1458:in `each'
1: from /home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/specification.rb:1469:in `block in activate_dependencies'
/home/kajiri/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/dependency.rb:312:in `to_specs': Could not find 'bundler' (1.16.6) required by your /home/kajiri/ghq/github.com/Gemfile.lock. (Gem::MissingSpecVersionError)
To update to the lastest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:1.16.6`
Checked in 'GEM_PATH=/home/kajiri/.gem/ruby/2.5.0:/home/kajiri/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0', execute `gem env` for more information
version指定をせず、gem install solargraphとした場合、bundlerのバージョンを気にしないでインストールするようで、最新バージョンのsolargraphがインストールされてしまう。
また、上記エラーが発生している状態で別のディレクトリでsolargraphを実行すると動いたりするが、これはbundlerのバージョンが異なっているために(rbenvとかで)発生していた。
rbenv global YOUR_RUBY_VERSION
上でも書いたが、BUNDLED WITHがGemfile.lockに書いてある。このバージョンと自分のbundlerのバージョンが違うと、不具合が起きやすいので揃えた方がいい。 自分の場合、rbenvを使っていて、rbenv globalに指定したrubyのバージョンで導入したbundlerとBUNDLED WITHに指定されたbundlerのバージョンが違うために、bundle install に失敗することがあった。
"solargraph.useBundler": false,
"solargraph.commandPath": "/home/kajiri/.rbenv/shims/solargraph", // YOUR solargraph path
今回のプロジェクトにはsolargraphが入っていなかったのでsystemの(自分のローカルにinstallしている)solargraphを使用した。その場合、vscodeのsettings.jsonに上記設定を書き込む必要がある。commandPathがわからない場合、
which solargraph
で出力されたものを使用すればいいと思う。プロジェクトにsolargraphが入っている場合、solargraph.useBundler: trueで動くと思うがその状況になったことがまだない。
クラス名をクリックして移動できるとやっぱり楽!solargraphはぜひ入れましょう