VSCodeでRuby On Railsを快適に書きたい

VSCodeでRuby On Railsを快適に書くために行っている設定。[^1]
現在いろいろ模索中なので、アドバイスあればコメント下さい〜

## Ruby/Rails専用の拡張機能

### [Ruby](https://marketplace.visualstudio.com/items?itemName=rebornix.Ruby)
強力。必須。
ドキュメントに従って各種gemを入れれば一通りそろう！!

### [endwise](https://marketplace.visualstudio.com/items?itemName=kaiwood.endwise)
自動でendを挿入してくれる
![endwise_gif](https://github.com/kaiwood/vscode-endwise/raw/master/images/endwise.gif)

### [ruby-rubocop](https://marketplace.visualstudio.com/items?itemName=misogi.ruby-rubocop)
ファイル保存のタイミングでrubocopを自動で走らせることができる
![ruby_rubocop_gif](https://github.com/misogi/vscode-ruby-rubocop/raw/master/images/onsave.gif)

### [Rails Go to Spec](https://marketplace.visualstudio.com/items?itemName=sporto.rails-go-to-spec#overview)
`Cmd + Shift + Y` で spec ファイルと行き来できてかなり便利！

### [Rails Run Specs](https://marketplace.visualstudio.com/items?itemName=noku.rails-run-spec-vscode)
開いているspecファイルや直近のテストをパッと実行できる。
直近のを即再実行できるの大事。

【**注意**】
Spec実行のコマンドが、VSCodeの標準コマンド「直近の閉じたタブを開き直す」(`Command + Shift + T`)と被っているのが致命的。

```settings.json
{
    "command": "extension.runFileSpecs",
    "title": "Run File Specs",
    "key": "cmd+shift+t"   <= ここを「cmd+shift+t」以外の非標準の好きなコマンドに変える！
}
```

### [Slim](https://marketplace.visualstudio.com/items?itemName=sianglim.slim)
Slimファイルを使っているので。ERBの人はそっちを。

### [ruby-symbols](https://marketplace.visualstudio.com/items?itemName=miguel-savignano.ruby-symbols#overview)
シンボルの自動補完をしてくれる。任意かな。

### [Rails](https://marketplace.visualstudio.com/items?itemName=bung87.rails)
Rails用のスニペットやナビゲーションなどを提供してくれる。任意かな。
![rails_gif](https://github.com/bung87/vscode-rails/raw/master/images/vscode-rails.gif)

## Ruby専用の設定 

Rubyのみに適応するためには、以下の {}内に設定項目を追加すればOKです。

```json
"[ruby]": {
},
```

### タブのサイズ
`"editor.tabSize": 2`

### その他
今のところ、タブサイズ以外はデフォルトのままです。
設定ファイルの検索で「ruby」と打つと、↓のようにたくさんあります。

```json-doc

   // Filepath to the configuration file for Rubocop
  "ruby.rubocop.configFilePath": "",

  // execution path of rubocop.
  "ruby.rubocop.executePath": "",

  // execute rubocop on save.
  "ruby.rubocop.onSave": true,

  // Defines if it should clear the terminal on each spec run
  "ruby.specClearTerminal": true,

  // Defines a custom command to run for specs (i.e. 'spring rspec')
  "ruby.specCommand": "",

  // Defines if it should focus on terminal on each spec run
  "ruby.specFocusTerminal": true,

  // Defines the type of tool used for testing
  "ruby.specGem": "rspec",

  // Defines the pattern for seaching test files
  "ruby.specPattern": "spec",

  // Auto Save file before running spec test
  "ruby.specSaveFile": false,

  // Zeus gem needs a certain time to start. Defined in ms
  "ruby.zeusStartTimeout": 2000,

  // Method to use for code completion. Use `false` to disable or if another extension provides this feature.
  "ruby.codeCompletion": false,

  // Which system to use for formatting. Use `false` to disable or if another extension provides this feature.
  "ruby.format": false,

  // Method to use for intellisense (go to definition, etc.). Use `false` to disable or if another extension provides this feature.
  "ruby.intellisense": false,

  // Path to the Ruby interpreter.  Set this to an absolute path to select from multiple installed Ruby versions.
  "ruby.interpreter.commandPath": "ruby",

  // Set individual ruby linters to use
  "ruby.lint": {},

  // Time (ms) to wait after keypress before running enabled linters. Ensures linters are only run when typing has finished and not for every keypress
  "ruby.lintDebounceTime": 500,

  // Defines where the Ruby extension will look to find Modules, Classes and methods.
  "ruby.locate": {
    "exclude": "{**/@(test|spec|tmp|.*),**/@(test|spec|tmp|.*)/**,**/*_spec.rb}",
    "include": "**/*.rb"
  },

  // Path to the bundler executable (used if useBundler is true)
  "ruby.pathToBundler": "bundle",

  // Path to the rct-complete command.  Set this to an absolute path to select from multiple installed Ruby versions.
  "ruby.rctComplete.commandPath": "rct-complete",

  // Whether ruby tools should be started using Bundler
  "ruby.useBundler": false
```

## Rails のデバッグ
### 1) サイドバーのデバッグボタン(虫のやつ)をクリックし、以下の構成を追加。

```.vscode/launch.json
{
    "name": "rdebug-ide",
    "type": "Ruby",
    "request": "attach",
    "cwd": "${workspaceRoot}",
    "remoteHost": "127.0.0.1",
    "remotePort": "3000",
    "remoteWorkspaceRoot": "${workspaceRoot}"
}
```

### 2) Gemfile に gem を追加

```rb:Gemfile
gem 'ruby-debug-ide'
gem 'debase'
```

ちなみに、Gemfile を git 管理していると安易にこういう追加はしたくないはず。
そういう時は、環境変数を使ってうまいことやるのがオススメです。
-> 参考: [Gemfileにないgemを使いたい](https://qiita.com/vzvu3k6k/items/12aff810ea93c7c6f307)

### 3) Rails を立ち上げる

```console
$ bundle exec rdebug-ide --host 127.0.0.1 --port 3000 --dispatcher-port 26162 -- bin/rails s -p 3000
```

[^1]: 汎用的なオススメの拡張機能は[こちら](https://qiita.com/sensuikan1973/items/74cf5383c02dbcd82234)を参照して下さい