【VScode】Devcontianerのすすめ

# はじめに
前職でVScodeの拡張機能であるDevcontainerを利用して開発環境を準備していました。
開発環境の準備にかかる時間的コストを圧倒的に減らすことができます。
本記事では、インストール手順から実際に開発環境を準備するまでを書いていければと思います。

# 前提
VScodeを利用してのコーディング経験があることを前提に記事を作成させていただいております。

# 事前準備
Devcontainerを利用するためには、Dockerが事前にインストールされ、起動している必要があります。
以下の公式URLの手順を参考にインストールできるため、ご確認ください。
※Docker EngineかDocker Desktopのどちらかインストール、起動できれば問題ありません。

- Docker Engineインストール手順
    - https://docs.docker.com/engine/install/
- Docker Desktopインストール手順
    - https://docs.docker.com/desktop/install/windows-install/

# 構成
Devcontainerの構成は以下になっています。
> ![container img](https://code.visualstudio.com/assets/docs/devcontainers/containers/architecture-containers.png)
引用元：https://code.visualstudio.com/docs/devcontainers/containers

上記の図の通りに開発環境をコンテナ上に作成することができます。
ワークスペースで開いているソースコードもDockerコンテナ上にマウントさせることができるため便利です。  


# Devcontainer拡張機能インストール
1. VScodeの拡張機能の検索バーに「Dev Containers」と入力します。  
2. 入力後、検索結果の一覧「Dev Containers」が表示されるため、「install」ボタンをクリックします。  
※問題なくインストールされたら「install」ボタンの表示が消えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/05a64465-3260-8283-7b80-c90ec7625e1b.png)

# テンプレートをもとに作成・起動してみる
作成するDockerコンテナには、事前にテンプレートが用意されています。  
テンプレートをもとにDockerコンテナを作成・起動してみます。
どのようなテンプレートが存在するかは、以下のURLを参照してください。  
https://containers.dev/templates

1. VScodeの左メニューにあるアクティビティバーからエクスプローラーを開き、「Shift」+「Ctrl」+ 「P」を同時に入力します。検索バーに`New Dev Container`と入力し該当するものをクリックします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/b96f9290-507f-9c1b-290b-af4f9fcf8894.png)

2. 任意のテンプレートを選択してください。  
※ここでは、Node.js & Javascriptを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/b9ed3baf-a0b0-ea87-cc20-657c2e8805c6.png)

3. 選択すると任意のコンテナ名（※Node.js & Javascriptでは、デフォルトでjavascript-node）が入力されているます。必要に応じて書き換え、その後`Create Dev Container`をクリックしてDockerコンテナを作成します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/14370b72-67bb-25c6-3dc1-9852b7b61931.png)

4. 問題なく実行された場合、ビルドが開始されます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/efcc0757-1edb-0e83-bfae-d6fc5f5ccc27.png)

5. 問題なくDockerコンテナが作成された場合、ターミナルに`Start: Run in container: XXXX`が表示されます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/b8364df9-346b-5f92-5c6f-012fe278c762.png)

6. 環境を確認してみます。ここでは Node.js & Javascriptの環境を確認してみます。  
シェルを新しく立ち上げ、以下コマンドを入力するとnodeなどのバージョンが確認できると思います。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/925118ff-35f3-85af-6ba9-a67d824efdc5.png)

7. Vueのアプリケーションを作成してローカルのブラウザから確認してみます。  
詳細は以下の公式URLを参照してください。  
https://vuejs.org/guide/quick-start
VScode上のターミナルから` npm run dev`実行するとポートフォワーディングされます。    
    ```shell
     npm run dev

    > frontend@0.0.0 dev
    > vite


    VITE v5.2.8  ready in 233 ms

      ➜  Local:   http://localhost:5173/
      ➜  Network: use --host to expose
      ➜  press h + enter to show help
    ```
デスクトップ上からブラウザを起動して、対象のURL（ここでは、 http://localhost:5173/ ）を入力すると以下の通りサイトを確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/6aceb047-4636-7c5d-be8d-2302cd6a5f23.png)


# Devcontainerの設定情報を見る
1. 上記のテンプレートの設定情報は、`.devcontainer/devcontainer.json`に記載されています。  
以下を書き換えることで作成されるDockerコンテナの構成情報を変更することができます。
※Node.js & Javascriptの`devcontainer.json`を見るとDockerコンテナのイメージに`javascript-node:1-20-bullseye`が設定されていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646964/9352a834-f1de-d9da-99a9-870e6ea65a32.png)
具体的に設定できるパラメータは、以下の公式URLからご確認ください。
https://containers.dev/implementors/json_reference/

# 利用上の注意点
利用時にいくつか気をつけるところを以下に記載します。
- Devcontainerで起動しているDockerコンテナは、ターミナルにて`docker ps`コマンドから確認することができます。 
    ```shell
    XXXX@XXXX:~$ docker ps -a
    CONTAINER ID   IMAGE                                                           COMMAND                  CREATED       STATUS       PORTS     NAMES
    d5c72524fede   mcr.microsoft.com/devcontainers/javascript-node:1-20-bullseye   "/bin/sh -c 'echo Co…"   2 hours ago   Up 2 hours             wizardly_tharp
    ```
    Dockerコンテナになるため、構成情報（コンテナ名やポートなど）が重複するする場合は、コンテナを作成することができないため注意してください。
- VScodeから接続できるDockerコンテナは１つのみです。  
  別のDockerコンテナに接続したい場合は、切り替える必要があります。  
- Devcontainerにて起動したDockerコンテナは、OS停止と`docker stop`コマンドにて停止しない限り起動したままになります。別のDockerコンテナに接続する場合は、もともとのDockerコンテナを停止するようにしてください。

# 最後に
DevcontainerはDockerfileやdocker-compose.ymlを読み込んでDockerコンテナを作成し、接続することができます。本記事では記載しませんが今後タイミングがあれば書いていこうかなと思っています。  
Devcontainerからぜひ快適な開発環境ライフをお過ごしください！

# 参考文献
- https://code.visualstudio.com/docs/devcontainers/tutorial