VSCodeでRubyを効率よく開発したい場合は、Ruby LSPを導入する方法がおすすめです。
Ruby LSPを使うことで、コード補完や定義ジャンプ、エラー表示、フォーマット、テスト実行、デバッグなど、Ruby開発に必要な機能をVSCode上で利用しやすくなります。
現在は、Shopifyが開発している「Ruby LSP」拡張機能がVSCode向けRuby開発環境の有力な選択肢です。
この記事では、Ruby LSPの基本からインストール方法、設定方法、Railsでの使い方、トラブルシューティングまで詳しく解説します。
Ruby LSPとは
Ruby LSPとは、Ruby向けにLanguage Server Protocolを実装した言語サーバーです。
Language Server Protocolは、VSCodeなどのエディターとプログラミング言語用の解析サーバーとの通信方法を共通化する仕組みです。
Ruby LSPがRubyコードを解析し、その結果をVSCodeへ返すことで、Ruby専用の高度な開発機能を利用できます。
Ruby LSPで利用できる主な機能
Ruby LSPでは、主に以下のような機能を利用できます。
- コード補完
- 定義へ移動
- Hoverによる情報表示
- シンボル検索
- ドキュメントアウトライン
- セマンティックハイライト
- Diagnosticsによるエラーや警告の表示
- コードフォーマット
- コードアクション
- リファクタリング
- テスト実行
- テストデバッグ
- Rubyプログラムのデバッグ
- Rails Generatorの実行
単なるコード補完用拡張機能ではなく、VSCodeでRubyを開発するための総合的な開発環境として利用できるのが特徴です。
Ruby LSPを使うための事前準備
Ruby LSPを利用する前に、Rubyの開発環境を準備しておきます。
Rubyがインストールされているか確認する
まずはターミナルで以下のコマンドを実行します。
ruby -v
Rubyのバージョンが表示されれば、Ruby自体は利用可能です。
例えば、以下のように表示されます。
ruby 3.x.x
Rubyが見つからない場合は、先にRubyをインストールする必要があります。
Rubyのバージョンマネージャーを利用する
複数のRubyプロジェクトを扱う場合は、Rubyのバージョンマネージャーを利用すると管理しやすくなります。
代表的なものには、以下があります。
- rbenv
- mise
- asdf
- chruby
- rvm
ただし、利用しやすいツールはOSによって異なります。
macOSやLinuxではrbenv、mise、asdfなどがよく利用されます。
WindowsではRubyInstallerを直接利用したり、WSL上でRuby環境を構築したり、miseなどを利用したりする方法があります。
Bundlerを確認する
Gemfileを利用するRubyプロジェクトでは、Bundlerも重要です。
以下のコマンドで確認できます。
bundle -v
バージョン情報が表示されれば問題ありません。
Gemfileが存在するプロジェクトでは、基本的に以下も実行しておきます。
bundle install
これにより、プロジェクトで必要なGemがインストールされます。
なお、単純なRubyスクリプトなど、Gemfileを使用しない環境では必ずしもbundle installが必要とは限りません。
VSCodeにRuby LSPをインストールする
Ruby環境を準備したら、VSCodeにRuby LSP拡張機能をインストールします。
拡張機能画面を開く
VSCode左側の拡張機能アイコンをクリックします。
ショートカットでも開けます。
Windows・Linuxでは以下です。
Ctrl + Shift + X
macOSでは以下です。
Cmd + Shift + X
Ruby LSPを検索する
検索欄に以下を入力します。
Ruby LSP
Shopifyが公開している「Ruby LSP」を選択してインストールします。
拡張機能IDは以下です。
Shopify.ruby-lsp
類似したRuby関連拡張機能も存在するため、PublisherがShopifyであることを確認すると安心です。
参考サイト
Shopify製Ruby LSPを導入し開発環境を改善する[VS Code]
RubyプロジェクトをVSCodeで開く
Ruby LSPを利用するときは、Rubyファイルを単独で開くよりも、プロジェクトのルートディレクトリをVSCodeで開くのがおすすめです。
例えば、以下のような構成があります。
my_app/
├── Gemfile
├── Gemfile.lock
├── app/
├── lib/
└── test/
この場合は、my_appディレクトリそのものをVSCodeで開きます。
ターミナルからプロジェクトを開く
ターミナルから以下のように起動できます。
cd my_app
code .
Ruby LSPはGemfileやGem、Rubyバージョンなどの情報を利用するため、プロジェクトルートを正しく開くことが重要です。
Ruby LSPを起動する
通常はRubyファイルを開くとRuby LSPが自動的に起動します。
例えば、以下のような.rbファイルを開きます。
class User
def hello
puts "Hello"
end
end
正常に動作していれば、コード補完や定義ジャンプなどが利用できるようになります。
Ruby LSPを手動で再起動する
Ruby LSPが正常に動作しない場合は、コマンドパレットを開きます。
Windows・Linuxでは以下です。
Ctrl + Shift + P
macOSでは以下です。
Cmd + Shift + P
検索欄に、
Ruby LSP
と入力すると、Ruby LSP関連のコマンドが表示されます。
例えば、以下があります。
Ruby LSP: Start
Ruby LSP: Restart
Ruby LSP: Stop
Ruby LSP: Update language server gem
設定を変更したあとや動作がおかしい場合は、Ruby LSP: Restartを実行すると改善することがあります。
Ruby LSPが使用するRubyを確認する
Ruby LSPで問題が起こりやすいポイントの一つが、VSCodeとターミナルで異なるRuby環境が使用されることです。
ターミナルでRubyを確認する
まず、VSCodeの統合ターミナルで以下を実行します。
ruby -v
さらに、macOSやLinuxでは以下でRubyのパスを確認できます。
which ruby
Windowsでは以下を利用できます。
where.exe ruby
想定しているRubyとは異なるパスが表示された場合は、Ruby LSP以前にRuby環境の設定を見直す必要があります。
Rubyのバージョンマネージャーを設定する
Ruby LSPにはRubyバージョンマネージャーを自動判定する機能があります。
autoを利用する
通常は以下の設定で問題ありません。
{
"rubyLsp.rubyVersionManager": {
"identifier": "auto"
}
}
autoでは、利用可能なRubyバージョンマネージャーをRuby LSPが自動的に検出します。
なお、autoは標準的な動作なので、必ずしもsettings.jsonに明示的に書く必要はありません。
rbenvなどを明示する
自動判定がうまくいかない場合は、利用しているバージョンマネージャーを明示できます。
例えばrbenvなら以下です。
{
"rubyLsp.rubyVersionManager": {
"identifier": "rbenv"
}
}
Ruby LSPでは、rbenvやmise、asdf、chruby、rvmなど複数の環境に対応しています。
.zshrcや.bashrcの設定を確認する
ターミナルではRubyが正しく動くのに、Ruby LSPではRubyが見つからないことがあります。
これは、VSCodeの拡張機能と通常のターミナルで環境変数が異なることがあるためです。
例えば、Rubyバージョンマネージャーの初期化設定を以下に記述しているケースがあります。
~/.zshrc
~/.bashrc
Ruby LSPはシェルを利用してRuby環境を取得するため、これらの初期化設定が正常に読み込まれることが重要です。
code .から起動する方法も有効
RubyのPATHが正しく認識されない場合は、一度VSCodeを完全に終了します。
そのうえで、Rubyが正常に使えるターミナルから以下を実行します。
code .
ターミナルの環境を引き継げるため、Ruby LSPが正常に起動する場合があります。
Ruby LSPでコード補完を使う
Ruby LSPが正常に動作していれば、Rubyコードを入力している途中で補完候補が表示されます。
例えば、以下のようなコードがあります。
class User
def hello
puts "Hello"
end
end
user = User.new
user.
user.まで入力すると、Ruby LSPが利用可能な情報をもとに補完候補を提示します。
Rubyでは補完が完全ではない場合もある
Rubyは動的型付け言語です。
そのため、JavaやC#のような静的型付け言語と比較すると、常に完全なコード補完ができるとは限りません。
Ruby LSPはプロジェクトや依存Gemをインデックス化し、クラス、モジュール、メソッド、定数などの情報を利用して補完やナビゲーションを提供します。
定義ジャンプを利用する
Ruby LSPでは、クラスやメソッドの定義場所へ移動できます。
例えば、
User.new
のUserにカーソルを合わせて定義へ移動すると、Userクラスが定義されているファイルへジャンプできます。
Windows・Linuxでは通常、
F12
または、
Ctrl + クリック
で移動できます。
macOSでは、
Cmd + クリック
が利用できます。
大規模なRailsプロジェクトでは、ファイルを手動で探す必要が減るため非常に便利です。
Hoverでコード情報を確認する
クラスやメソッドの上にマウスカーソルを置くと、Ruby LSPが関連する情報を表示します。
例えば、
array.map
のmapにカーソルを合わせることで、利用可能なメソッド情報やドキュメントなどを確認できます。
コードを読みながら情報を確認できるため、APIやメソッド仕様を調べる際にも役立ちます。
シンボル検索を利用する
Ruby LSPはプロジェクト内のRubyコードをインデックス化します。
そのため、VSCodeのシンボル検索からクラスやモジュールなどを探せます。
例えば、以下のような名前を検索できます。
User
Order
ApplicationController
大規模なRailsアプリケーションほど、シンボル検索の恩恵が大きくなります。
Ruby LSPでフォーマットする
Ruby LSPではコードフォーマットも利用できます。
Ruby LSPをデフォルトフォーマッターにする
settings.jsonに以下を設定します。
{
"[ruby]": {
"editor.defaultFormatter": "Shopify.ruby-lsp",
"editor.formatOnSave": true
}
}
これにより、RubyファイルのデフォルトフォーマッターとしてRuby LSPが利用されます。
editor.formatOnSaveを有効にすると、ファイル保存時に自動フォーマットできます。
Ruby LSPのformatter設定
Ruby LSPには以下の設定があります。
{
"rubyLsp.formatter": "auto"
}
autoではプロジェクトのGemを確認する
autoを指定すると、Ruby LSPがプロジェクトのbundleを確認し、利用可能な対応formatterを判定します。
例えば、プロジェクトにRuboCopが含まれていればRuboCopを利用できます。
Syntax Treeが利用可能な構成では、Syntax Treeを利用することもできます。
利用可能なformatterが存在しない場合は、フォーマット機能が有効にならないこともあります。
そのため、
「Ruby LSPは必ずRuboCopでフォーマットする」
というわけではありません。
RuboCopとRuby LSPを組み合わせる
Ruby LSPはRuboCopと組み合わせて利用できます。
GemfileにRuboCopを追加する
例えば、以下のようにGemfileへ追加します。
group :development, :test do
gem "rubocop", require: false
end
その後、以下を実行します。
bundle install
Ruby LSPのformatter設定が、
{
"rubyLsp.formatter": "auto"
}
であれば、プロジェクトのbundleに含まれるRuboCopを検出して利用できます。
グローバルインストールしたRuboCopには注意する
Ruby LSPでは、formatterやlinterはプロジェクトのGemfileやgemspecで管理するのが基本です。
単に、
gem install rubocop
でグローバル環境へ入れただけでは、Ruby LSPから期待どおりに利用できない場合があります。
チーム開発ではGemfileにバージョンを記録した方が、メンバー間で環境を統一しやすいメリットもあります。
RuboCop拡張機能との使い分け
VSCodeにはRuboCop公式拡張機能もあります。
Ruby LSPとRuboCop拡張機能を両方利用する場合は、どちらをフォーマッターにするか決めておくと競合を避けやすくなります。
Ruby LSPをフォーマッターにする場合
{
"[ruby]": {
"editor.defaultFormatter": "Shopify.ruby-lsp"
}
}
RuboCop拡張機能をフォーマッターにする場合
{
"[ruby]": {
"editor.defaultFormatter": "rubocop.vscode-rubocop"
}
}
複数の拡張機能から同じフォーマット機能を有効にすると、設定が分かりにくくなるため注意しましょう。
Ruby LSPのおすすめ設定
Ruby LSPを中心に利用する場合は、例えば以下のように設定できます。
{
"[ruby]": {
"editor.defaultFormatter": "Shopify.ruby-lsp",
"editor.formatOnSave": true,
"editor.tabSize": 2,
"editor.insertSpaces": true,
"editor.semanticHighlighting.enabled": true,
"editor.formatOnType": true
},
"rubyLsp.formatter": "auto"
}
Rubyバージョンマネージャーを自動判定させる場合、rubyLsp.rubyVersionManagerは省略しても構いません。
チーム開発では、個人の好みだけで設定せず、既存の.vscode/settings.jsonやRuboCop設定に合わせることが重要です。
.ruby-lspディレクトリとは
Ruby LSPを利用すると、プロジェクト内に以下のディレクトリが作成される場合があります。
.ruby-lsp
これは異常ではありません。
Ruby LSP用のbundleを管理する
VSCode版Ruby LSPでは、Language Serverを動作させるためのcomposed bundleを.ruby-lsp内に構築します。
そのため、通常はRuby LSPを使うためだけにGemfileへ、
gem "ruby-lsp"
を必ず追加する必要はありません。
VSCode拡張機能側がRuby LSP実行用の環境を構築します。
.ruby-lspが突然作成されても、不具合と判断する必要はありません。
RailsでRuby LSPを使う方法
Ruby LSPはRailsプロジェクトでも利用できます。
基本的な流れは通常のRubyプロジェクトと同じです。
Railsプロジェクトで準備する
まず、Railsプロジェクトで以下を実行します。
bundle install
その後、RailsプロジェクトのルートをVSCodeで開きます。
code .
Ruby LSPが起動すれば、Railsアプリケーション内でも定義ジャンプや補完などが利用できます。
ruby-lsp-railsでRails統合を強化する
Rails固有の機能をさらに強化したい場合は、ruby-lsp-railsを利用できます。
Gemfileに追加する例は以下です。
group :development do
gem "ruby-lsp-rails"
end
その後、以下を実行します。
bundle install
ruby-lsp-railsは必須ではない
RailsでRuby LSPを利用するために、ruby-lsp-railsが必須というわけではありません。
Ruby LSP単体でもRailsプロジェクトで利用できます。
ruby-lsp-railsは、Rails固有のテストやフレームワーク統合を強化したい場合に追加するGemと考えると分かりやすいでしょう。
Rails GeneratorをVSCodeから実行する
Ruby LSPにはRails GeneratorをVSCodeのUIから実行できる機能もあります。
Railsでは通常、
rails generate model User
や、
rails generate controller Users
などのコマンドを利用します。
Ruby LSPを使うことで、こうしたRails Generator関連の操作をVSCodeから行いやすくなります。
Ruby LSPでデバッグする
Ruby LSPはRubyのデバッグにも対応しています。
Rubyでは一般的にdebug gemが利用されます。
debug gemを利用する
RailsなどではGemfileにdebugが含まれている構成も多くあります。
必要に応じて、以下のように利用します。
gem "debug"
Ruby LSPとdebug gemを組み合わせることで、VSCode上にブレークポイントを設定し、コードを停止させながら変数などを確認できます。
Ruby LSPでテストを実行する
Ruby LSPでは、VSCodeのTest ExplorerやCodeLensからRubyのテストを実行できます。
プロジェクト構成やテストフレームワークが対応していれば、テストコードの近くに実行ボタンが表示されます。
そこから、
- テスト実行
- ターミナルでの実行
- デバッグ実行
などが可能です。
Railsプロジェクトではruby-lsp-railsを追加することで、Rails固有のテスト統合を強化できます。
Ruby LSPが動かない場合の対処法
Ruby LSPが起動しない場合は、拡張機能をすぐに再インストールするより、Ruby環境を順番に確認する方が効率的です。
Rubyのバージョンを確認する
VSCodeの統合ターミナルで以下を実行します。
ruby -v
想定しているRubyが表示されるか確認します。
Rubyのパスを確認する
macOSやLinuxでは以下です。
which ruby
Windowsでは以下です。
where.exe ruby
Ruby LSPが使用すべきRubyと一致しているか確認しましょう。
Gemfileがある場合はbundle installを実行する
Gemfileを使用しているプロジェクトでは以下を実行します。
bundle install
依存Gemが不足していると、Ruby LSPの起動やformatterの検出に失敗する場合があります。
Ruby LSPを再起動する
コマンドパレットから、
Ruby LSP: Restart
を実行します。
設定変更後にも有効です。
VSCodeを完全に再起動する
RubyやRubyバージョンマネージャーをインストールした直後は、VSCodeが古い環境変数を保持している場合があります。
その場合はVSCodeを完全に終了し、再度起動します。
可能であれば、Rubyが正常に動作するターミナルから、
code .
で起動すると改善する場合があります。
Ruby LSPを手動で起動して確認する
Ruby LSPの起動問題を調査する場合、手動でLanguage Serverを起動してエラーを確認する方法があります。
実行するコマンドは以下です。
ruby-lsp
bundle exec ruby-lspは使わない
Ruby LSPの公式トラブルシューティングでは、手動起動時に、
bundle exec ruby-lsp
を利用しないよう案内されています。
VSCode版Ruby LSPは独自のcomposed bundleを利用するためです。
トラブルシューティングでは、
ruby-lsp
で直接起動して確認します。
Ruby LSPのログを確認する
Ruby LSPが起動しない場合は、VSCodeの出力パネルも確認します。
特に以下に関するエラーを確認しましょう。
Ruby version
Ruby path
Bundler
Gem
Ruby version manager
Shell
PATH
Ruby LSPでは、ターミナルとVSCode拡張機能で環境変数が異なることが原因になるケースが少なくありません。
古いRubyを使っている場合の注意点
Ruby LSPは、どのRubyバージョンでも最新バージョンが利用できるわけではありません。
Ruby LSPや内部で利用されるPrismなどは、サポート中のRubyバージョンを中心に開発されています。
EOLを迎えた古いRubyでは、最新のRuby LSPが正常に動作しない場合があります。
古いRubyで利用する方法
古いRubyプロジェクトでは、以下のような対応が考えられます。
- Ruby LSPの旧バージョンを利用する
- 対応するVSCode拡張機能のバージョンを利用する
- Ruby LSP専用のGemfileを用意する
- 別のRuby環境からLanguage Serverを動作させる
Ruby LSPでは、Language Server用Gemfileを指定する設定も利用できます。
{
"rubyLsp.bundleGemfile": "/path/to/Gemfile"
}
レガシーRubyを保守している場合に役立つ設定です。
Solargraphとの併用には注意する
Ruby向けLanguage ServerとしてはSolargraphも存在します。
Ruby LSPとSolargraphを同時に有効にすると、機能が重複する場合があります。
例えば、以下です。
- コード補完
- 定義ジャンプ
- Hover
- Diagnostics
- Formatting
複数の拡張機能が同じ機能を提供すると、どの拡張機能が処理しているのか分かりにくくなります。
Ruby LSPをメインにする場合は、不要なRuby Language Serverを無効にしておくとトラブルを減らしやすくなります。
Dev ContainerでRuby LSPを使う場合
DockerやDev Containerを利用してRubyを開発している場合は、Ruby LSPをどの環境で動かしているかが重要です。
例えば、以下のような構成があります。
Windows
↓
VSCode
↓
Dev Container
├─ Ruby
├─ Bundler
├─ Rails
└─ Gem
この場合、Ruby LSPもRubyやGemが存在するコンテナ側で動作する構成にする必要があります。
VSCodeのDev Containersを使用する場合は、Ruby LSP拡張機能がRemote側で有効になっているか確認しましょう。
VSCodeでRuby LSPを使う基本的な流れ
VSCodeでRuby LSPを利用する場合は、以下の流れで設定すると分かりやすいです。
- Rubyをインストールする
- 必要に応じてRubyバージョンマネージャーを設定する
- Bundlerを利用できる状態にする
- Gemfileがある場合は
bundle installする - VSCodeにShopifyのRuby LSPをインストールする
- RubyプロジェクトのルートをVSCodeで開く
- Rubyファイルを開いてRuby LSPを起動する
- 補完や定義ジャンプが動作するか確認する
- formatterやRuboCopを設定する
- 必要に応じてデバッグやテスト機能を利用する
まとめ
Ruby LSPは、VSCodeでRubyを開発するなら導入を検討したい拡張機能です。
コード補完だけでなく、定義ジャンプ、シンボル検索、フォーマット、Diagnostics、テスト、デバッグ、Rails連携など、Ruby開発に必要な機能を幅広く提供します。
導入自体は比較的簡単ですが、Ruby LSPはRubyのバージョン、Bundler、Gemfile、Rubyバージョンマネージャー、PATHなどの影響を受けます。
そのため、Ruby LSPが動かない場合は、拡張機能を何度も再インストールするよりも、まずVSCodeがどのRubyを認識しているかを確認することが重要です。
また、フォーマッターについては「Ruby LSPが必ずRuboCopを使う」と考えるのではなく、rubyLsp.formatterの設定やプロジェクトのGem構成によって動作が決まる点も覚えておきましょう。
RubyとVSCodeの環境を正しく整えれば、Ruby LSPによってRubyやRailsの開発効率を大きく高められます。
以上、VSCodeでRuby LSPを使う方法についてでした。
最後までお読みいただき、ありがとうございました。









