🚀 VS Code で で入手しましょう!

Dev Container CLI

2022年5月18日 Brigit Murtaugh, @BrigitMurtaugh

TL;DR

Dev Container CLI でどこでも一貫した環境を

Microsoft と GitHub の開発コンテナーチームは、新しい Development Containers Specification の一部として、オープンソースのコマンドラインインターフェース (CLI) をリリースできることを嬉しく思っています。 この issue 、または devcontainers/cli リポジトリへの新しい issue や pull request でフィードバックをお寄せください。

一貫性 = 喜び

一貫性があり、予測可能な環境は、生産的で楽しいソフトウェア開発体験の鍵です。

コンテナーは、これまでアプリがデプロイされる際に標準化するために使用されてきましたが、継続的インテグレーション (CI)、テスト自動化、およびフル機能のコーディング環境を含む追加のシナリオをサポートする大きな機会があります。開発コンテナーは、このフル機能のコーディング環境を提供し、プロジェクトが複雑で分散されているか、またはいくつかの要件しかないかにかかわらず、必要なツールとソフトウェアを確実に備えているようにします。

Diagram comparing dev versus production containers

開発コンテナーは、2019年の Dev Containers 拡張機能の発表以来、Visual Studio Code でサポートされており、最近では GitHub Codespaces でもサポートされています。このサポートは、コンテナー化された環境を構成するための構造化 JSON with Comments (jsonc) メタデータ形式である devcontainer.json によって裏付けられています。

本番環境のワークロードのコンテナー化が一般的になるにつれて、開発コンテナーは VS Code を超えるシナリオで広く役立つようになりました。あらゆるツールの誰もが一貫した開発環境を構成できるようにする Development Containers Specification の作業が開始されたことを発表できることを嬉しく思います。さらに、本日、試すことができるこの仕様の主要なコンポーネントである dev container CLI を共有できることを嬉しく思います。

Dev Container CLI とは何ですか?

dev container CLI は、dev container specification のリファレンス実装です。

VS Code や Codespaces などのツールがユーザーのプロジェクトで devcontainer.json ファイルを検出すると、CLI を使用して開発コンテナーを構成します。個々のユーザーや他のツールが devcontainer.json メタデータを読み取り、それから開発コンテナーを作成できるように、この CLI をリファレンス実装として公開しました。

この CLI は、Dev Containers や Codespaces に今日統合されている方法と同様に、直接使用することも、製品エクスペリエンスに統合することもできます。現在、シンプルなシングルコンテナーオプションと、マルチコンテナーシナリオ用の Docker Compose との統合の両方をサポートしています。

CLI は、新しい devcontainers/cli リポジトリでレビュー可能であり、仕様リポジトリの この issue でその開発の詳細を読むことができます。

どのように試せますか?

dev container CLI を試して、感想をお聞かせください。 npm パッケージをインストールするか、CLI リポジトリをソースからビルドするかのいずれかで、いくつかの簡単な手順で素早く試すことができます。

CLI リポジトリの README でソースからビルドする方法の詳細をご確認いただけます。この記事では、npm パッケージの使用に焦点を当てます。

npm パッケージをインストールするには、依存関係の 1 つをビルドするために、Python、Node.js (バージョン 14 以降)、および C/C++ がインストールされている必要があります。 VS Code How to Contribute wiki には、推奨されるツールセットの詳細が記載されています。

npm install

npm install -g @devcontainers/cli

CLI を実行してヘルプテキストが表示されることを確認します

devcontainer <command>

Commands:
  devcontainer up                   Create and run dev container
  devcontainer build [path]         Build a dev container image
  devcontainer run-user-commands    Run user commands
  devcontainer read-configuration   Read configuration
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

Options:
  --help     Show help                                                 [boolean]
  --version  Show version number                                       [boolean]

CLI を試してみる

CLI を入手したら、この Rust サンプルのようなサンプルプロジェクトで試すことができます。

Rust サンプルをマシンにクローンし、CLI の up コマンドで開発コンテナーを起動します。

git clone https://github.com/microsoft/vscode-remote-try-rust
devcontainer up --workspace-folder <path-to-vscode-remote-try-rust>

これにより、コンテナーイメージがコンテナーレジストリからダウンロードされ、コンテナーが起動します。 Rust コンテナーが実行されているはずです。

[88 ms] dev-containers-cli 0.1.0.
[165 ms] Start: Run: docker build -f /home/node/vscode-remote-try-rust/.devcontainer/Dockerfile -t vsc-vscode-remote-try-rust-89420ad7399ba74f55921e49cc3ecfd2 --build-arg VARIANT=bullseye /home/node/vscode-remote-try-rust/.devcontainer
[+] Building 0.5s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 38B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for mcr.microsoft.com/vscode/devcontainers/r  0.4s
 => CACHED [1/1] FROM mcr.microsoft.com/vscode/devcontainers/rust:1-bulls  0.0s
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:39873ccb81e6fb613975e11e37438eee1d49c963a436d  0.0s
 => => naming to docker.io/library/vsc-vscode-remote-try-rust-89420ad7399  0.0s
[1640 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/home/node/vscode-remote-try-rust,target=/workspaces/vscode-remote-try-rust -l devcontainer.local_folder=/home/node/vscode-remote-try-rust --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --entrypoint /bin/sh vsc-vscode-remote-try-rust-89420ad7399ba74f55921e49cc3ecfd2-uid -c echo Container started
Container started
{"outcome":"success","containerId":"f0a055ff056c1c1bb99cc09930efbf3a0437c54d9b4644695aa23c1d57b4bd11","remoteUser":"vscode","remoteWorkspaceFolder":"/workspaces/vscode-remote-try-rust"}

次に、この開発コンテナーでコマンドを実行できます。

devcontainer exec --workspace-folder <path-to-vscode-remote-try-rust> cargo run

これにより、Rust サンプルがコンパイルおよび実行され、出力されます。

[33 ms] dev-containers-cli 0.1.0.
   Compiling hello_remote_world v0.1.0 (/workspaces/vscode-remote-try-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 1.06s
     Running `target/debug/hello_remote_world`
Hello, VS Code Dev Containers!
{"outcome":"success"}

おめでとうございます。dev container CLI を実行し、実際に動作するのを確認しました!

これらの手順は、CLI リポジトリの README にも記載されています。

どのように参加できますか?

皆様のフィードバックは、仕様を形成および拡張する上で非常に役立ちます。これまでの CLI に関するフィードバックをお待ちしております。 CLI をチェックして、感想をお聞かせください。コメントや質問を残せるように issue を特別に開設しました。また、他のオープンソースプロジェクトと同様に、リポジトリで新しい issue や PR を開くこともできます。

CLI と全体的な仕様は、活発に開発が進められています ( 仕様はまだ進行中であり、まだ公開されていません)。今後のエキサイティングな新しい進展にご期待ください。これまでの CLI に関するフィードバックをお待ちしております。また、仕様がいつ利用可能になるかなど、試せる内容と時期に関する最新情報を提供し続けます。

コンテナーベースの開発の将来に非常に興奮しており、皆様からのフィードバックをお待ちしております。ツールとユーザー全体でユビキタスで生産的なフォーマットを提供できることを楽しみにしています。

ハッピーコーディング!

Brigit Murtaugh, @BrigitMurtaugh