VSCode の Remote Development を使って開発者体験を上げる

## Remote Developmentとは

`Remote Development`は, VSCode からServerやWindows Subsystem for Linux (WSL), Containerなどの VSCode を実行しているホスト以とは別の環境に接続し, Server上のワークスペースを開発環境のように扱うことができる.
これにより環境構築済みのServerへVSCodeから直接アクセスすることができ,開発者間での環境を簡単に統一できたり, ローカル環境に影響を与えず, 開発環境を構築/削除が容易にできる.

[公式ページ](https://code.visualstudio.com/docs/remote/remote-overview)

## 試してみる

今回はMacを使い, SSHで他のサーバに接続する手順を説明する.

### 拡張機能インストール

はじめに, Remote Development拡張機能をインストールする. VSCode で`Remote Development`を検索し,インストールする.
`Remote Development` をインストールすると，`Remote WSL`, `Remote SSH`, `Remote Containers` のようにそれぞれに接続するための拡張機能が自動的にインストールされる．
とくに`Remote WSL` はWSLを利用しているWindowsユーザーにとっては便利機能だと思う.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/83cc0861-57be-bf16-f156-738d4a479344.png)
### SSH接続

サーバへの接続はSSHを用いて行われるため，鍵認証方式でサーバとSSH接続できるようにセットアップしておく必要がある．
今回は, Microsoft Azure 上に仮想マシンを作成してそこに接続する.

[公式ページ](https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/quick-create-portal)

VSCode の左側のRemote Development タブを開くと接続先一覧が表示される．すでにsshで接続するために，`~/.ssh/config`などがある場合は読み込まれて設定している接続先一覧が表示される．

configファイルを持っていない場合は，`No SSH hosts...`のような表示が出ているので，ギアクリックしてSSHのconfigファイルを作成する．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/3f5b1da9-a5a5-6409-13a9-2d8d7d6f84c7.png)


config ファイルを以下のformatで作成する.

```config
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host host1
    HostName xxx.xxx.xxx.xxx (IPアドレス, DNSなど接続先)
    Port 22
    User hoge (ログインするユーザ名)
    IdentityFile ~/.ssh/sample_rsa (鍵認証に使う鍵ファイルを記述)
```

configファイルを設定するとconfig のhostが表示されるので選択して接続する.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/8e1724bf-df77-332f-e9c0-59e60ead5fd2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/3f49827c-6dfc-af73-f9ab-a409cfa738eb.png)

「Continue」を選択する.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/09c98846-e4a4-dcd4-0872-c234a0b8ed13.png)

接続が成功したら,「Open Folder」から接続先のフォルダを選択して操作できるようになる.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/ca7778d4-3ec7-b3b1-c935-e0471f2fb9f2.png)


### Container 接続

接続するために, nginx のimageをpullして起動しておく.

```sh
$docker run --name remote-sample -d -p 8080:80 nginx
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c164ead158ca        nginx               "/docker-entrypoint.…"   15 seconds ago      Up 13 seconds       0.0.0.0:8080->80/tcp   remote-sample
```

nginx が起動したのを確認して, Remote Development タブを開くと, Containers に nginxが表示される.
リアルタイムで表示されなかったが,VSCodeを再起動したら表示された.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/8455dcbf-76b1-fee9-f916-2c29dc89809b.png)


nginx を選択して, 「Attach Container」を選ぶと nginx containerに接続して, container内部の情報をVSCodeで閲覧して修正できる.
添付画像は container 接続後に `/etc/nginx` 配下のfileを確認している.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217019/85f8c171-46fa-df3d-973a-413fa476414e.png)

他にもチュートリアル用のContainerが用意されているので,そちらで各開発言語が含まれているContainerに接続できる.

[公式チュートリアル](https://code.visualstudio.com/docs/remote/containers-tutorial)

## 終わりに
別環境をローカル環境のように扱うことができ,かつ使い慣れたエディタで開発できることは非常に便利になった. 環境構築されたContainerやServerを使うことで初期設定のコストが削減される. またローカル特有の問題に影響を受けることも少ない.