dev container CLI
2022年5月18日 by Brigit Murtaugh, @BrigitMurtaugh
要約
dev container CLIで、どこでも一貫した環境を
MicrosoftとGitHubの開発コンテナーチームは、新しい開発コンテナー仕様の一環として、オープンソースのコマンドラインインターフェイス(CLI)をリリースできることを嬉しく思います。こちらのissueでフィードバックをお待ちしております。また、devcontainers/cliリポジトリへの新しいissueやプルリクエストも歓迎します。
一貫性 = 喜び
一貫性のある予測可能な環境は、生産的で楽しいソフトウェア開発体験の鍵です。
コンテナーはこれまで、アプリケーションをデプロイする際に標準化するために使用されてきましたが、継続的インテグレーション(CI)、テスト自動化、フル機能のコーディング環境など、追加のシナリオをサポートする大きな可能性があります。開発コンテナーは、このフル機能のコーディング環境を提供し、プロジェクトが複雑で分散しているか、いくつかの要件しかないかにかかわらず、必要なツールとソフトウェアを確実に利用できるようにします。
Dev containerは、2019年のDev Containers拡張機能の発表以来Visual Studio Codeでサポートされており、最近ではGitHub Codespacesでもサポートされています。このサポートは、コンテナー化された環境を構成するための構造化されたJSON with Comments (jsonc) メタデータ形式であるdevcontainer.jsonによって支えられています。
本番ワークロードのコンテナー化が一般的になるにつれて、dev containerはVS Code以外のシナリオでも広く役立つようになりました。私たちは、開発コンテナー仕様の策定が開始されたことを発表できることを嬉しく思います。これにより、誰もがどのツールでも一貫した開発環境を構成できるようになります。さらに本日、この仕様の主要なコンポーネントであり、今すぐお試しいただける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 ContainersやCodespacesに統合されているように、製品体験に統合することもできます。現在は、シンプルな単一コンテナーオプションと、複数コンテナーシナリオのためにDocker Composeとの統合の両方をサポートしています。
CLIは、新しいdevcontainers/cliリポジトリでレビュー可能であり、その開発に関する詳細はspecリポジトリのこのissueで読むことができます。
どうすれば試せますか?
ぜひdev container CLIをお試しいただき、ご意見をお聞かせください。npmパッケージをインストールするか、ソースからCLIリポジトリをビルドすることで、いくつかの簡単な手順ですぐに試すことができます。
ソースからのビルドについては、CLIリポジトリのREADMEで詳しく知ることができます。この記事では、npmパッケージの使用に焦点を当てます。
npmパッケージをインストールするには、依存関係の1つをビルドするために、Python、Node.js(バージョン14以上)、およびC/C++がインストールされている必要があります。VS Codeの貢献方法の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をチェックして、ご意見をお聞かせください。皆さんがコメントや質問を残せるように、特にissueをオープンしました。また、他のオープンソースプロジェクトと同様に、リポジトリに新しいissueやPRをオープンすることもできます。
CLIと仕様全体は活発に開発中です(仕様はまだ進行中であり、まだ公開されていません)。エキサイティングな新しい進展にご期待ください。これまでのCLIに関するフィードバックを歓迎します。また、仕様がいつ利用可能になるかなど、お試しいただける内容や時期について、引き続き最新情報を提供していきます。
私たちは、コンテナーベース開発の未来に非常に興奮しており、皆様のフィードバックを楽しみにしています。ツールやユーザーを問わず、どこでも使える生産的なフォーマットを提供できることを楽しみにしています。
ハッピーコーディング!
Brigit Murtaugh、@BrigitMurtaugh