RuboCopのLSPを使ったらとても便利だった

フィヨルドブートキャンプのDiscordにRuboCopでLSPが標準搭載されたお知らせがありました。

koic.hatenablog.com

そもそもLSPが何かも分かってなく・・・気になったため早速インストールして使ってみました。

LSPとは

qiita.com

language serverとは、IDEが必要とするプログラムのプロジェクト ソースを解析して情報を提供する機能を、サービスとして実現するものです。language serverがサポートされたIDEでは、型やメンバーの自動補完、変数やメンバーの定義参照、変数やメンバーの利用箇所の検索、コードの自動フォーマット、コードのエラー分析や修正案の提示といった、さまざまな機能を実現できます。

docs.rubocop.org

Offense detection and autocorrection are performed in real-time by editors and IDEs using the language server.

違反の検出と自動修正は、言語サーバーを使用してエディターと IDE によってリアルタイムで実行されます。

つまりRuboCopのLSPを利用するとリアルタイムでコードの自動フォーマット、コードのエラー分析や修正案の提示などができるということのようです。

VSCodeで早速使ってみた

github.com

自作サービスのリポジトリのRuboCopのバージョンを上げて早速使ってみました。

$ bundle update rubocop

バージョンアップができたらVSCode拡張機能からRuboCopをインストールします。

インストール後にうまく動かない場合はVSCode側の設定の確認も必要かもです。 以下に設定手順が書いてあるため、自分は一通りVSCodeの設定を確認し、再起動したら使うことができました。

marketplace.visualstudio.com

インストールができたらRuboCopのDocに書いてある手順通りにLSPを起動します。

追記:koicさんからコメントをいただき、こちらはVS Code extension から呼ばれるため、都度起動は不要でした。

$ rubocop --lsp

プロセスの状況は以下で確認できます。

$ ps aux | grep rubocop
user             17414   0.0  0.2  5557716 144376   ??  Ss    4:48PM   0:02.13 /Users/user/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/bin/rubocop --lsp

自作サービスのコードで意図的に余計なスペースを入れたり、endを削除して保存した結果、VSCodeのターミナルの「問題」のタブに警告内容がすぐに出力されました!!

また、問題があるファイルはVSCode上でファイル名が赤くなり、エラーがあることにすぐに気がつくことが可能です。

ターミナルで定期的に

$ bundle exec rubocop

を実行しなくて済むのはすごく便利!!

まとめ

私はRuboCopを実行し忘れてPRを作成して、CIで問題に気づくというやらかしを定期的にやってしまいます・・・ RuboCopのLSP機能でリアルタイムに問題に気がつけることは開発をする上でとても良い体験だなと思うため、今後も活用しながら開発に取り組みたいと思います!