💎

Ruby LSPで開発生産性を上げよう

に公開

はじめに

こんにちは、Studistでエンジニアをしている鎌田です。
私は普段、個人開発や業務でRailsアプリケーションを触る際にRuby LSPを使っています。
Ruby LSPはRailsを使った開発体験を向上させる非常に便利なツールです。
https://shopify.github.io/ruby-lsp/

この記事では、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に従ってやりとりをします。

エディタとLSPのやりとりを図にしたもの

インストール方法

ここではVS CodeでRuby LSPをインストールする方法を紹介します。

ローカルにインストールする場合

  1. ruby-lspのGemをインストール

  2. VS CodeのRuby LSP拡張機能をインストールする

  3. (VS Codeの場合).vscode/settings.jsonを作成・更新する

    • 一旦以下のように記述すればRuby LSPが使えるようになる
    • その他のオプションについてはドキュメントを参照
    // どのバージョンマネージャー経由でRubyを見つけるかを指定
    // rbenvを使っている場合はrbenv, システムRubyを使っている場合はnoneを指定する
    // autoの場合、使用するバージョンマネージャーを自動的に決定するが、見つけられなかった場合手動設定が必要
    "rubyLsp.rubyVersionManager": {
      "identifier": "auto"
    },
    
  4. VS CodeをReload Window

  5. Reloadが完了したら、VS Codeのターミナルを開き、Outputタブで Ruby LSP を選択し、Ruby LSPが正常に起動しているか確認する。

    ターミナルのoutput

    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で使うと、以下のような機能が利用できます。

  1. ホバー表示:カーソルを対象の定数やメソッドの上に置くと、コメントやドキュメントが表示される

  2. 定義ジャンプ:関数やClassの定義元へジャンプできる

  3. Routes, Viewジャンプ:Controllerから対応するRoutes, Viewファイルへジャンプできる

    ルーティングジャンプのGif

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

    RSpecをGUIで実行するボタン

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

    rails generateなどを実行するUI

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

    シンボルからあいまい検索する

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

    依存関係を表示するパネル

他にも便利な機能がたくさんあります!

さいごに

Ruby LSPを使うことで、Rubyでの開発体験が大幅に向上します。開発も活発で、直近でも機能追加や改善が行われています。

またVS Codeだけでなく、NeovimやEmacsなどLSPに対応したエディタで使えるので、お気に入りのエディタでRuby開発環境を強化できます。
ぜひ導入してみてください!

参考リンク

https://microsoft.github.io/language-server-protocol/
https://shopify.github.io/ruby-lsp/
https://github.com/Shopify/ruby-lsp

Discussion