Ruby LSPで開発生産性を上げよう
はじめに
こんにちは、Studistでエンジニアをしている鎌田です。
私は普段、個人開発や業務でRailsアプリケーションを触る際にRuby LSPを使っています。
Ruby LSPはRailsを使った開発体験を向上させる非常に便利なツールです。
この記事では、Ruby LSPの概要とインストール方法、便利な機能を紹介します。
Ruby LSPってなに?
Ruby LSPはRuby用のLanguage Serverです。テキストエディタにRuby特有の言語機能を提供します。
Rubyファイルに記述されている関数の定義元にコードジャンプしたり、コードの補完、参照の検索などができます。
そもそもLSP(Language Server Protocol)ってなに?
Language Server
Language Serverは、言語特有の機能を提供するプログラムです。
LSP(Language Server Protocol)
LSP(Language Server Protocol)は、Language Serverと開発ツール(VS Codeなど)の通信プロトコルを標準化したものです。これにより、単一のLanguage Serverをいろんな開発ツールで再利用できるようになっています。
簡単に言うと、「何をリクエストされたら、何を応答するか」をJSON形式で定めたもので、開発ツールとLanguage ServerはこのLSPに従ってやりとりをします。

インストール方法
ここではVS CodeでRuby LSPをインストールする方法を紹介します。
ローカルにインストールする場合
-
ruby-lspのGemをインストール -
VS Codeの
Ruby LSP拡張機能をインストールする -
(VS Codeの場合)
.vscode/settings.jsonを作成・更新する- 一旦以下のように記述すればRuby LSPが使えるようになる
- その他のオプションについてはドキュメントを参照
// どのバージョンマネージャー経由でRubyを見つけるかを指定 // rbenvを使っている場合はrbenv, システムRubyを使っている場合はnoneを指定する // autoの場合、使用するバージョンマネージャーを自動的に決定するが、見つけられなかった場合手動設定が必要 "rubyLsp.rubyVersionManager": { "identifier": "auto" }, -
VS CodeをReload Window
-
Reloadが完了したら、VS Codeのターミナルを開き、Outputタブで
Ruby LSPを選択し、Ruby LSPが正常に起動しているか確認する。
Finished initializing Ruby LSP!が表示されていれば起動している
devcontainerで使用する場合
(詳細な説明は割愛しますが) devcontainerはDockerのようにアプリケーションの実行環境をコンテナ化しつつ、開発環境自体もコンテナの中で行うというものです。
devcontainerを使うことで、複数人で開発する際に同じ設定を共有できます。
devcontainer.jsonの設定
既存のRailsコンテナ上でRuby LSPを動かす場合、devcontainer.json を以下のように設定します。
{
"name": "Rails Ruby LSP",
"dockerComposeFile": "../docker-compose.yml", // 既存のdocker-composeを使う
"service": "web", // Railsが動いてるサービス名
"workspaceFolder": "/app",
"customizations": {
"vscode": {
"extensions": [
"Shopify.ruby-lsp"
],
"settings": {
"rubyLsp.rubyVersionManager": {
"identifier": "none" // コンテナ内のRubyをそのまま使うので"none"
}
}
}
},
"postCreateCommand": "bundle install"
}
ローカルとの違いとして、rubyVersionManagerには"none"を指定します。コンテナ内にはRubyが1つしかないため、バージョンマネージャーは不要です。
VS CodeでRuby LSPを使うときの便利機能
Ruby LSPをVS Codeで使うと、以下のような機能が利用できます。
-
ホバー表示:カーソルを対象の定数やメソッドの上に置くと、コメントやドキュメントが表示される
-
定義ジャンプ:関数やClassの定義元へジャンプできる
-
Routes, Viewジャンプ:Controllerから対応するRoutes, Viewファイルへジャンプできる

-
テスト実行:specをGUI上で実行できる

-
rails generateやrails destroyのコマンド実行をGUI上から実行できる

-
ワークスペースシンボル: プロジェクト全体にわたって、メソッドの宣言をあいまい検索できる

-
Gemの依存関係の一覧: プロジェクトの依存関係をナビゲートするパネルを表示できる

他にも便利な機能がたくさんあります!
さいごに
Ruby LSPを使うことで、Rubyでの開発体験が大幅に向上します。開発も活発で、直近でも機能追加や改善が行われています。
またVS Codeだけでなく、NeovimやEmacsなどLSPに対応したエディタで使えるので、お気に入りのエディタでRuby開発環境を強化できます。
ぜひ導入してみてください!
参考リンク
Discussion