VSCode の ruby-lsp 拡張でコードジャンプができるようになるまでにやったこと
はじめに
VSCode で Ruby の開発を行う場合、多くの方は元々rebornix.Ruby
拡張を使っていたと思います。
しかしこちらの拡張は去年時点ですでに非推奨となっており、現在はインストールできません。
後継としてShopify.ruby-lsp
の使用が推奨されています。
多くの方がおそらくそうしているように、私もこちらの拡張に切り替えたのですが、rebornix.Ruby
でできていた定義元へのコードジャンプ(cmd+クリック)ができなくなってしまいました。
ruby-lsp
は起動しているが、cmd+クリックしても何も起こらず、F12やサブメニューの「定義へ移動」をクリックしても「〜〜の定義は見つかりません」と表示される状況でした。
色々やってたら無事コードジャンプできるようになったので、試したことをまとめます。
結論
rubocop の拡張(misogi.ruby-rubocop
)をアンインストールしたらコードジャンプできるようになりました!🙌
(が、もしかしたら他の要素も関係しているのかも・・・?)
前提:開発環境
元々私の開発環境は全て Docker コンテナ内に収められていて、ホストマシン上には Ruby もなにもインストールされていない状態からスタートしました。
VSCode のバージョンは1.85.1
です。
また、Ruby に関連する拡張として下記をインストールしていました。(とりあえず入れるだけで使ってないものもあり・・・)
Shopify.ruby-lsp
misogi.ruby-rubocop
castwide.solargraph
sorbet.sorbet-vscode-extension
KoichiSasada.vscode-rdbg
connorshea.vscode-ruby-test-adapter
Hridoy.rails-snippets
やったこと
- とりあえずホストマシンにも rbenv, Ruby をインストールしてみた -> 変化なし
- ホストマシン上の開発ディレクトリでも
bundle install
してみた -> 変化なし -
castwide.solargraph
拡張をアンインストールしてみた -> 変化なし -
Shopify.ruby-lsp
,sorbet.sorbet-vscode-extension
拡張を一度アンインストールし、Shopify.ruby-extensions-pack
からインストールし直してみた -> 変化なし - ローカルで
gem install ruby-lsp
してみた -> 変化なし - 開発ディレクトリのGemfileに
ruby-lsp
を追加してbundle install
してみた -> 変化なし- 試した後元に戻しました
-
castwide.solargraph
拡張をアンインストールしてみた -> 変化なし -
misogi.ruby-rubocop
拡張をアンインストールしてみた -> コードジャンプできるようになった!
まとめ
上記の通りで、最終的にはmisogi.ruby-rubocop
拡張を削除したらコードジャンプできるようになりました。
Shopify.ruby-lsp
内にもrubocopによるフォーマット機能が入っており、保存時の自動修正なども変わらず動作しています(むしろ動作が早くなった気がする)。
ただ、試しにあらためてmisogi.ruby-rubocop
拡張をインストールし直してみたところ、問題なくコードジャンプできてしまいました・・・。
というわけで正直何が効いたのかはっきりわかりませんが、少なくとも拡張機能の整理は一つ有効な手段だと思いますので、もしも私と同様にお困りの方がいましたらぜひお試しください。
コードジャンプできると快適!!!😭
2024/01/18追記: DevContainerを使う場合の留意点
ホストマシン上での開発ではなく、DevContainer(というかremote?)を使う場合は以下の対応が必要なようでした。
- devcontainer.jsonに
"remoteUser": "root"
を追記する。- 自分の場合、これがないとruby-lsp起動時にpermission errorが発生してしまいました。
- この設定によってコンテナへのログインがroot権限で行われるようです。(自己責任で・・・)
- 参考: https://containers.dev/implementors/json_reference/#general-properties
- 開発ディレクトリのrootとRuby環境のrootが異なる場合はマルチワークスペースの設定をしないといけないっぽい
- 例えばfrontendとbackendをモノリポで管理するようなパターン
- VSCode上で ファイル > フォルダーをワークスペースに追加
- 参考: https://github.com/Shopify/vscode-ruby-lsp?tab=readme-ov-file#multi-root-workspaces
Discussion