に参加して、VS Code の AI 支援開発について学びましょう。

開発コンテナ CLI

2022年5月18日、Brigit Murtaugh (@BrigitMurtaugh)

概要

devコンテナーCLIでどこでも一貫した環境を

MicrosoftとGitHubの開発コンテナーチームは、新しいDevelopment Containers Specificationの一部として、オープンソースのコマンドラインインターフェイス(CLI)をリリースできることを嬉しく思います。皆様からのフィードバックをこのIssue、またはdevcontainers/cliリポジトリの新しいIssueやプルリクエストでお待ちしております。

一貫性=喜び

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

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

Diagram comparing dev versus production containers

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

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

dev container CLIとは?

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

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

この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コマンドで開発コンテナを開始します

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

© . This site is unofficial and not affiliated with Microsoft.