Dev Container CLI
2022年5月18日 Brigit Murtaugh、@BrigitMurtaugh
TL;DR
Dev Container CLI を使ってどこでも一貫した環境を
Microsoft および GitHub の開発コンテナーチームは、新しいDevelopment Containers Specificationの一部として、オープンソースのコマンドラインインターフェース (CLI) をリリースできることを嬉しく思います。このイシュー、またはdevcontainers/cliリポジトリでの新しいイシューやプルリクエストを通じて、皆様からのフィードバックをお待ちしております。
一貫性 = 喜び
一貫性があり予測可能な環境は、生産的で楽しいソフトウェア開発体験にとって重要です。
コンテナーはこれまで、アプリケーションをデプロイする際に標準化するために使用されてきましたが、継続的インテグレーション (CI)、テスト自動化、フル機能のコーディング環境など、追加のシナリオをサポートする大きな機会があります。開発コンテナーは、このようなフル機能のコーディング環境を提供し、プロジェクトが必要とするツールとソフトウェアが揃っていることを保証します。これは、複雑で分散されたプロジェクトであろうと、いくつかの要件しか持たないプロジェクトであろうと関係ありません。
Dev Container は、2019年の発表以来、Visual Studio Code でDev Containers 拡張機能としてサポートされており、最近ではGitHub Codespacesでもサポートされています。このサポートは、コンテナー化された環境を構成するための、コメント付き構造化 JSON (jsonc) メタデータ形式である devcontainer.json によって支えられています。
本番ワークロードのコンテナー化が一般的になるにつれて、Dev Container は VS Code 以外のシナリオでも広く利用されるようになりました。そして、あらゆるツールであらゆるユーザーが一貫した開発環境を構成できるようになるDevelopment Containers Specificationの開発が開始されたことをお知らせできることを嬉しく思います。さらに、この仕様の主要なコンポーネントである dev container CLI を本日よりお試しいただけることを嬉しく思います。
Dev Container CLI とは何ですか?
dev container CLI は、Dev Container 仕様のリファレンス実装です。
VS Code や Codespaces のようなツールは、ユーザーのプロジェクトで devcontainer.json
ファイルを検出すると、CLI を使用して Dev Container を構成します。私たちはこの CLI をリファレンス実装として公開し、個々のユーザーや他のツールが devcontainer.json
メタデータを読み込み、それから Dev Container を作成できるようにしました。
この CLI は、現在の Dev Container と Codespaces との統合と同様に、直接使用することも、製品体験に統合することもできます。現在は、シンプルな単一コンテナーオプションと、複数コンテナーのシナリオに対応するDocker Composeとの統合をサポートしています。
CLI は新しいdevcontainers/cliリポジトリでレビュー用に公開されており、その開発についてはspec リポジトリのこのイシューで詳細を読むことができます。
試すにはどうすればよいですか?
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
コマンドで Dev Container を起動します
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"}
その後、この Dev Container 内でコマンドを実行できます
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 をご確認いただき、ご意見をお聞かせください。コメントや質問を残すためのイシューを特別に開設しました。他のオープンソースプロジェクトと同様に、リポジトリで新しいイシューや PR を開くこともできます。
CLI および全体の仕様は活発に開発中であり (仕様はまだ進行中であり、まだ公開されていません)、今後のエキサイティングな新しい進展にご期待ください。これまでのCLIに関するフィードバックをお待ちしており、仕様がいつ利用可能になるかなど、お試しいただける内容や時期に関する最新情報を提供し続けます。
コンテナーベース開発の将来に非常に期待しており、皆様からのフィードバックをお待ちしております。ツールとユーザー全体で普遍的で生産的な形式を提供できることを楽しみにしております。
ハッピーコーディング!
Brigit Murtaugh、@BrigitMurtaugh