VS Codeのエージェントモードを拡張するには、を試してください!

Dev Container CLI

このトピックでは、開発コンテナーのビルドと管理を可能にする開発コンテナー コマンド ライン インターフェイス (dev container CLI) について説明します。これは、Development Containers Specification の補助ツールです。

開発コンテナー

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

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

Diagram comparing dev versus production containers

開発コンテナーは、Visual Studio Code では Dev Containers 拡張機能を通じて、GitHub Codespaces では直接サポートされています。このサポートは、コンテナー化された環境を構成するための構造化された JSON with Comments (jsonc) メタデータ形式である devcontainer.json に支えられています。

本番ワークロードのコンテナー化が一般的になるにつれて、開発コンテナーは VS Code を超える幅広いシナリオで有用になっています。あらゆる環境で開発コンテナーを推進するため、任意のツールで一貫した開発環境を構成できるDevelopment Containers Specification の作業が開始されました。オープンソースの dev container CLI は、この仕様のリファレンス実装として機能します。

dev container CLI

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

この CLI は、Dev Containers や Codespaces と統合されているのと同様に、直接使用することも、製品体験に統合することもできます。現在、シンプルな単一コンテナー オプションと、複数コンテナーのシナリオ向けに Docker Compose との統合の両方をサポートしています。

この CLI は、devcontainers/cli リポジトリで入手できます。

インストール

Dev Containers 拡張機能を通じて、CLI をすぐに試すことができます。コマンド パレット (F1) から Dev Containers: Install devcontainer CLI コマンドを選択します。

別のインストール方法

CLI を他の場所で使用するための追加オプションがあります

  • その npm パッケージをインストールする
  • GitHub Action または Azure DevOps Task を使用する
  • ソースから CLI リポジトリをビルドする

このページでは、npm パッケージの使用に焦点を当てます。

npm install

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

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 features             Features commands
  devcontainer templates            Templates commands
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

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

注: VS Code を介して CLI をインストールした場合、開発コンテナーを開くための open コマンドがリストに表示されます。

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"}

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

自動化

CI/CD ビルドまたはテスト自動化で dev container CLI を使用したい場合は、devcontainers/ci リポジトリで GitHub Actions および Azure DevOps Tasks の例を見つけることができます。

事前ビルド

devcontainer build コマンドを使用すると、Dev Containers 拡張機能や GitHub Codespaces と同じ手順で開発コンテナー イメージをすばやくビルドできます。これは、GitHub Actions のような CI または DevOps 製品を使用して開発コンテナー イメージを事前ビルドしたい場合に特に便利です。

build は、.devcontainer フォルダーまたは .devcontainer.json ファイルを含むフォルダーへのパスを受け入れます。たとえば、devcontainer build --workspace-folder <my_repo>my_repo のコンテナー イメージをビルドします。

イメージのビルドと公開の例

たとえば、複数のプロジェクトやリポジトリで再利用する多数のイメージを事前にビルドしたい場合があります。その場合は、次の手順に従ってください

  1. ソースコードリポジトリを作成します。

  2. 事前ビルドしたい各イメージのdev container構成を作成し、( dev container Features を含め) 自由にカスタマイズします。たとえば、この devcontainer.json ファイルを考えてみましょう。

    {
      "build": {
        "dockerfile": "Dockerfile"
      },
      "features": {
        "ghcr.io/devcontainers/features/docker-in-docker:1": {
          "version": "latest"
        }
      }
    }
    
  3. devcontainer build コマンドを使用してイメージをビルドし、イメージ レジストリにプッシュします。イメージの命名や認証などの追加の手順については、ご利用のイメージ レジストリ (たとえば Azure Container RegistryGitHub Container Registry、または Docker Hub) のドキュメントを参照してください。

    devcontainer build --workspace-folder <my_repo> --push true --image-name <my_image_name>:<optional_image_version>
    

Docker を使用してビルドされたイメージの問題を回避する

Dockerfile や Docker Compose ファイルは VS Code や devcontainer CLI なしでも使用できるため、ユーザーにイメージを直接ビルドしようとしないよう伝えることをお勧めします。詳細については、開発コンテナーの高度なドキュメントで確認できます。

テンプレートと機能

dev container CLI を使用して、開発コンテナーのテンプレート機能を操作できます。テンプレートを作成して使用する際、他のユーザー向けに公開したい場合があります。詳細については、開発コンテナーの仕様で確認できます。

フィードバック

dev container CLI とその仕様は活発に開発中であり、皆様からのフィードバックを歓迎します。このイシュー、または devcontainers/cli リポジトリの新しいイシューやプルリクエストを通じて提供してください。

次のステップ