VSCodeのDev ContainerでRuby on Railsの開発環境を作る
まずはVSCodeのドキュメントにあるRubyの環境セットアップを読む。
Ruby LSP 拡張機能を使うことが推奨されている。
LSPとは Language Server Protocol のことで、Ruby LSPはRuby用のLSPだということだ。
LSPの説明
The Language Server Protocol (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. The goal of the Language Server Index Format (LSIF, pronounced like "else if") is to support rich code navigation in development tools or a Web UI without needing a local copy of the source code.
LSPはエディタと言語サーバー(とは?)との間で使用されるプロトコルだそうだ。
つまりRuby LSPは、Ruby用のLSPの「実装」だそうだ。プロトコルの実装とは...いまのところまだ抽象度が高くてよく分からない。
とにかくRuby LSPを使うことで、さまざまな便利機能がVSCodeで使えるようになるということだ。
デフォルトで、Ruby LSPは server gem(とは?)を含むカスタムbundleを .ruby-lsp
に作る。そしてRuby SLP serverというものを起動するらしい。
gem ruby-lspというのがRuby SLP serverになるらしい。
ローカルにRubyの開発環境を作っている場合、基本的にデフォルトでいい感じに設定してくれるらしい。
(ここまでの理解)
- Ruby LSPはエディタと言語サーバー間のプロトコル
- Ruby LSP拡張機能は、言語サーバーのセットアップを行い、言語サーバーから得た情報を使って、VSCodeを便利にする
- 言語サーバーは、(おそらく)ソースコードを解析して、Ruby LSP(プロトコルの方)を使ってVSCodeのRuby LSP拡張機能とやり取りをする
Dev Containerを使った環境構築についてはこちらを参考にさせてもらう。
Rubyの開発環境にコンテナを使っている場合、コンテナ内に拡張機能をインストールするらしい。(Dev Containerを使ったことがないので、コンテナに拡張機能をインストールするの概念がまだわかってない)
Dev Containerを使うと、コンテナ側にVSCodeサーバーがインストールされる。ローカルのVSCodeは、コンテナのVSCodeサーバーと通信している。
Dev Containerに拡張機能を追加するということは、コンテナのVSCodeサーバーに拡張機能を追加することを意味する。
Ruby-LSPやsolargraphなどは、コンテナ内の言語サーバーと通信するため、コンテナ側のVSCodeサーバーに拡張機能が必要ということ。
IntelliJでできていたコードジャンプができない。例えば、モデルのscopeに対するコードジャンプ。
solargraphもRuby-LSPと同じ、LSPを使う言語サーバーだったんだ。両方入れたほうがいいのかな。
TODO: デバッガーを導入したい&仕組みを調べたい