4
4

More than 1 year has passed since last update.

【All In One】DevContainers+WSL2で開発環境整備

Last updated at Posted at 2023-09-13

この記事の目的

  • Dev Containersを利用した記事は多いが環境切り替えを前提としているものが多い。また特にディスク周りのパフォーマンスが気になり一部退避するなどの設定が煩わしい。
  • 以前からWSL2+Ubuntu内でコンテナ開発を行っていた際にはパフォーマンスは問題ないと感じていた。
  • そこでDev Containersに同様のパターンを適用したところ想定通りの環境構築に成功した。

今回のパターンの記事は見かけないため、その手順を記載させていただきました。

Dev Containersとは

  • VSCodeの拡張機能でDockerコンテナ内で開発ができる機能。
  • JSONで定義して環境を構築が可能。ファイルもホストとコンテナ間で同期される前提で設定される。
  • また既に実行中のコンテナに対しても接続できるため、コンテナ内のファイルを直接確認や編集することもできる。
  • また、コンテナ内でサーバ機能を立ち上げた際にVSCodeがポートを開いてくれるため、ブラウザ等外部からアクセスできる。

など、非常に魅力的な機能が満載です。
その一方でDocker DesktopやRancher Desktopなどを利用する記事が多いため、そのまま適用するとDockerのバインドマウントでのパフォーマンスの悪さが気になってしまうのではないかと思いました。

パフォーマンスの問題回避方法とは

  • WSL2+Ubuntu上でDev Containersを構築することで、バインドマウント先をWSL2のUbuntu上のファイルシステムとすることでパフォーマンス問題を回避させる。
  • そのため、個別に特定フォルダをvolumeに退避する必要がなく実行できる。
  • また、その場合には拡張機能でWSLへ接続後にDev Containersに接続するという2段階の手順が必要になるが、その手間も回避できる。

というものです。

WSL2の設定

  • まず、WSL2とUbuntuは通常通りにインストールする。
    • この時、Ubuntuのバージョンは22.04を利用するとdockerサービスが自動起動する。
PowerShell
wsl --install Ubuntu-22.04
  • また、Ubuntuのデフォルトユーザはrootとした。
    • 賛否両論あるかと思うが、dockerコンテナ内でファイルを作成すると、ホスト側のユーザはrootとなってしまうため、最初からホスト側もrootとした。
    • 共有PCとかだと厳しい設定かもしれないが、開発者が扱うPCであれば問題ないと判断した。
    • また、エクスプローラーからアクセスする際のユーザもrootとなるため、コンテナ内で編集したファイルも直接扱える。
PowerShell
ubuntu2204 config --default-user root

.devcontainerフォルダの作成

  • Terminalなどを立ち上げ、Ubuntu内で作業をする。(rootユーザを想定)
  • 開発に使用するフォルダを作成し、その中へ移動する。
ubuntu
mkdir ~/workspaces
cd ~/workspaces
  • 作業フォルダの中に.devcontainerフォルダを作成する。
    • このフォルダ内にdevcontainer.jsonを作成することで、VSCodeの拡張機能であるDev Containersが認識する。
ubuntu
mkdir .devcontainer
devcontainer.json
{
  "name": "dev",
  "image": "debian:latest"
}

VSCodeの起動

  • 作業フォルダに戻り、VSCodeを起動する。
ubuntu
code .
  • VSCodeが起動し、Dev Containersの拡張機能がインストールされていれば、右下にReopen in Containerというボタンが表示されるので、そのボタンを押下する。
    • コマンドパレットからDev Containers: Reopen in Containerでも可。
  • すると、VSCodeが再起動し、devcontainer.jsonの内容に従って(初回は時間がかかるが)コンテナが起動する。
  • なお、Windows上のVSCodeのアイコンを右クリックすると、フォルダの履歴が表示されてピン止めできるので、次回からはそこから起動すると一発でDev Containersまで接続できて便利。

ピン留め

ベースイメージについて

  • 以前からコンテナ開発を行っていたため、必要な開発ツール等が入ったベースイメージを自作している。

  • Dev Containersではfeaturesなどで必要な機能を追加することができるが、こちらのベースイメージを利用することで、その手間を省くことができる。
    • 最終的にはfeaturesに書けるように分離したいとは思っているが、利便性とのトレードオフかと思う。
    • とにかく細かいプロジェクトを同時並行的に扱うため、VSCodeでの環境の切り替えではなく必要なものを一つのコンテナにまとめている。
    • そのため、ベースイメージには多くの開発ツールが入っている。
  • 一旦、こちらにはdevcontainer.jsonに拡張機能まで設定したものもありますので、参考までにどうぞ。

最後に

  • パフォーマンスについては測定しておりません。(申し訳ございません。)
    • ですがファイルをWindowsまで持っていくよりも段違いで速いです。
    • また、個別のvolumeを作成するとpnpmを利用している場合には、ボリュームが違うと怒られてしまってpnpmの本来のメリットが活かせない事情もあります。
  • なお、紹介しているdevenvironのベースイメージはオープンソースで開発を行っております。
    • そのため、不具合や改善点などありましたら、IssueやPRなどお気軽にお願いします。
    • また、この記事の内容についても、不明点や改善点などありましたら、コメントなどお気軽にお願いします。
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4