5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Rails] VSCodeでSolargraphを使おうとしたら、Bundlerが無いというエラーが出たときの解決策

Posted at

環境

  • VSCode v1.40.1
    • (extension) Ruby 1.1.2
    • (extension) Ruby-Solargraph 0.21.1
  • Ruby 2.5.1
  • rbenv 1.1.2
  • Rails 5.2.2.1

状況

普段はGoを書いているのですが、急遽別案件でrailsを書くことになり、VSCodeで開発環境を構築しようとしました。
補完のために「Ruby-Solargraph」というVSCodeの拡張を入れたところ、

/Users/me/.rbenv/versions/2.5.1/lib/ruby/2.5.0/rubygems/dependency.rb:312:in `to_specs': Could not find 'bundler' (1.16.3) required by your /Users/me/proj/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.3`
Checked in 'GEM_PATH=/Users/me/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems:/Users/me/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0', execute `gem env` for more information

このようなエラーが発生しました。

調査

参加したプロジェクト自体、結構古いbundlerでgem管理がなされていました。

Gemfile.lock
...
BUNDLED WITH
   1.16.3

念の為bundlerのバージョンを確認すると、指定されているbundlerはインストールされているようでした。

$ bundler -v
Bundler version 1.16.3

このプロジェクトから出て、Ruby-Solargraphを導入した際にインストールされたsolargraphを動かしてみると、

$ cd ..
$ solargraph -v
0.37.2

問題なく動きました。

rubygems.orgで、solargraphの依存を確認すると、インストールされたsolargraph(v0.37.2)は、bundlerのv1.17.2以上を要求していました。

対応

対応策は、いくつか考えられます。
本質的には同じで、使っているbundlerで動くsolargraphを入れる、ということになります。

  1. Projectでsolargraphを管理する。
  2. solargraphのバージョンを下げる。

1.Projectでsolargraphを管理する場合

Gemfileにsolargraphを追加します。

...
group :development do
  ...
  gem 'solargraph'
end

bundlerでインストールします。

$ bundle install

VSCodeで使用するbundlerを、プロジェクトのものに切り替えます。

setting.json
{
...
  "solargraph.useBundler": true,
...
}

これでVSCodeを再起動すると動きました。

2.systemで使うsolargraphのバージョンを下げる

調べると、solargraphのv0.31.2以降では、bundler(=> v1.17.2)を要求していました。
そこで、システムにv0.31.2のsolargraphをインストールします。

$ gem install solargraph -v 0.31.2

これでVSCodeを再起動すると、無事Language serverが起動しました。

まとめ

globalを汚すのに抵抗がある場合は「1」を、
自分しか使わないgemをprojectに管理させるのに抵抗がある場合は「2」を行うのが良いかと思います。

私の場合は、他がruby mineを使っている方々だった(&rubyは滅多に使わない)ので「2」で対応しました。

本当は、うまいこと、システムのsolargraphを動かすときにだけbundlerの依存関係チェックをすり抜けるようにできたらよかったのですが...

同じ症状でお困りの方の参考になれば幸いです。

5
3
0

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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?