Ruby LSPが機能しないので調査した。

前からRuby LSPをVScodeとCursorに拡張機能として、入れていたのですが、
エディタを立ち上げたら、早速エラーを出していたので、放置していました。
手動でrubocopを呼び出したり、AIに整列させていたので、スルーしていました。

qiita.com

Ryo先生が、Ruby LSPとRobocopで、LinterとFormatterをする記事を書いたので、
改めて導入しようと思い、色々試行錯誤してみました。

設定を確認する

rubocopはプロジェクトのgemファイルとして、
コンテナの中でbundle installさせます

Ruby LSPは、
エディタの拡張機能としてマーケットプレイスからインストールします
Ruby LSPはGemファイルとして入れません

settings.jsonに、設定を書く

    "rubyLsp.formatter": "rubocop",
        "rubyLsp.rubyVersionManager": {
          "identifier": "auto"
      },
     "[ruby]": {
       "editor.defaultFormatter": "Shopify.ruby-lsp",
       "editor.formatOnSave": true
        }

言語がRubyのときにShopify.ruby-lspをフォーマッターとし
rubyLsp.formatterからrubocopを指定します
結果的には、userとしても、
workplaceとしても、このコードで動きました。
どちらにおいても構いません。

私は今、TwitterクローンのSPAの課題をやっているので、
このプロジェクトに導入したいのですが、サーバーが立ち上がりません。

Ruby LSPのサーバーが立ち上がらない

そもそもRuby LSPは、サーバーを立てるのですが
サーバーが立たないというエラーがポップアップで出ていました。

今のプロジェクトが複雑なので、
簡単なプロジェクトを作って、試してみようと思い、
dockerなしで、プロジェクトを作り、
Gemfileで、rubocopをインストールさせました。
そしたら、LSPが機能したので、
今のプロジェクトでなにか足りないことがわかりました。
Ruby LSPがエラーのログを出していて、その中で、 libpqがないので、インストールしてと書いてあったので

brew install libpq

をやって、パスを通したら、
SPAのほうでもRuby LSPが機能しました。
自分がパソコンの中身をリセットして、
postgresqlがなくなったのが原因ではないかと思います。
libpqは、postgresqlの接続する部分だけらしいなので、
postgresqlがあれば、このエラーにならないのではないかと思います

dockerは全然関係なかった

自分はRuby LSPとDockerの相性の問題だと疑っていたのですが、
調べたりAIに聞いたりして、
コンテナの中にRuby LSPを入れるとか、
コンテナの中のrubocopに命令を出すとか、
devcontainer.jsonを作るとか
色々ミスリードされました。

まとめ

Ruby LSPは、サーバーを立てて処理をします。
依存するほかのソフトウェアがないと、サーバーが立ち上がりません。
Ruby LSPの出力するログに、なぜサーバーが立ち上がらないのか、書いてあったので、
必要なソフトウェアを入れたら、動きました。