Railsリモート開発環境 VSCode編

## 前書き

VSCode(以下code)でのRuby on Rails開発とVM(Vagrant&Oracle Virtual Box)でのデバッグについてチームメンバーのセッティングのために書きます。
Rails6ですが、4や5でも同じかと思います。（４，５で試した方いればコメントくだされば助かります）

## VSCodeのSSHリモートワークスペース拡張機能（=神Extention）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/09f9c58d-2773-ef40-2362-73cad66afe20.png)

これをホストOSのcodeに入れます。
SSHでワークスペースやCUIを使えるすごいやつです。
GUIで開発しながら開発環境のシェルを使ってコマンドを打てるのでまるでローカル開発と変わらない感覚でゲストOSの操作ができる画期的なExtentionですね。
これでよりホストOSが汚れなくなるし、環境セッティングもローカルと同様にできるのでやりやすい。

注意点は「次回以降同じワークスペースで開く」設定の人はちゃんと`vagrant up`してからcodeを開こうね。
あと横着して本番環境に接続したりしないようにしようね。
VSCodeServerが立ち上がってリソースを消費するぞ。

## SSHホスト設定

* ssh configに追加すればいいだけ。
  * できるひとはコマンドリダイレクトでパパッとやってもいいよ。
  * 指定したファイルをSSHホストとして読み込む設定がsettingsにある。

今回はVagrant先輩におんぶに抱っこで行きます。

1. コマンドパレット`Ctrl+p`に`ssh config`を入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/c0031baa-c99b-27b2-8384-cd0213181310.png)

2. 出てきたconfigの一番上を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/0e26ba03-67f6-c176-b821-eda3488ab18e.png)

3. 開いたconfigをそのままにして次へ
4. terminal(コマンドプロンプト、Powershell、Gitbushなど）でVagrantフォルダへ移動
5. `vagrant up`したあと`vagrant ssh-config`すると以下のようなSSHホスト設定がでます

    ```config
    Host default
    HostName 127.0.0.1
    User vagrant
    Port 2222
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile /home/sysman/xxxx/.vagrant/machines/default/virtualbox/private_key
    IdentitiesOnly yes
    LogLevel FATAL
    ```
6. 5.の結果を3.で開いたconfigにコピペします

## リモートのワークスペースを開く

コマンドパレットから`ssh con`とかで`Connect to Host...`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/c21929e6-2064-c23a-0c1e-9259a9b784d8.png)

うまく設定できていれば以下のようにSSHホストが表示されるのでクリックすれば接続開始。ゲストOSにVSCodeサーバーを立ててくれます。（defaultはvagrantがつけた名前。configのHostの横がSSHホストの名前です)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/d45b8d4e-68de-15d3-43d5-9a1f53083ee6.png)

もう一つのvscodeが起動したりしなかったりで、初期起動時の画面が表示されます。
適当にフォルダを開こうとするといつもと違う感じになっていますね？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/842d7fbc-a799-bd7d-4e79-1d90be5d1923.png)

ここから先はゲストOSです。アプリケーションのルートを開きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/99463cc4-c842-d437-08ea-a1f550fae466.png)

## Extentionの導入（Ruby）

このリモート開発機能は前述の通りVSCodeサーバーを立ち上げるので、Extentionsをリモートに導入する必要があります。
入力補完(Intellisense: Solargraphとか？)、Lint(みんな~~大好き~~Rubocop)、フォーマッタ(prettierかrufo)があればだいたい大丈夫でしょ。(Railsサポートの拡張機能やRainbow bracketなど他にも使っているものは同様です)
`Disable`ではなく`Install:default`などと緑の表示があればクリックして導入しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/f3bc153c-f854-dae4-e5f2-4a0b99e2de0e.png)

## デバッガの設定

すでに俺のリモートがローカルでないわけがないので普通にローカルデバッグの設定を入れられます。

1. 適当に.rbファイルを開く
2. 左のアイコンからデバッグ表示にすると`create a launch.json file`があるのでクリックする  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/ba2ad30e-233a-7769-4b9e-bbc585cd2ce2.png)
3. `Ruby`を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/368e83f7-78cf-24cd-9c40-28b54da4dca7.png)

4. `Rails server`を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/0a3910ee-aa0e-43b8-a6ec-8989bbd025e0.png)

5. できた`launch.json`を以下のように編集します

    ```json
    {
        // Use IntelliSense to learn about possible attributes.
        // Hover to view descriptions of existing attributes.
        // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "Rails server",
                "type": "Ruby",
                "request": "launch",
                "cwd": "${workspaceRoot}",
                "program": "${workspaceRoot}/bin/rails",
                "args": ["server", "-b", "0.0.0.0"],
                "useBundler": true,
                
            }
        ]
    }
    ```

    差分:

    ```diff
                "program": "${workspaceRoot}/bin/rails",
                "args": ["server", "-b", "0.0.0.0"],
                "useBundler": true,
    ```

6. デバッグ表示に切り替えると`Rails server`の横に緑の▷があるのでクリックすればデバッグモードでサーバーが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/148dbf27-0ba4-3864-5157-f5e6a174a342.png)
7. 適当にブレイクポイントを設定して止まるか確認して終わり。
下のラベルが緑はリモート接続オレンジがデバッグの目印。
実際にブレイクしたステップは黄色のラインになっていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166036/169e5a00-3aa6-012e-82de-bb71345fbf65.png)

ぼくはいんてりじぇーします

いじょ族

---
参考にした記事：
[VSCodeのRemote Developmentを使ってリモートのRuby(Sinatra)をデバッグする](https://qiita.com/saboyutaka/items/fc147478db58eeeaa742)

参考になる記事:
[VSCodeの拡張機能でRailsと仲良くなる](https://qiita.com/hakshu/items/98ed12c32da97474b68d)
[【Ruby】Visual Studio CodeでRubyのコード補完を有効にする](https://kic-yuuki.hatenablog.com/entry/2019/02/02/160659)
[prettier-ruby VSCode Formatter設定](https://qiita.com/koshilife/items/c112c57673721e3d0015)