🎼

VimでRailsの補完設定

2024/09/14に公開

仕事でRailsプロジェクトを触ることがあるんですけど、Vimでの補完候補にRails本体のメソッドなんかが出てこないのでなんとかしたいなとずっと思っていました。

わたしの環境

neovimのv0.10.1でcoc.nvimを使っています。

https://github.com/neoclide/coc.nvim

Rubyの補完

素のRubyの場合は、あまりハマらずすんなり補完できます。gemでsolargraphを入れておいて、coc.nvim側ではcoc-solargraphを有効にするだけです。

https://github.com/neoclide/coc-solargraph

今回の例では、bundlerを使わずにgem installでsolargraphを入れています。

$ gem install solargraph

こんな感じになります。

うまくいかない場合

思った通りいかないときは:CocInfoでログを見てみましょう。たいていクラッシュしてたりと、なんだかんだ原因が出力されています。

Rubyのバージョンアップ後はわりと動かなくなります。この場合はsolargraph, nokogiri, rbsあたりを再インストールしてだいたい解決します。

mason

ちなみに常用してないんであっさり紹介にとどめますが、mason.nvimでも同様にsolargraphを使うと同じように補完できます。わたしの設定は以下。

require('mason').setup()
require("mason-lspconfig").setup {
    ensure_installed = { "solargraph" },
}
require'lspconfig'.solargraph.setup{}

https://github.com/williamboman/mason.nvim

Railsの補完

Vim上の設定はsolargraphを使えるようにするだけなのですが、Railsでいい感じにするためにはVimの外側で頑張らないといけないようです。Rails用のプラグインがあるので、それを入れます。

$ gem install solargraph-rails

https://github.com/iftheshoefritz/solargraph-rails

solargraphの設定ファイルを用意します。

$ solargraph config
Configuration file initialized.

プラグインの項目にさっきのsolargraph-railsを追加します。

$ diff -ur .solargraph*
--- .solargraph-old.yml 2024-09-14 16:30:13
+++ .solargraph.yml     2024-09-14 16:30:21
@@ -18,5 +18,6 @@ plugins: []
     only: []
     extra_args: []
 require_paths: []
-plugins: []
+plugins:
+- solargraph-rails
 max_files: 5000

solargraphをgem installで入れているので、Railsも同様に入れておく必要があります。全部終わったらyard gemsでドキュメントの生成もしておきます。

$ gem install rails
$ yard gems

以上の設定で、Rails由来のメソッドの補完も効くようになりました。ドキュメントもすぐに参照できるので便利です!

bundle add solargraphしたい

Gemfileの中でsolargraphを使えるように追加しておくケースもあると思います。これができるなら、おそらくこっちのほうがいいんですよね(Rubyのプロジェクトにあんま詳しくないのでよくわかってないけど)。

Gemfileに入れた場合は、solargraphもbundle exec経由で実行できるようにVim側の設定が必要です。coc.nvimの場合は:CocConfigで設定ファイルを開き、solargraph.useBundlerをtrueにします。

{
  "solargraph.useBundler": true
}

特定のプロジェクトだけで有効にしたい場合などは、:CocLocalConfigでプロジェクトローカルの設定ができるので、使い分けも可能です。

まとめ

終わってみれば設定内容はシンプルでした。solargraphとRailsを同じ環境に突っ込んでyard gemsが必要!というのがどうやらポイントみたいですね。なんかが欠けてるとうまく動かないようだし、そもそもRailsようわからんというもあり、ここにくるまで正直めんどかったですが、理屈が結構わかったので良かったです。

しばらく触らないでいたら絶対動かなくなって「どうやるんだっけ?」ってなるだろうから、そのときのために記事に残しておくことにしました。皆さんも気づいたことは記録しておくといいんじゃないかと思います。では。

GitHubで編集を提案

Discussion