0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Devcontainerはなにが便利なのか?Devcontainerの便利機能まとめ

Posted at

Devcontainerは、Dockerでの開発環境構築の面倒な部分をシンプルにするための、VS Codeの強力な機能です。Devcontainerを使うことで、Docker単体では面倒だったことが簡単になったり、より便利な機能を使えるようになったりします。

本記事では、Devcontainerの便利な機能をいくつか紹介します。ホストはLinuxである前提で書きます。

便利機能

GUIのみで操作可能

Devcontainerを使うと、コンテナのビルド・起動・アタッチなどをVSCodeのGUIのみで操作できます。なのでDocker慣れしていない人がいるチーム開発でも、比較的簡単にコンテナ仮想化を導入できます。

CLI派の人のためにCLI版もあります。

簡単セットアップ

新しい言語を試したりする際に、コンテナ内に開発環境を用意することがあるかと思います。Devcontainerがない場合はDockerfileに言語のインストール手順を書きますが、Devcontainerを使えば、より簡単に言語を動かす環境を用意できます。

やり方

例として、Python3を動かすための開発環境を用意してみます。

まずは開発用のディレクトリを用意して開きます。
つぎにCtrl+Shift+Pでコマンドパレットを呼び出し、新しい開発コンテナー(New Dev Container)を選択します。

image.png

言語の選択画面になるのでPython 3 を選択。

image.png

Dev Containerの作成を選択。
image.png

これでしばらく待つと、Python3をインストールしたコンテナが作成されます。

このように、ちょっと言語を動かすくらいなら簡単に環境を用意できます。ただ、ツール構成が複雑だったりしてカスタマイズをしたい場合はDockerfileを書く必要があります。

Gitの設定

コンテナ内でGitを使用したい場合、Gitのインストールに加えて、.gitconfigのバインドマウントが必要です。しかしDevcontainerであれば.gitconfigを自動でコンテナ内と共有してくれるので、コンテナの外と同じ感覚でGitを扱うことができます。

The extension will automatically copy your local .gitconfig file into the container on startup so you should not need to do this in the container itself.

GUIの設定

コンテナ内でGUIを使うためには普通、

  1. DISPLAY環境変数の設定
  2. /tmp/.X11-unixソケットの共有

が必要です。しかしDevcontainerではその辺を自動でやってくれます。

たまにDISPLAY環境変数の値が変になってVSCodeを再起動しないと治らないバグがあります。自分の環境だけかもしれませんが...

UIDの設定

Dockerでバインドマウントをすると、コンテナ外とコンテナ内でUIDが一致しなくなります。すると、バインドマウントしたファイルのownerがコンテナの内と外で一致せず、ファイルの実行等をできなくなる問題があります。

しかしDevcontainerを使えば、devcontainer.jsonに"updateRemoteUserUID": trueを加えるだけでその問題を回避できます。

On Linux, if you are referencing a Dockerfile, image, or Docker Compose in devcontainer.json, this will also automatically update the container user's UID/GID to match your local user to avoid the bind mount permissions problem that exists in this environment (unless you set "updateRemoteUserUID": false).

拡張機能やsetting.jsonの設定

チーム開発のとき、便利な拡張機能(言語サポートなど)や設定(自動セーブなど)はチーム全体で共有したいものです。Devcontinerの設定ファイルであるdevcontaner.jsonにはextensionssettingsの項目があり、コンテナ内で有効になる拡張機能や設定項目を記述できます。つまり、チーム内で共有したい拡張機能や設定をdevcontaner.jsonに記述してリモートリポジトリに上げておけば、その内容を反映したコンテナが作成できます。

具体的な書き方はリンク先に預けます。

バッジ・URLで環境を共有

OSSの軽いIssueを解決するときなどは、とにかくサクッと開発して動かせる環境があればコントリビュートしやすいです。Devcontainerでは、そういった短期的な開発・動作確認のために開発環境をバッジやURLにして共有することができます。

試しに、Dockerの入っている環境で以下のバッジかURLをクリックしてみてください。Javaの入ったコンテナが立ち上がります。

Open in Dev Containers

実際にコンテナ内に入ったあとがこんな感じです。リポジトリのCloneやJavaのインストールが済んでいるうえに、ビルドまでできます。

image.png

WSL2を使用している人は、WSL2環境ではなくWindows側にDockerをインストールする必要があるようです。

OSSのREADMEにバッジを貼っておくと開発者がスムーズに開発を開始できてよさそうです。

image.png

まとめ

Devcontainerの以下の機能について説明しました。個人的には特に、GUIのみでの操作や、Git・GUI・UIDの設定の自動化機能がDockerへの不満に対する解決策になっていて嬉しい点です。

  • GUIのみで操作可能
  • 簡単セットアップ
  • Gitの設定
  • GUIの設定
  • UIDの設定
  • 拡張機能やsetting.jsonの設定
  • バッジ・URLで共有
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?