VSCodeでRubyを使うなら「Ruby LSP」が基本

採用はこちら

VSCodeでRubyを開発する場合は、「Ruby LSP」を中心に環境を構築する方法が現在の基本です。

Ruby LSPは、Rubyコードを解析し、コード補完や定義ジャンプ、フォーマット、Lint、リファクタリング、テスト、デバッグなどを利用できるようにする拡張機能です。

VSCode公式ドキュメントでも、Ruby開発用の拡張機能としてRuby LSPが案内されています。

単にRubyコードを色分けするだけではなく、IDEに近い開発支援機能を追加できる点が大きな特徴です。

目次

Ruby LSPとは

Ruby向けのLanguage Serverを利用できる拡張機能

Ruby LSPは、Language Server Protocolを利用してRubyコードの解析を行うツールです。

VSCodeにRuby LSP拡張機能を導入すると、エディタとRubyのLanguage Serverが連携し、コードの内容を理解したうえでさまざまな開発支援機能を提供します。

代表的な機能には、以下があります。

  • コード補完
  • 定義へ移動
  • Hoverによる情報表示
  • シンボル検索
  • シグネチャヘルプ
  • フォーマット
  • Lint
  • Quick Fix
  • リファクタリング
  • Inlay Hints
  • セマンティックハイライト
  • テスト実行
  • デバッグ

RubyをVSCodeで本格的に開発するのであれば、まず導入を検討したい拡張機能です。

Ruby LSPのインストール方法

VSCodeの拡張機能画面からインストールする

Ruby LSPはVSCodeの拡張機能画面からインストールできます。

WindowsやLinuxでは、次のショートカットで拡張機能画面を開けます。

Ctrl + Shift + X

macOSでは、次のショートカットです。

Command + Shift + X

検索欄に次の文字を入力します。

Ruby LSP

表示されたRuby LSPを選択してインストールします。

ruby-lsp gemを手動でインストールする必要は基本的にない

VSCodeでRuby LSPを利用する場合、通常は次のようにruby-lsp gemを手動インストールする必要はありません。

gem install ruby-lsp

Ruby LSPのVSCode拡張機能が、Language Serverの実行に必要な環境を自動的に準備します。

プロジェクト内には、状況に応じて次のようなディレクトリが作成されます。

.ruby-lsp

このディレクトリ内で、Ruby LSP用のBundleなどが管理されます。

そのため、VSCodeを利用する場合は、基本的にRuby本体とRuby LSP拡張機能を準備すれば利用を開始できます。

Ruby本体もインストールする必要がある

Ruby LSPだけではRubyプログラムを実行できない

Ruby LSPはRubyの開発を支援する拡張機能であり、Ruby本体そのものではありません。

そのため、パソコンにはRubyの実行環境が必要です。

ターミナルで次のコマンドを実行すると、Rubyがインストールされているか確認できます。

ruby -v

Rubyが正しくインストールされていれば、バージョン情報が表示されます。

Rubyが見つからない場合は、Ruby本体をインストールしてからRuby LSPを利用します。

Ruby LSPでコード補完を利用できる

メソッドやシンボルの候補を表示できる

Ruby LSPを導入すると、Rubyコードを書いている途中で補完候補を表示できます。

例えば、次のように入力します。

name = "Ruby"

name.

状況に応じて、利用可能なメソッドなどが候補として表示されます。

Rubyは動的型付け言語であるため、静的型付け言語と比べるとすべての型情報を完全に判定できるわけではありません。

それでも、Ruby LSPを利用することで、通常のテキスト編集より効率的にコードを書けるようになります。

定義へ移動できる

クラスやメソッドの定義場所を探しやすい

Ruby LSPでは、「Go to Definition」を利用できます。

対象となるクラスやメソッド、定数などから、定義されている場所へ移動できます。

VSCodeでは一般的に、次のキーで実行できます。

F12

Ruby on Railsのように多数のファイルで構成されるプロジェクトでは、特に便利です。

ただし、Rubyは動的な言語であるため、すべてのコードについて必ず正確に定義場所を特定できるとは限りません。

Hoverでコードの情報を確認できる

シンボルの情報をエディタ上で確認できる

Ruby LSPでは、変数やメソッド、クラスなどにマウスポインターを合わせることで情報を表示できるHover機能を利用できます。

別ファイルを開いたり、コードを検索したりする回数を減らせるため、大規模なRubyプロジェクトほど便利です。

Rubyコードを自動フォーマットできる

フォーマット機能でコードを整形できる

Ruby LSPでは、Rubyコードを自動的に整形できます。

VSCodeでは、WindowsやLinuxの場合、一般的に次のショートカットでフォーマットできます。

Shift + Alt + F

例えば、次のようなコードがあるとします。

def hello
puts "Hello"
end

フォーマットを実行することで、インデントなどを整えた読みやすいコードにできます。

RuboCopと連携できる

RuboCopはRuby LSPの必須条件ではない

Ruby LSPは、RuboCopと連携してLintやコードフォーマットを利用できます。

RuboCopは、Rubyコードのスタイルや潜在的な問題をチェックする代表的な静的解析ツールです。

ただし、RuboCopはRuby LSPを使うための必須ツールではありません。

Ruby LSP自体は、RuboCopがプロジェクトに導入されていなくても利用できます。

RuboCopをプロジェクトに追加する場合は、Gemfileへ次のように記述する方法があります。

gem "rubocop", require: false

その後、次のコマンドを実行します。

bundle install

既存プロジェクトの場合は、すでにRuboCopが導入されていることもあるため、Gemfileや.rubocop.ymlを確認するとよいでしょう。

参考サイト

RubyプロジェクトにおけるLinter/FormatterのVSCode環境設定2024

RuboCopを使っていない場合はSyntaxTreeでフォーマットできる

フォーマッターを別途入れなくても利用できる

Ruby LSPでは、プロジェクトがRuboCopを利用していない場合、SyntaxTreeを利用してRubyコードをフォーマットできます。

そのため、Ruby LSPを導入した直後からフォーマット機能を利用しやすい点もメリットです。

保存時に自動フォーマットできる

formatOnSaveを有効にする

ファイルを保存するたびに自動フォーマットしたい場合は、VSCodeの設定を変更します。

例えば、settings.jsonへ次のように設定できます。

{
  "editor.formatOnSave": true
}

この設定を有効にすると、ファイル保存時に自動的にフォーマッターが実行されます。

Rubyファイルだけに適用したい場合は、次のように設定する方法もあります。

{
  "[ruby]": {
    "editor.formatOnSave": true
  }
}

チーム開発でコードスタイルを統一したい場合にも便利です。

Quick Fixを利用できる

問題に対する修正候補を表示できる

Ruby LSPでは、Lintなどで問題が検出された場合にQuick Fixを利用できることがあります。

WindowsやLinuxでは、一般的に次のショートカットでコードアクションを表示できます。

Ctrl + .

macOSでは次のショートカットです。

Command + .

自動修正が可能な問題であれば、修正候補からコードを変更できます。

リファクタリング機能を利用できる

コードを安全に整理しやすい

Ruby LSPでは、コードのリファクタリングを支援する機能も提供されています。

例えば、Rubyの式をローカル変数へ抽出するといった操作が可能です。

コードを手作業で書き換えるより、入力ミスを減らしながら整理しやすい点がメリットです。

Inlay Hintsを利用できる

コード上に補助情報を表示できる

Ruby LSPでは、Inlay Hintsを利用できます。

Inlay Hintsとは、コードそのものを書き換えずに、エディタ上へ補助情報を表示する機能です。

不要な場合は、設定から無効化することもできます。

例えば次のように設定します。

{
  "rubyLsp.enabledFeatures": {
    "inlayHint": false
  }
}

コードをシンプルに表示したい場合は、好みに応じて切り替えるとよいでしょう。

セマンティックハイライトに対応している

コードの意味に応じて色分けできる

通常のシンタックスハイライトは、文法上のパターンをもとにコードを色分けします。

Ruby LSPでは、それに加えてコードの意味を解析したセマンティックハイライトを利用できます。

例えば、ローカル変数や引数、メソッド呼び出しなどを識別して表示できます。

必要に応じて、次のような設定を使用できます。

{
  "editor.semanticHighlighting.enabled": true
}

実際の色や表示方法は、使用しているVSCodeテーマによって異なります。

Ruby LSPでデバッグできる

debug gemを利用したデバッグに対応している

Ruby LSPは、Ruby公式のデバッガーであるdebug gemを利用したデバッグに対応しています。

VSCode上でブレークポイントを設定し、コードを一行ずつ確認しながら実行できます。

例えば次のようなRubyコードがあるとします。

name = "Ruby"
version = 3

puts "#{name} #{version}"

行番号の左側をクリックすると、ブレークポイントを設定できます。

デバッグ中は、変数の値やコールスタック、Watch式などを確認できます。

launch.jsonでデバッグ設定を管理できる

プロジェクトごとに実行方法を設定できる

より細かいデバッグ設定が必要な場合は、.vscode/launch.jsonを使用できます。

例えば、次のような設定方法があります。

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "ruby_lsp",
      "name": "Debug",
      "request": "launch",
      "program": "ruby ${file}"
    }
  ]
}

Ruby LSP公式ドキュメントでは、commandなどを利用した別形式の設定例も紹介されています。

VSCodeやRuby LSPのバージョンによって設定例が異なる場合があるため、実際に設定する際は最新の公式ドキュメントも確認すると安心です。

RDBG系の拡張機能を使う方法もある

より専門的なデバッグ環境を構築できる

Rubyのデバッグでは、Ruby LSP以外にRDBG系のVSCode拡張機能を利用する方法もあります。

Ruby LSPのデバッグ機能で十分な場合は、追加する必要はありません。

一方で、より細かなRDBGの設定を利用したい場合には、専用のデバッグ拡張機能を検討できます。

最初から複数のデバッガー拡張機能を導入すると設定が複雑になる可能性があるため、まずRuby LSPのデバッグ機能から試すと分かりやすいでしょう。

Rubyのテスト実行にも対応している

対応するテストフレームワークでテストを実行できる

Ruby LSPはテスト関連の機能も提供しています。

対応するテストフレームワークでは、テストコードの近くにCodeLensが表示され、VSCodeからテストを実行できる場合があります。

例えば、以下のような操作が可能です。

  • テストを実行する
  • ターミナルで実行する
  • デバッグ実行する
  • Test Explorerから管理する

ただし、すべてのRubyテストフレームワークで同じ機能を利用できるとは限りません。

使用しているテストフレームワークやRuby LSPのアドオンによって対応状況が異なります。

Rubyバージョンマネージャーと組み合わせられる

プロジェクトごとにRubyのバージョンを切り替えられる

Ruby開発では、プロジェクトごとに異なるRubyバージョンを利用することがあります。

そのため、次のようなRubyバージョン管理ツールがよく使われます。

  • rbenv
  • mise
  • asdf
  • chruby

Ruby LSPは主要なRubyバージョン管理環境を検出して利用できます。

必要に応じて、使用するバージョンマネージャーを設定で明示することもできます。

例えばrbenvを指定する場合は、次のように設定できます。

{
  "rubyLsp.rubyVersionManager": {
    "identifier": "rbenv"
  }
}

Rubyのバージョンが正しく認識されない場合は、バージョンマネージャーやPATHの設定を確認するとよいでしょう。

Ruby LSPが正常に動作しているか確認する

ステータスやログを確認する

Ruby LSPをインストールしたにもかかわらず、補完や定義ジャンプが動作しない場合は、Ruby LSPの起動状態を確認します。

起動時には、ステータスが次のように変化することがあります。

starting

その後、正常に起動すると次のような状態になります。

running

エラーが発生する場合は、Ruby本体、Bundler、PATH、Rubyバージョンマネージャーなどを確認します。

Ruby LSPを更新できる

コマンドパレットから手動更新できる

Ruby LSPのLanguage Serverは自動更新が試みられます。

手動で更新したい場合は、コマンドパレットを開きます。

WindowsやLinuxでは次のショートカットです。

Ctrl + Shift + P

macOSでは次のショートカットです。

Command + Shift + P

その後、次のコマンドを実行します。

Ruby LSP: Update language server gem

トラブルが発生した場合や、新しい機能を利用したい場合に確認するとよいでしょう。

Ruby on RailsでもRuby LSPを利用できる

RailsプロジェクトではRuby LSP Railsアドオンが利用される

Ruby LSPは、通常のRubyスクリプトだけでなくRuby on Rails開発でも利用できます。

さらに、Railsプロジェクトを検出すると、Ruby LSP Railsアドオンが自動的に導入される仕組みがあります。

Ruby LSP Railsでは、Rails固有のコードをより理解したナビゲーションや開発支援機能を利用できます。

例えば、次のような機能があります。

  • Active Record関連のコードナビゲーション
  • Route Helperへの移動
  • Rails Generate
  • Rails Destroy
  • Railsテストの実行
  • Railsテストのデバッグ

そのため、Railsを使う場合でも、まずRuby LSPを導入する方法が分かりやすいです。

必ずしも最初から別のRails向け拡張機能を大量に追加する必要はありません。

Ruby向け拡張機能は入れすぎない方がよい

同じ役割の拡張機能が競合することがある

VSCodeの拡張機能マーケットプレイスでは、Ruby向けのさまざまな拡張機能が公開されています。

しかし、同じ役割を持つ拡張機能を複数インストールすると、競合することがあります。

例えば、次のような問題が起こる可能性があります。

  • 保存時に複数のフォーマッターが動作する
  • 同じLintエラーが重複して表示される
  • コード補完候補が重複する
  • どの拡張機能が動作しているのか分かりにくくなる

Ruby LSPだけでも多くの機能を利用できるため、最初はシンプルな構成から始めるのがおすすめです。

VSCodeでRubyを使う場合のおすすめ構成

まずは必要最小限の環境を作る

これからVSCodeでRuby開発を始めるのであれば、次のような構成が分かりやすいです。

用途ツール
エディタVSCode
Ruby実行環境Ruby
Ruby開発支援Ruby LSP
パッケージ管理Bundler
Lint・コードスタイルRuboCop(必要に応じて)
デバッグRuby LSP + debug gem
バージョン管理Git
Rubyバージョン管理rbenv・mise・asdfなど

最初から多くの拡張機能を入れるのではなく、Ruby LSPで不足する機能が見つかったときに追加すると管理しやすくなります。

VSCodeでRubyを使うならRuby LSPを中心に環境を作る

VSCodeでRubyを開発する場合は、Ruby LSPを中心に環境を構築すると分かりやすいです。

Ruby LSPを導入することで、コード補完、定義ジャンプ、Hover、フォーマット、Lint、リファクタリング、テスト、デバッグなど、Ruby開発に必要な多くの機能をVSCode上で利用できます。

また、RuboCopは必須ではなく、Ruby LSPだけでも基本的な開発環境を構築できます。

RailsプロジェクトではRuby LSP Railsアドオンも利用できるため、Ruby on Railsの開発でも有力な選択肢です。

初めて環境を構築する場合は、次の流れで進めると分かりやすいでしょう。

Rubyをインストール
↓
VSCodeをインストール
↓
Ruby LSPをインストール
↓
ruby -vでRuby環境を確認
↓
RubyファイルやRailsプロジェクトを開く

まずはRuby LSPを基本環境として利用し、そのうえで必要に応じてRuboCopやRDBG関連の機能を追加していくと、不要な競合を避けながら使いやすいRuby開発環境を構築できます。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次