VSCodeのRemote Extentionを使う話

初めまして、情報戦略テクノロジーの濱崎と申します。

今回は、リモート環境での開発を楽にしてくれる、 [Visual Studio Code Remote Development](https://code.visualstudio.com/docs/remote/remote-overview) について紹介します。

# 概要
Visual Studio Code(以下、VSCode) の拡張機能であり、ローカル環境のVSCodeを通してリモート環境に接続し、VSCodeを利用した開発環境を展開します。
手元のVSCodeでリモート上のファイルを編集するのをはじめとして、端末(シェル)の操作からソースコードの実行、デバッガの利用まで出来てしまいます。
ターミナルを使いSSHを繋げてエディタを立ち上げてビルドコマンド叩いて…といった一連の作業を、全てVSCodeの画面の中で完結できるようになります。

こういった方にオススメです。
* VSCode を使っていて
  * 仮想環境orクラウドのLinuxOS上で開発してる方
  * Dockerコンテナ上で開発してる方

# 導入

VSCode の Extention から Remote と検索すれば出てきます。
Remote Development は正確には4つの拡張機能をセットにしたもので、以下で構成されています。

* Remote - SSH
  * SSH利用、一般的なサーバ向け
* Remote - Tunnels
  * サーバ側のVSCode利用
* Dev Containers
  * コンテナ向け
* WSL
  * WSL向け


利用目的に応じて、必要なものだけインストールする形でも問題ありません。
今回はSSHの場合を例に示していきます。

## 実例

接続先: ローカルPC上の仮想Linux (Debian)
接続方式: SSH

Remote - SSH をインストールします。
![スクリーンショット 2023-05-22 203639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/6d0d4f40-d949-414f-580b-8877a9523394.png)

インストールすると、Remote Explorer のパネルが追加されます。
![スクリーンショット 2023-05-22 205311_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/4661f828-43a5-b4c5-24fc-a13d8e1045e1.png)

+ボタンを押すと、sshコマンドの入力欄が現れます。
ここにssh接続時のコマンドを入力して、接続情報を登録します。
(この時点ではまだ接続はされません)
![スクリーンショット 2023-05-22 214111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/febffa9d-6b72-dc80-24d8-ee80d784077b.png)

入力してEnterを押すと、Explorerに接続先が表示されます。
![スクリーンショット 2023-05-22 214213_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/abeffddc-9e4f-6416-bd49-b40d6e96ff8e.png)

では実際に接続していきましょう。
初回接続時は接続先サーバのOSを尋ねられます。[^1]
対応するものを選択してください。

![スクリーンショット 2023-05-22 214235_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/8f985376-7fba-f928-fc2a-d44270dd2fa2.png)

[^1]: Remote Extention はサーバ側にVSCode用のファイルを配備しており、それによりVSCodeとの連携を実現しています。
OSに合わせたファイルを展開するために先の質問があると思われます。

パスワード認証の場合はこのタイミングでパスワードを入力します。
鍵認証の場合は予め公開鍵を設定していれば問題ないはずです。

ログイン後の画面はこんな感じです。 `Ctrl-@`で端末を表示させています。
左下にSSH接続している情報が出ていますね。

![スクリーンショット 2023-05-22 214342_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/85e1d4ae-d276-62ae-0b5f-9d6b655e248e.png)

折角なので簡単なプログラムも動かしてみましょう。
まずはbashスクリプトの保存から。

![スクリーンショット 2023-05-24 205314_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/43d28cc5-763f-2494-ec37-a4455cc28b64.png)

保存時はWindowsとは違った形で保存のUIが出てきます。
現在の作業ディレクトリを含めたフルパスを指定して保存する形となります。
下にはディレクトリの他のエントリーが出てますね。(`ls`コマンドの内容と同一)

保存したら、そのまま端末から実行できます。
![スクリーンショット 2023-05-24 205333_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/7fd6c436-eed6-2f26-2da8-f478aee1f99c.png)

もう一つ、パワフルな例を紹介しましょう。
今度は Node.js を使ってHTTPサーバを立ててみます。

まず、VSCodeのOpen Folderでサーバ上のディレクトリにアクセスしてみます。
![スクリーンショット 2023-05-24 210814_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/db213c0f-afca-7d7a-bf56-f7daf9eb836f.png)
![スクリーンショット 2023-05-24 211004_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/1000d212-494b-1bbd-bcc0-dded02bc847a.png)

通常のローカル運用と同じように、Explorerパネルにディレクトリ配下のアイテムが表示されることがわかります。

では、[Node.jsのサンプルスクリプト](https://nodejs.org/en/docs/guides/getting-start-guide)を使って立ち上げてみます。

![スクリーンショット 2023-05-24 211108_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/147d7f1b-ec1c-1a31-5b72-62167b752d35.png)
```shell-session
$ node ./app.js
```

謎の通知が右下に出ますが後で確認しましょう。
まずはもう一つ端末を開き、`wget`で動作確認してみます。

```shell-session
$ wget -O- -q http://127.0.0.1:3000/
Hello World
```

問題なさそうですね。
さて、先程の通知です。よくみると端末があるパネルに PORTS というタブができてますね。見てみましょう。

![スクリーンショット 2023-05-24 211927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/fb0caf70-1471-b547-3f30-863a53d20b5b.png)

Node.jsのサーバである3000番ポートが記載されています。
これは、VSCodeがポート開放を検知して、ローカルPCのアドレスから自動でフォワードしてくれていることを意味します。
今回の場合、**ローカルPCのWebブラウザで 127.0.0.1:3000 にアクセスしたら、リモートで立ち上げているNode.jsサーバに向けて転送してくれる**状態になっているのです!
Local Address に書かれている 127.0.0.1:3000 にアクセスしてみましょう。
アドレスをCtrl-クリック、またはブラウザのアドレスバーに入力します。

![スクリーンショット 2023-05-24 211945_ed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3347403/2cec9a1d-8f5b-b095-d3d5-4225fcc94049.png)

ローカルPCのブラウザでも正しく表示されました。
開発環境のアドレスをブックマークに入れることなく、すぐに動作確認ができますから、フロントエンド開発では特に力を発揮すると思います。

# 終わりに
今回は導入から簡単な使い方までの紹介とさせていただきましたが、普段のVSCodeと同様にソースコード管理(Git)やデバッグ実行も利用できますし、拡張機能も導入できます。
これを機に知った方は是非使っていただき、便利さを体験していただければと思います。