VSCodeでRuby Solargraph拡張機能を使ってみた話

## VSCodeでRailsのコーディングを快適にしよう！

VSCode上でRailsのコーディングを行う際にメソッド名や変数名を自動補完してくれると、やっぱり作業が捗ります。
そこで、VSCodeの拡張機能[Ruby Solargraph](https://marketplace.visualstudio.com/items?itemName=castwide.solargraph)を使用して実現したいなと思います。

Ruby Solargraphは、コード解析と自動補完用のRubyGemsであるSolargraphをVSCode上で使用できるようにしてくれる拡張機能です。

今回は、以下の2つの条件下でRailsのコーディング環境を整えてみました。

1. RubyGemsのSolargraphをsystemにインストールする場合
   - Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-65-generic x86_64)
   - rbenv 1.1.2-4-g577f046
   - ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]

2. RubyGemsのSolargraphをBundler経由でインストールする場合
   - Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-65-generic x86_64)
   - rbenv 1.1.2-4-g577f046
   - ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
   - Bundler version 2.0.2

## Railsのコーディング環境を整えてみる

> (1.) (2.)の手順で説明が冗長になっている箇所がありますが、手順に沿って操作する際のやりやすさを考慮した結果ですのでご了承ください。

### 1. RubyGemsのSolargraphをsystemにインストールする場合

1. systemにRubyGemsのSolargraphをインストールする  
   `gem install solargraph`
2. VSCodeのRuby Solargraph拡張機能をインストールする  
   `code --install-extension castwide.solargraph`
3. VSCodeの`setting.json`に以下の1行を追加する  
   これにより、systemにインストールしたSolargraph gemを参照するようになる  
   (falseという値はデフォルト値ですが、この手順では明示的に追加しています。)  
   `"solargraph.useBundler": false,`
4. `.solargraph.yml`を開発アプリケーションのプロジェクト ディレクトリ直下に生成する  
   (solargraphの挙動を指定する設定ファイル)  
   `solargraph config`
5. `.solargraph.yml`の内容を一部修正する  
   ([SolargraphのIssues](https://github.com/castwide/solargraph/issues/87)にRails対応についてのやり取りがあり、この手法が書いてある)  

```yml:.solargraph.yml
  .
  .
# require: [] # この行を、以下のように修正
require: # https://github.com/castwide/solargraph/issues/87
- actioncable
- actionmailer
- actionpack
- actionview
- activejob
- activemodel
- activerecord
- activestorage
- activesupport
  .
  .
```

### 2. RubyGemsのSolargraphをBundler経由でインストールする場合

1. Gemfileに以下の1行を追記し、`bundle install`を実行する  
   `gem 'solargraph', group: :development` ~~※補足①~~
2. VSCodeのRuby Solargraph拡張機能をインストールする  
   `code --install-extension castwide.solargraph`
3. VSCodeの`setting.json`に以下の1行を追加する  
   これにより、Bundler経由でインストールしたSolargraph gemを参照するようになる  
   `"solargraph.useBundler": true,`
4. `.solargraph.yml`を開発アプリケーションのプロジェクト ディレクトリ直下に生成する  
   (solargraphの挙動を指定する設定ファイル)  
   `bundle exec solargraph config`
5. `.solargraph.yml`の内容を一部修正する  
   ([SolargraphのIssues](https://github.com/castwide/solargraph/issues/87)にRails対応についてのやり取りがあり、この手法が書いてある)  

```yml:.solargraph.yml
  .
  .
# require: [] # この行を、以下のように修正
require: # https://github.com/castwide/solargraph/issues/87
- actioncable
- actionmailer
- actionpack
- actionview
- activejob
- activemodel
- activerecord
- activestorage
- activesupport
  .
  .
```

### 設定完了！

これで自動補完が効くようになっているはずです。
`.solargraph.yml`については、プロジェクトがGit管理されているのであれば除外するように`~/.config/git/ignore`ファイルに追記しておいた方がいいかもしれませんね。

~~### 補足①~~

~~プロジェクトのGemfileがGit管理されている場合、個人でしか使わないgemについて追記するのは抵抗があります。調べてみると、次のようは方法があるようです。~~

> 参考
> Gemfileにないgemを使いたい
> https://qiita.com/vzvu3k6k/items/12aff810ea93c7c6f307

~~まず、`Gemfile.local`というファイルを`Gemfile`と同一のディレクトリに作成します。~~

```Gemfile.local
eval_gemfile "Gemfile"

gem 'solargraph', group: :development
```

~~そして、`bundle install`を実行する際に`BUNDLE_GEMFILE="Gemfile.local"`を付加します。~~

```bash
BUNDLE_GEMFILE="Gemfile.local" bundle install
```

~~こうすると、`Gemfile.lock`ではなく`Gemfile.local.lock`が生成されます。~~

~~`Gemfile.local`と`Gemfile.local.lock`を`~/.config/git/ignore`ファイルに追記しておけば、Gitで誤ってコミットすることもなく快適です。~~

> [2019/04/04追記]
> BUNDLE_GEMFILEを使用した方法だと、VSCode上でRubyのデバッグがうまく動作しませんでした。
> 原因は追い切れていないのですが、処理の途中でGemfile.localに記述したgemをうまく探し出せないようです。
> [2019/10/11追記]
> @__hage さんがコメントしてくださった通り、個人でしか使わないのであればBundlerを経由せずsystemにインストールする方法があります。
> Bundlerを経由しない場合のインストール方法を追記し、文章全体を見直しました。