VS Code Dev Containers(リファレンス日本語ver)

# VS Code Dev Containers 完全ガイド

## 目次

1. [概要](#概要)
2. [はじめに](#はじめに)
3. [システム要件](#システム要件)
4. [インストール](#インストール)
5. [クイックスタートの選択](#クイックスタートの選択)
6. [クイックスタート1: 開発コンテナを試す](#クイックスタート1-開発コンテナを試す)
7. [クイックスタート2: 既存フォルダをコンテナで開く](#クイックスタート2-既存フォルダをコンテナで開く)
8. [クイックスタート3: GitリポジトリやPRを独立したコンテナボリュームで開く](#クイックスタート3-gitリポジトリやprを独立したコンテナボリュームで開く)
9. [ワークスペースの信頼](#ワークスペースの信頼)
10. [devcontainer.jsonファイルの作成](#devcontainerjsonファイルの作成)
11. [Dev Container Features](#dev-container-features)
12. [開発コンテナイメージのプリビルド](#開発コンテナイメージのプリビルド)
13. [ボリュームの検査](#ボリュームの検査)
14. [拡張機能の管理](#拡張機能の管理)
15. [ポートの転送または公開](#ポートの転送または公開)
16. [ターミナルの起動](#ターミナルの起動)
17. [コンテナでのデバッグ](#コンテナでのデバッグ)
18. [コンテナ固有の設定](#コンテナ固有の設定)
19. [コンテナの管理](#コンテナの管理)
20. [Dotfileリポジトリでのカスタマイズ](#dotfileリポジトリでのカスタマイズ)
21. [既知の制限事項](#既知の制限事項)
22. [高度なコンテナ設定](#高度なコンテナ設定)
23. [devcontainer.jsonリファレンス](#devcontainerjsonリファレンス)
24. [質問やフィードバック](#質問やフィードバック)
25. [次のステップ](#次のステップ)

## 概要

Visual Studio Code Dev Containers拡張機能を使用すると、コンテナを本格的な開発環境として使用できます。フォルダをコンテナ内で（またはコンテナにマウントして）開き、Visual Studio Codeの全機能セットを活用できます。プロジェクト内の[devcontainer.jsonファイル](#devcontainerjsonファイルの作成)が、明確に定義されたツールとランタイムスタックを持つ開発コンテナにVS Codeがアクセス（または作成）する方法を指示します。このコンテナは、アプリケーションの実行や、コードベースでの作業に必要なツール、ライブラリ、ランタイムを分離するために使用できます。

ワークスペースファイルはローカルファイルシステムからマウントされるか、コンテナにコピーまたはクローンされます。拡張機能はコンテナ内でインストールおよび実行され、ツール、プラットフォーム、ファイルシステムへのフルアクセスを持ちます。これにより、異なるコンテナに接続するだけで開発環境全体をシームレスに切り替えることができます。

これにより、VS Codeは、ツール（またはコード）の場所に関係なく、完全なIntelliSense（補完）、コードナビゲーション、デバッグを含むローカル品質の開発体験を提供できます。

Dev Containers拡張機能は、2つの主要な操作モデルをサポートしています：

- **フルタイム開発環境**：コンテナをフルタイムの開発環境として使用
- **実行中のコンテナへのアタッチ**：[実行中のコンテナにアタッチ](https://code.visualstudio.com/docs/devcontainers/attach-container)して検査

**注意**: Dev Containers拡張機能は、オープンなDev Containers仕様をサポートしており、誰でもあらゆるツールで一貫した開発環境を設定できます。詳細は[dev container FAQ](https://containers.dev/guide/faq)および仕様サイト[containers.dev](https://containers.dev/)をご覧ください。

## はじめに

**注意**: dev containersを素早く起動して実行する方法については、入門編の[Dev Containers tutorial](https://code.visualstudio.com/docs/devcontainers/tutorial)をご覧ください。

## システム要件

### ローカル/リモートホスト

Dev Containers拡張機能でDockerを使用する方法は以下のとおりです：

- **ローカルにインストールされたDocker**
- **リモート環境にインストールされたDocker**
- **その他のDocker準拠CLI**（ローカルまたはリモートにインストール）

他のCLIも動作する可能性がありますが、正式にはサポートされていません。なお、[Kubernetesクラスターへのアタッチ](https://code.visualstudio.com/docs/devcontainers/attach-container#_attach-to-a-container-in-a-kubernetes-cluster)には、適切に設定された[kubectl CLI](https://kubernetes.io/docs/reference/kubectl/overview/)のみが必要です。

[代替Dockerオプションドキュメント](https://code.visualstudio.com/remote/advancedcontainers/docker-options)で詳細を確認できます。

ローカルまたはリモートホストでDockerを設定する具体的な方法：

#### Windows
- [Docker Desktop](https://www.docker.com/products/docker-desktop) 2.0+ on Windows 10 Pro/Enterprise
- Windows 10 Home (2004+)には Docker Desktop 2.3+ と[WSL 2バックエンド](https://aka.ms/vscode-remote/containers/docker-wsl2)が必要
- Docker ToolboxおよびWindowsコンテナイメージはサポートされていません

#### macOS
- [Docker Desktop](https://www.docker.com/products/docker-desktop) 2.0+

#### Linux
- [Docker CE/EE](https://docs.docker.com/install/#supported-platforms) 18.06+ および [Docker Compose](https://docs.docker.com/compose/install) 1.21+
- Ubuntu snapパッケージはサポートされていません

#### リモートホスト
- 1 GB RAMが必要ですが、少なくとも2 GB RAMと2コアCPUを推奨

### コンテナ

サポートされるコンテナ：
- **x86_64 / ARMv7l (AArch32) / ARMv8l (AArch64)** Debian 9+、Ubuntu 16.04+、CentOS / RHEL 7+
- **x86_64** Alpine Linux 3.9+

その他のglibcベースのLinuxコンテナも、[必要なLinux前提条件](https://code.visualstudio.com/docs/remote/linux)があれば動作する可能性があります。

## インストール

開始するには、以下の手順に従ってください：

### 1. Dockerのインストールと設定

お使いのオペレーティングシステム用に[Docker](https://www.docker.com/get-started)をインストールし、以下のパスまたは[代替Dockerオプション](https://code.visualstudio.com/remote/advancedcontainers/docker-options)（リモートホスト上のDockerやDocker準拠CLIなど）を使用してください。

#### Windows / macOS
1. [Docker Desktop for Windows/Mac](https://www.docker.com/products/docker-desktop)をインストール
2. Windows上でWSL 2を使用している場合、[WSL 2バックエンド](https://aka.ms/vscode-remote/containers/docker-wsl2)が有効になっていることを確認：
   - Dockerタスクバーアイテムを右クリックして「Settings」を選択
   - 「Use the WSL 2 based engine」をチェック
   - 「Resources > WSL Integration」でディストリビューションが有効になっていることを確認
3. WSL 2バックエンドを使用していない場合：
   - Dockerタスクバーアイテムを右クリックして「Settings」を選択
   - 「Resources > File Sharing」でソースコードが保存されている場所を更新
   - トラブルシューティングについては[ヒントとコツ](https://code.visualstudio.com/docs/devcontainers/tips-and-tricks)を参照

#### Linux
1. お使いのディストリビューション用の[Docker CE/EE公式インストール手順](https://docs.docker.com/install/#supported-platforms)に従う
2. Docker Composeを使用する場合は、[Docker Composeの手順](https://docs.docker.com/compose/install/)も実行
3. ターミナルで以下を実行して、ユーザーをdockerグループに追加：
   ```bash
   sudo usermod -aG docker $USER
   ```
4. 変更を有効にするため、一度サインアウトして再度サインイン

### 2. Visual Studio Codeのインストール

[Visual Studio Code](https://code.visualstudio.com/)または[Visual Studio Code Insiders](https://code.visualstudio.com/insiders/)をインストールします。

### 3. Dev Containers拡張機能のインストール

[Dev Containers拡張機能](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)をインストールします。VS Codeで他のリモート拡張機能と一緒に作業する予定がある場合は、[Remote Development拡張機能パック](https://aka.ms/vscode-remote/download/extension)のインストールを選択できます。

### Gitで作業している場合の設定

以下の2つのヒントを検討してください：

- **Windows環境とコンテナ内の両方で同じリポジトリを使用する場合**：一貫した行末を設定してください。詳細は[ヒントとコツ](https://code.visualstudio.com/docs/remote/troubleshooting#_resolving-git-line-ending-issues-in-wsl-resulting-in-many-modified-files)を参照
- **Git認証情報マネージャーを使用してクローンする場合**：コンテナは既に認証情報にアクセスできるはずです。SSHキーを使用する場合は、共有を選択することもできます。詳細は[コンテナとのGit認証情報の共有](https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials)を参照

## クイックスタートの選択

このドキュメントには3つのクイックスタートが含まれています。ワークフローと興味に最も適したものから始めることをお勧めします：

1. **クイックサンプルリポジトリで開発コンテナを試したい場合**：[クイックスタート1: 開発コンテナを試す](#クイックスタート1-開発コンテナを試す)をチェック
2. **既存のローカルクローンプロジェクトに開発コンテナを追加したい場合**：[クイックスタート2: 既存フォルダをコンテナで開く](#クイックスタート2-既存フォルダをコンテナで開く)をチェック
3. **リポジトリの独立したコピーで作業したい場合**（PRのレビューやローカル作業に影響を与えずにブランチを調査するなど）：[クイックスタート3: GitリポジトリやPRを独立したコンテナボリュームで開く](#クイックスタート3-gitリポジトリやprを独立したコンテナボリュームで開く)をチェック

## クイックスタート1: 開発コンテナを試す

最も簡単な開始方法は、サンプル開発コンテナの1つを試すことです。[コンテナチュートリアル](https://code.visualstudio.com/docs/devcontainers/tutorial)では、DockerとDev Containers拡張機能の設定を説明し、サンプルを選択できます。

**注意**: VS CodeとDockerが既にインストールされている場合は、[open in dev container](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode-remote-try-node)を使用できます。詳細とリポジトリへの追加方法については、[開発コンテナガイドの作成](https://code.visualstudio.com/docs/devcontainers/create-dev-container)をご覧ください。

## クイックスタート2: 既存フォルダをコンテナで開く

このクイックスタートでは、ファイルシステム上の既存のソースコードを使用して、フルタイム開発環境として使用する既存プロジェクト用の開発コンテナを設定する方法について説明します。以下の手順に従ってください：

### 手順1: フォルダを選択してコンテナ設定を開始

1. VS Codeを起動
2. コマンドパレット（F1）または「quick actions」ステータスバーアイテムから「**Dev Containers: Open Folder in Container...**」コマンドを実行
3. コンテナを設定するプロジェクトフォルダを選択

**ヒント**: フォルダを開く前にコンテナの内容や設定を編集したい場合は、代わりに「**Dev Containers: Add Dev Container Configuration Files...**」を実行できます。

### 手順2: 開発コンテナの開始点を選択

開発コンテナの開始点を選択します。以下のオプションがあります：

- **フィルタリング可能なリストからベースDev Containerテンプレートを選択**
- **既存の[Dockerfile](https://docs.docker.com/engine/reference/builder/)または[Docker Composeファイル](https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples)を使用**（選択したフォルダに存在する場合）

**注意**: Alpine Linuxコンテナを使用する場合、拡張機能内のネイティブコードの`glibc`依存関係により、一部の拡張機能が動作しない可能性があります。

リストは、開いたフォルダの内容に基づいて自動的にソートされます。

追加のFeaturesでdev containerをカスタマイズできる場合があります。詳細は[下記](#dev-container-features)をご覧ください。

表示されるdev container Templatesは、[Dev Container仕様](https://containers.dev/)の一部である[ファーストパーティおよびコミュニティインデックス](https://containers.dev/templates)から取得されます。仕様の一部として[devcontainers/templatesリポジトリ](https://github.com/devcontainers/templates)でTemplatesのセットをホストしています。各Templateの内容を確認するには、そのリポジトリの`src`フォルダを参照してください。

[dev container CLI](https://containers.dev/implementors/templates-distribution/)を使用して、独自のdev container Templatesを公開および配布することもできます。

### 手順3: 設定ファイルの追加とビルド

1. コンテナの開始点を選択後、VS Codeは開発コンテナ設定ファイル（`.devcontainer/devcontainer.json`）をプロジェクトに追加
2. VS Codeウィンドウがリロードされ、開発コンテナのビルドが開始
3. 進行状況通知でステータス更新を提供
4. 開発コンテナを初回に開く時のみビルドが必要。初回の成功後は、フォルダを開くのがはるかに高速

### 手順4: コンテナへの接続

ビルド完了後、VS Codeは自動的にコンテナに接続します。

これで、プロジェクトをローカルで開いた時と同様に、VS Codeでプロジェクトとやり取りできます。今後、プロジェクトフォルダを開くと、VS Codeは自動的に開発コンテナ設定を検出して再利用します。

**ヒント**: リモートDockerホストを使用したい場合は、[リモートSSHホスト上のフォルダをコンテナで開く](https://code.visualstudio.com/docs/devcontainers/containers#_open-a-folder-on-a-remote-ssh-host-in-a-container)のセクションを参照してください。

このアプローチでローカルファイルシステムをコンテナに[バインドマウント](https://docs.docker.com/storage/bind-mounts/)することは便利ですが、WindowsとmacOSでパフォーマンスオーバーヘッドがあります。ディスクパフォーマンスを向上させる[いくつかの技術](https://code.visualstudio.com/remote/advancedcontainers/improve-performance)を適用するか、代わりに[独立したコンテナボリュームを使用してリポジトリをコンテナで開く](#クイックスタート3-gitリポジトリやprを独立したコンテナボリュームで開く)ことができます。

### WindowsでWSL 2フォルダをコンテナで開く

[Windows Subsystem for Linux v2 (WSL 2)](https://learn.microsoft.com/windows/wsl/wsl2-about)を使用し、[Docker DesktopのWSL 2バックエンド](https://aka.ms/vscode-remote/containers/docker-wsl2)を有効にしている場合、WSL内に保存されたソースコードで作業できます！

WSL 2エンジンが有効になったら、以下のいずれかを選択できます：

- [WSL](https://aka.ms/vscode-remote/download/wsl)拡張機能を使用して既に開いたフォルダから「**Dev Containers: Reopen in Container**」コマンドを使用
- コマンドパレット（F1）から「**Dev Containers: Open Folder in Container...**」を選択し、ローカル`\\wsl$`共有（Windowsサイドから）を使用してWSLフォルダを選択

残りのクイックスタートはそのまま適用されます！詳細は[WSL拡張機能のドキュメント](https://code.visualstudio.com/docs/remote/wsl)をご覧ください。

### リモートSSHホスト上のフォルダをコンテナで開く

LinuxまたはmacOS SSHホストを使用している場合、[Remote - SSH](https://code.visualstudio.com/docs/remote/ssh)とDev Containers拡張機能を一緒に使用できます。Dockerクライアントをローカルにインストールする必要さえありません。

手順：

1. Remote - SSH拡張機能の[インストール](https://code.visualstudio.com/docs/remote/ssh#_installation)およびSSH[ホスト設定](https://code.visualstudio.com/docs/remote/ssh#_ssh-host-setup)手順に従う
2. オプション：パスワードを複数回入力する必要がないよう、サーバーへのSSH[キーベース認証](https://code.visualstudio.com/docs/remote/troubleshooting#_configuring-key-based-authentication)を設定
3. SSHホストに[Dockerをインストール](#インストール)（ローカルにDockerをインストールする必要はありません）
4. Remote - SSH拡張機能の[クイックスタート](https://code.visualstudio.com/docs/remote/ssh#_connect-to-a-remote-host)に従ってホストに接続し、そこでフォルダを開く
5. コマンドパレット（F1、⇧⌘P（Windows、Linux Ctrl+Shift+P））から「**Dev Containers: Reopen in Container**」コマンドを使用

残りのDev Containersクイックスタートはそのまま適用されます。詳細は[Remote - SSH拡張機能のドキュメント](https://code.visualstudio.com/docs/remote/ssh)をご覧ください。このモデルがニーズに合わない場合の他のオプションについては、[リモートDockerホストでの開発](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host)記事もご覧ください。

### リモートTunnelホスト上のフォルダをコンテナで開く

[Remote - Tunnels](https://code.visualstudio.com/docs/remote/tunnels)とDev Containers拡張機能を一緒に使用して、リモートホスト上のフォルダをコンテナ内で開くことができます。Dockerクライアントをローカルにインストールする必要さえありません。これは上記のSSHホストシナリオと似ていますが、Remote - SSHの代わりにRemote - Tunnelsを使用します。

手順：

1. Remote - Tunnels拡張機能の[はじめに](https://code.visualstudio.com/docs/remote/tunnels#_getting-started)手順に従う
2. トンネルホストに[Dockerをインストール](#インストール)（ローカルにDockerをインストールする必要はありません）
3. Remote - Tunnels拡張機能の[手順](https://code.visualstudio.com/docs/remote/tunnels#_remote-tunnels-extension)に従ってトンネルホストに接続し、そこでフォルダを開く
4. コマンドパレット（F1、⇧⌘P（Windows、Linux Ctrl+Shift+P））から「**Dev Containers: Reopen in Container**」コマンドを使用

残りのDev Containersクイックスタートはそのまま適用されます。詳細は[Remote - Tunnels拡張機能のドキュメント](https://code.visualstudio.com/docs/remote/tunnels)をご覧ください。このモデルがニーズに合わない場合の他のオプションについては、[リモートDockerホストでの開発](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host)記事もご覧ください。

### 既存のワークスペースをコンテナで開く

ワークスペースが`.code-workspace`ファイルのあるフォルダのサブフォルダへの相対パスのみを参照している場合（またはフォルダ自体）、[VS Codeマルチルートワークスペース](https://code.visualstudio.com/docs/editor/multi-root-workspaces)を単一のコンテナで開く同様のプロセスに従うこともできます。

以下のいずれかを実行できます：

- 「**Dev Containers: Open Workspace in Container...**」コマンドを使用
- コンテナ内に`.code-workspace`ファイルを含むフォルダを開いた後、「**File > Open Workspace...**」を使用

接続後、`.devcontainer`フォルダがまだ表示されていない場合は、その内容を簡単に編集できるようワークスペースに追加することをお勧めします。

また、同じVS Codeウィンドウで同じワークスペースに複数のコンテナを使用することはできませんが、別々のウィンドウから[複数のDocker Compose管理コンテナを同時に](https://code.visualstudio.com/remote/advancedcontainers/connect-multiple-containers)使用できます。

## クイックスタート3: GitリポジトリやPRを独立したコンテナボリュームで開く

[ローカルクローンリポジトリをコンテナで開く](#クイックスタート2-既存フォルダをコンテナで開く)ことはできますが、PRレビューや作業に影響を与えずに他のブランチを調査するために、リポジトリの独立したコピーで作業したい場合もあります。

Repository Containersは、ローカルファイルシステムへのバインドの代わりに、独立したローカルDockerボリュームを使用します。ファイルツリーを汚染しないことに加えて、ローカルボリュームはWindowsとmacOSでパフォーマンスが向上するという利点があります。（これらのタイプのボリュームを他のシナリオで使用する方法については、高度な設定の[ディスクパフォーマンスの向上](https://code.visualstudio.com/remote/advancedcontainers/improve-performance)記事を参照してください。）

例えば、「try」リポジトリの1つをRepository Containerで開く手順：

### 手順1: リポジトリクローンコマンドの実行

1. VS Codeを起動
2. コマンドパレット（F1）から「**Dev Containers: Clone Repository in Container Volume...**」を実行

### 手順2: リポジトリの指定

表示される入力ボックスに以下のいずれかを入力してEnterを押します：

- `microsoft/vscode-remote-try-node`（または他の「try」リポジトリ）
- Git URI
- GitHubブランチURL
- GitHub PR URL

**ヒント**: プライベートリポジトリを選択した場合、認証情報マネージャーの設定やSSHキーをSSHエージェントに追加することをお勧めします。詳細は[コンテナとのGit認証情報の共有](https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials)を参照してください。

### 手順3: 開発環境の選択

リポジトリに`.devcontainer/devcontainer.json`ファイルがない場合、以下から開始点の選択を求められます：

- フィルタリング可能なリストからの開始点
- 既存の[Dockerfile](https://docs.docker.com/engine/reference/builder/)または[Docker Composeファイル](https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples)（存在する場合）

**注意**: Alpine Linuxコンテナを使用する場合、拡張機能内のネイティブコードの`glibc`依存関係により、一部の拡張機能が動作しない可能性があります。

リストは開いたフォルダの内容に基づいて自動的にソートされます。表示されるdev container Templatesは、[Dev Container仕様](https://containers.dev/)の一部である[ファーストパーティおよびコミュニティインデックス](https://containers.dev/templates)から取得されます。

### 手順4: ビルドと接続

1. VS Codeウィンドウ（インスタンス）がリロードされ、ソースコードをクローンし、開発コンテナのビルドを開始
2. 進行状況通知でステータス更新を提供
3. 手順2でGitHub pull request URLを貼り付けた場合、PRが自動的にチェックアウトされ、[GitHub Pull Requests](https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github)拡張機能がコンテナにインストールされます

ビルド完了後、VS Codeは自動的にコンテナに接続します。この独立した環境で、コードをローカルでクローンした場合と同様にリポジトリソースコードで作業できます。

**注意**: Dockerビルドエラーなどでコンテナの起動に失敗した場合、表示されるダイアログで「**Reopen in Recovery Container**」を選択して「リカバリコンテナ」に入ることができます。これにより、Dockerfileや他のコンテンツを編集できます。クローンしたリポジトリのあるdockerボリュームを最小限のコンテナで開き、作成ログを表示します。修正が完了したら、「**Reopen in Container**」を使用して再試行してください。

**ヒント**: リモートDockerホストを使用したい場合は、[リモートSSHホスト上のフォルダをコンテナで開く](https://code.visualstudio.com/docs/devcontainers/containers#_open-a-folder-on-a-remote-ssh-host-in-a-container)のセクションを参照してください。

## ワークスペースの信頼

Visual Studio Codeはセキュリティを重視し、ソースや元の作成者に関係なく、安全にコードを閲覧・編集できるようサポートします。[ワークスペース信頼機能](https://code.visualstudio.com/docs/editing/workspaces/workspace-trust)では、プロジェクトフォルダで自動コード実行を許可するか制限するかを決定できます。

Dev Containers拡張機能はワークスペース信頼を採用しています。ソースコードを開いて操作する方法に応じて、さまざまなタイミングで編集または実行するコードを信頼するかどうかの決定を求められます。

### コンテナでフォルダを再度開く

[既存プロジェクト用の開発コンテナを設定する](#クイックスタート2-既存フォルダをコンテナで開く)には、ローカル（またはWSL）フォルダを信頼する必要があります。ウィンドウがリロードされる前に、ローカル（またはWSL）フォルダを信頼するよう求められます。

このフローには以下の例外があります：

- 最近のエントリをクリックした場合
- 「Open Folder in Container」コマンドを使用すると、信頼がまだ与えられていない場合、ウィンドウのリロード後に信頼を求められます

### 既存のコンテナにアタッチ

[既存のコンテナにアタッチ](https://code.visualstudio.com/docs/devcontainers/attach-container)する場合、アタッチすることがコンテナを信頼することを意味するという確認を求められます。これは一度だけ確認されます。

### ボリュームでリポジトリをクローン

[コンテナボリュームでリポジトリをクローン](#クイックスタート3-gitリポジトリやprを独立したコンテナボリュームで開く)する場合、リポジトリをクローンすることがリポジトリを信頼することを意味するという確認を求められます。これは一度だけ確認されます。

### ボリュームの検査

[ボリュームの検査](#ボリュームの検査)は[制限モード](https://code.visualstudio.com/docs/editing/workspaces/workspace-trust#_restricted-mode)で開始され、コンテナ内のフォルダを信頼できます。

### Dockerデーモンのリモート実行

これは[Dockerデーモンが実行されているマシンを信頼する](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host)ことを意味します。追加の確認プロンプトはありません（上記のローカル/WSLケースのリストのみ）。

## devcontainer.jsonファイルの作成

VS Codeのコンテナ設定は[devcontainer.json](https://containers.dev/implementors/json_reference)ファイルに保存されます。このファイルはデバッグ設定の`launch.json`ファイルに似ていますが、開発コンテナの起動（またはアタッチ）に使用されます。コンテナの実行後にインストールする拡張機能や、環境を準備するためのpost-createコマンドも指定できます。dev container設定は`.devcontainer/devcontainer.json`の下に配置されるか、プロジェクトのルートに`.devcontainer.json`ファイル（ドット接頭辞に注意）として保存されます。

コマンドパレット（F1）から「**Dev Containers: Add Dev Container Configuration Files...**」コマンドを選択すると、必要なファイルが開始点としてプロジェクトに追加され、ニーズに合わせてさらにカスタマイズできます。このコマンドでは、フォルダの内容に基づいてリストから事前定義されたコンテナ設定を選択したり、既存のDockerfileや既存のDocker Composeファイルを再利用したりできます。

devcontainer.jsonを手動で作成し、任意のイメージ、Dockerfile、またはDocker Composeファイルのセットを開始点として使用することもできます。以下は、事前構築された[Development Container images](https://github.com/devcontainers/images/tree/main/src/typescript-node)の1つを使用する簡単な例です：

```json
{
  "image": "mcr.microsoft.com/devcontainers/typescript-node",
  "forwardPorts": [3000],
  "customizations": {
    // VS Code固有のプロパティを設定
    "vscode": {
      // コンテナ作成時にインストールする拡張機能のIDを追加
      "extensions": ["streetsidesoftware.code-spell-checker"]
    }
  }
}
```

**注意**: ベースイメージの内容に基づいて、追加の設定がコンテナに既に追加されています。例えば、上記で`streetsidesoftware.code-spell-checker`拡張機能を追加しましたが、[それは一部](https://github.com/devcontainers/images/tree/main/src/typescript-node/.devcontainer)であるため、コンテナには`"dbaeumer.vscode-eslint"`も含まれます。これは`mcr.microsoft.com/devcontainers/typescript-node`を使用してプリビルドする際に自動的に発生し、[プリビルドセクション](https://code.visualstudio.com/docs/devcontainers/containers#_pre-building-dev-container-images)で詳しく説明されています。

`devcontainer.json`ファイルの作成について詳しくは、[Development Containerの作成](https://code.visualstudio.com/docs/devcontainers/create-dev-container)をご覧ください。

## Dev Container Features

開発コンテナ「Features」は、自己完結型で共有可能なインストールコードと開発コンテナ設定の単位です。名前は、それらの1つを参照することで、開発コンテナにより多くのツール、ランタイム、またはライブラリ「Features」を迅速かつ簡単に追加して、自分や共同作業者が使用できるという考えに由来しています。

「**Dev Containers: Add Dev Container Configuration Files**」を使用すると、GitやAzure CLIのインストールなど、既存の開発コンテナ設定をカスタマイズするスクリプトのリストが表示されます：

![Features selection interface](https://code.visualstudio.com/assets/docs/devcontainers/containers/dev-container-features.png)

リビルドしてコンテナで再度開くと、選択したFeaturesが`devcontainer.json`で利用可能になります：

```json
"features": {
  "ghcr.io/devcontainers/features/github-cli:1": {
    "version": "latest"
  }
}
```

`devcontainer.json`で直接`"features"`プロパティを編集する際はIntelliSenseを取得できます：

![IntelliSense for features](https://code.visualstudio.com/assets/docs/devcontainers/containers/features-intellisense.png)

「**Dev Containers: Configure Container Features**」コマンドを使用すると、既存の設定を更新できます。

VS Code UIでソースされるFeaturesは、中央インデックスから提供されており、これに貢献することもできます。現在のリストと[Featuresの公開・配布方法の学習](https://containers.dev/implementors/features-distribution/)については、[Dev Container仕様サイト](https://containers.dev/features)をご覧ください。

### 「常にインストールされる」Features

dev containerで[常にインストールされる拡張機能を設定](#常にインストールされる拡張機能)できるように、[dev.containers.defaultFeatures](vscode://settings/dev.containers.defaultFeatures)ユーザー[設定](https://code.visualstudio.com/docs/configure/settings)を使用して、常にインストールしたいFeaturesを設定できます：

```json
"dev.containers.defaultFeatures": {
  "ghcr.io/devcontainers/features/github-cli:1": {}
}
```

### 独自のFeatureの作成

独自のDev Container Featuresを作成・公開することも簡単です。公開されたFeaturesは、サポートする任意のパブリックまたはプライベートコンテナレジストリから[OCI Artifacts](https://github.com/opencontainers/artifacts)として保存・共有できます。現在公開されているFeaturesのリストは[containers.dev](https://containers.dev/features)で確認できます。

Featureは、少なくとも`devcontainer-feature.json`と`install.sh`エントリポイントスクリプトを含むフォルダ内の自己完結型エンティティです：

```
+-- feature
| +-- devcontainer-feature.json
| +-- install.sh
| +-- (other files)
```

dev container CLIを使用して独自のパブリックまたはプライベートFeaturesを公開する手順については、[feature/starter](https://github.com/devcontainers/feature-starter)リポジトリをチェックしてください。

### Featuresの仕様と配布

Featuresはオープンソースの[Development Containers仕様](https://containers.dev/)の重要な部分です。[Featuresの動作](https://containers.dev/implementors/features)とその[配布](https://containers.dev/implementors/features-distribution)に関する詳細情報を確認できます。

## 開発コンテナイメージのプリビルド

プロジェクトを開発コンテナで開くたびにコンテナイメージを作成・ビルドするのではなく、必要なツールを含むイメージを事前にビルドすることをお勧めします。プリビルドイメージを使用すると、コンテナの起動が高速化され、設定が簡素化され、特定のバージョンのツールにピン留めしてサプライチェーンセキュリティを向上させ、潜在的な破損を回避できます。GitHub ActionsなどのDevOpsまたは継続的インテグレーション（CI）サービスを使用してビルドをスケジュールすることで、イメージのプリビルドを自動化できます。

さらに良いことに、プリビルドイメージにはDev Containerメタデータを含めることができるため、イメージを参照すると設定が自動的に引き継がれます。

[Dev Container CLI](https://code.visualstudio.com/docs/devcontainers/devcontainer-cli)（または[GitHub Action](https://github.com/marketplace/actions/devcontainers-ci)などの他の[仕様](https://containers.dev)サポートユーティリティ）を使用してイメージをプリビルドすることをお勧めします。これは、[dev container Features](#dev-container-features)を含むDev Containers拡張機能の最新機能と同期が保たれているためです。イメージをビルドしたら、コンテナレジストリ（[Azure Container Registry](https://learn.microsoft.com/azure/container-registry/container-registry-get-started-docker-cli?tabs=azure-cli)、[GitHub Container Registry](https://docs.github.com/packages/working-with-a-github-packages-registry/working-with-the-container-registry#pushing-container-images)、[Docker Hub](https://docs.docker.com/engine/reference/commandline/push)など）にプッシュして直接参照できます。

ワークフローでdev containersを再利用するために、[devcontainers/ci](https://github.com/devcontainers/ci)リポジトリのGitHub Actionを使用できます。

詳細については、[イメージのプリビルドに関するdev container CLI記事](https://code.visualstudio.com/docs/devcontainers/devcontainer-cli#_prebuilding)をご覧ください。

### メタデータの継承

[イメージラベル](https://docs.docker.com/config/labels-custom-metadata/)を介してプリビルドイメージにDev Container設定とFeatureメタデータを含めることができます。これにより、これらの設定は直接参照される際、参照されるDockerfileの`FROM`内、またはDocker Composeファイル内で自動的に取得されるため、イメージが自己完結型になります。これにより、Dev Container設定とイメージ内容の同期が取れず、単純なイメージ参照を通じて同じ設定の更新を複数のリポジトリにプッシュできます。

このメタデータラベルは、[Dev Container CLI](https://code.visualstudio.com/docs/devcontainers/devcontainer-cli)（または[GitHub Action](https://github.com/marketplace/actions/devcontainers-ci)や[Azure DevOps task](https://marketplace.visualstudio.com/items?itemName=devcontainers.ci)などの他の[仕様](https://containers.dev)サポートユーティリティ）を使用してプリビルドする際に自動的に追加され、`devcontainer.json`および参照されるDev Container Featuresからの設定が含まれます。

これにより、イメージのプリビルドに使用する別のより複雑な`devcontainer.json`を持ち、1つ以上のリポジトリで劇的に簡素化されたものを持つことができます。イメージの内容は、コンテナを作成する時にこの簡素化された`devcontainer.json`コンテンツとマージされます（マージロジックについては[仕様](https://containers.dev/implementors/spec/#merge-logic)を参照）。しかし最も簡単には、設定を有効にするために`devcontainer.json`でイメージを直接参照するだけです：

```json
{
  "image": "mcr.microsoft.com/devcontainers/go:1"
}
```

代わりにイメージラベルに手動でメタデータを追加することもできます。これらのプロパティは、Dev Container CLIを使用してビルドしなかった場合でも取得されます（ビルドした場合でもCLIで更新できます）。例えば、このDockerfileスニペットを考えてみてください：

```dockerfile
LABEL devcontainer.metadata='[{ \
  "capAdd": [ "SYS_PTRACE" ], \
  "remoteUser": "devcontainer", \
  "postCreateCommand": "yarn install" \
}]'
```

## ボリュームの検査

時々、使用しているDocker名前付きボリュームを検査または変更したい状況に遭遇することがあります。`devcontainer.json`ファイルを作成または変更せずに、コマンドパレット（F1）から「**Dev Containers: Explore a Volume in a Dev Container...**」を選択してVS Codeでこれらの内容を操作できます。

Remote Explorerでボリュームを検査することもできます。ドロップダウンで「Containers」が選択されていることを確認すると、「Dev Volumes」セクションが表示されます。ボリュームを右クリックして、ボリュームの作成時期、どのリポジトリがクローンされたか、マウントポイントなどの作成情報を検査できます。また、dev containerで探索することもできます。

[Docker拡張機能](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)がインストールされている場合、Docker ExplorerのVolumesセクションでボリュームを右クリックして「**Explore in a Development Container**」を選択できます。

## 拡張機能の管理

VS Codeは拡張機能を2つの場所のいずれかで実行します：ローカルのUI/クライアントサイド、またはコンテナ内。テーマやスニペットなどのVS Code UIに影響する拡張機能はローカルにインストールされますが、ほとんどの拡張機能は特定のコンテナ内に存在します。これにより、コンテナ内の特定のタスクに必要な拡張機能のみをインストールし、新しいコンテナに接続するだけでツールチェーン全体をシームレスに切り替えることができます。

拡張機能ビューから拡張機能をインストールすると、正しい場所に自動的にインストールされます。拡張機能がインストールされている場所は、カテゴリグループ化から判断できます。「Local - Installed」カテゴリとコンテナ用のカテゴリがあります。

![Extension management](https://code.visualstudio.com/assets/docs/devcontainers/containers/containers-installed-remote-indicator.png)

**注意**: 拡張機能の作成者で、拡張機能が正しく動作しない、または間違った場所にインストールされる場合は、詳細について[Supporting Remote Development](https://code.visualstudio.com/api/advanced-topics/remote-extensions)をご覧ください。

リモートで実際に実行する必要があるローカル拡張機能は、「Local - Installed」カテゴリで「Disabled」と表示されます。「Install」を選択してリモートホストに拡張機能をインストールしてください。

「Local - Installed」タイトルバーの右側にあるクラウドボタンを使用して、拡張機能ビューに移動し「**Install Local Extensions in Dev Container: {Name}**」を選択することで、ローカルにインストールされたすべての拡張機能をDev Container内にインストールすることもできます。これにより、コンテナにインストールするローカルインストール拡張機能を選択できるドロップダウンが表示されます。

ただし、一部の拡張機能では、コンテナに[追加ソフトウェアをインストール](https://code.visualstudio.com/docs/devcontainers/create-dev-container#_install-additional-software)する必要がある場合があります。問題が発生した場合は、詳細について拡張機能のドキュメントを参照してください。

### devcontainer.jsonに拡張機能を追加

拡張機能IDのリストを追加するために[devcontainer.json](https://code.visualstudio.com/docs/devcontainers/create-dev-container#_create-a-devcontainerjson-file)ファイルを手動で編集することもできますが、拡張機能ビューで任意の拡張機能を右クリックして「**Add to devcontainer.json**」を選択することもできます。

### 拡張機能のオプトアウト

ベースイメージまたはFeatureで、dev containerにインストールしたくない拡張機能が設定されている場合、マイナス記号付きで拡張機能をリストアップしてオプトアウトできます。例えば：

```json
{
  "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm",
  "customizations": {
    "vscode": {
      "extensions": ["-dbaeumer.vscode-eslint"]
    }
  }
}
```

### 「常にインストールされる」拡張機能

任意のコンテナに常にインストールしたい拡張機能がある場合は、[dev.containers.defaultExtensions](vscode://settings/dev.containers.defaultExtensions)ユーザー[設定](https://code.visualstudio.com/docs/configure/settings)を更新できます。例えば、[GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)と[Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor)拡張機能をインストールしたい場合は、次のように拡張機能IDを指定します：

```json
"dev.containers.defaultExtensions": [
  "eamodio.gitlens",
  "mutantdino.resourcemonitor"
]
```

### 高度：拡張機能をローカルまたはリモートで強制実行

拡張機能は通常、ローカルまたはリモートのいずれかで実行するように設計・テストされており、両方ではありません。ただし、拡張機能がサポートしている場合は、`settings.json`ファイルの特定の場所で強制実行できます。

例えば、以下の設定では[Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker)拡張機能をローカルで実行し、[Remote - SSH: Editing Configuration Files](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh-edit)拡張機能をデフォルトの代わりにリモートで実行するよう強制します：

```json
"remote.extensionKind": {
  "ms-azuretools.vscode-docker": [ "ui" ],
  "ms-vscode-remote.remote-ssh-edit": [ "workspace" ]
}
```

`"workspace"`の代わりに`"ui"`の値は、拡張機能をローカルUI/クライアントサイドで強制実行します。拡張機能のドキュメントに特に記載されていない限り、拡張機能を破損させる可能性があるため、通常はテスト目的でのみ使用してください。詳細については、[優先拡張機能の場所](https://code.visualstudio.com/api/advanced-topics/extension-host#preferred-extension-location)のセクションをご覧ください。

## ポートの転送または公開

コンテナは分離された環境であるため、コンテナ内のサーバー、サービス、その他のリソースにアクセスしたい場合は、ホストにポートを「転送」または「[公開](https://stackoverflow.com/a/22150099)」する必要があります。これらのポートを常に公開するようにコンテナを設定するか、一時的に転送するかのいずれかを選択できます。

### 常にポートを転送する

`devcontainer.json`の`forwardPorts`プロパティを使用して、アタッチ時またはコンテナでフォルダを開く際に常に転送したいポートのリストを指定できます。

```json
"forwardPorts": [3000, 3001]
```

ウィンドウをリロード/再度開くだけで、VS Codeがコンテナに接続する際に設定が適用されます。

### 一時的にポートを転送する

`devcontainer.json`に追加しなかった、またはDocker Composeファイルで公開しなかったポートにアクセスする必要がある場合は、コマンドパレット（F1）から「**Forward a Port**」コマンドを実行して、セッション期間中に新しいポートを一時的に転送できます。

ポートを選択後、通知でコンテナ内のポートにアクセスするために使用すべきlocalhostポートが表示されます。例えば、ポート3000でリッスンしているHTTPサーバーを転送した場合、localhost上のポート4123にマッピングされたという通知が表示される場合があります。その後、`http://localhost:4123`を使用してこのリモートHTTPサーバーに接続できます。

後でアクセスする必要がある場合は、同じ情報がRemote Explorerの「Forwarded Ports」セクションで利用できます。

転送したポートをVS Codeに記憶させたい場合は、設定エディター（⌘,（Windows、Linux Ctrl+,））で「**Remote: Restore Forwarded Ports**」をチェックするか、`settings.json`で`"remote.restoreForwardedPorts": true`を設定してください。

### ポートの公開

Dockerには、コンテナ作成時にポートを「公開」する概念があります。公開されたポートは、ローカルネットワークで利用可能にするポートとよく似た動作をします。アプリケーションが`localhost`からの呼び出しのみを受け入れる場合、ローカルマシンがネットワーク呼び出しに対して行うのと同様に、公開されたポートからの接続を拒否します。一方、転送されたポートは、実際にアプリケーションに対して`localhost`のように見えます。それぞれ異なる状況で有用です。

ポートを公開するには：

#### appPortプロパティを使用

`devcontainer.json`でイメージまたはDockerfileを参照している場合、`appPort`プロパティを使用してホストにポートを公開できます。

```json
"appPort": [ 3000, "8921:5000" ]
```

#### Docker Composeポートマッピングを使用

[ポートマッピング](https://docs.docker.com/compose/compose-file#ports)を`docker-compose.yml`ファイルに簡単に追加して、追加のポートを公開できます。

```yaml
ports:
  - "3000"
  - "8921:5000"
```

いずれの場合も、設定を有効にするためにコンテナを再ビルドする必要があります。コンテナに接続している際に、コマンドパレット（F1）で「**Dev Containers: Rebuild Container**」コマンドを実行することでこれを行えます。

## ターミナルの起動

VS Codeからコンテナでターミナルを開くのは簡単です。フォルダをコンテナで開いたら、VS Codeで開くターミナルウィンドウ（**Terminal > New Terminal**）は、ローカルではなく自動的にコンテナ内で実行されます。

同じターミナルウィンドウから`code`コマンドラインを使用して、コンテナ内で新しいファイルやフォルダを開くなど、多数の操作を実行することもできます。`code --help`と入力して、コマンドラインから利用可能なオプションを確認してください。

## コンテナでのデバッグ

フォルダをコンテナで開いたら、アプリケーションをローカルで実行する場合と同じ方法でVS Codeのデバッガーを使用できます。例えば、`launch.json`で起動設定を選択してデバッグを開始（F5）すると、アプリケーションはリモートホストで開始され、デバッガーがアタッチされます。

VS Codeのデバッグ機能を`.vscode/launch.json`で設定する詳細については、[デバッグ](https://code.visualstudio.com/docs/debugtest/debugging)ドキュメントを参照してください。

## コンテナ固有の設定

VS Codeのローカルユーザー設定は、dev containerに接続している際も再利用されます。これによりユーザー体験の一貫性が保たれますが、ローカルマシンと各コンテナの間でこれらの設定の一部を変更したい場合があります。幸い、コンテナに接続した後、コマンドパレット（F1）から「**Preferences: Open Remote Settings**」コマンドを実行するか、設定エディターで「Remote」タブを選択することで、コンテナ固有の設定を設定することもできます。これらは、コンテナに接続する際にローカル設定を上書きします。

### デフォルトのコンテナ固有設定

`settings`プロパティを使用して、`devcontainer.json`でコンテナ固有設定のデフォルトを含めることができます。これらの値は、コンテナが作成されるとコンテナ固有設定ファイル内に自動的に配置されます。

例えば、これを`.devcontainer/devcontainer.json`に追加すると、Javaホームパスが設定されます：

```json
// ツール固有のプロパティを設定
"customizations": {
  // VS Code固有のプロパティを設定
  "vscode": {
    "settings": {
      "java.home": "/docker-java-home"
    }
  }
}
```

これはデフォルトを確立するだけなので、コンテナが作成された後も必要に応じて設定を変更できます。

## コンテナの管理

デフォルトでは、フォルダを開く際にDev Containers拡張機能は`devcontainer.json`で言及されているコンテナを自動的に開始します。VS Codeを閉じると、拡張機能は接続していたコンテナを自動的にシャットダウンします。`devcontainer.json`に`"shutdownAction": "none"`を追加することで、この動作を変更できます。

コマンドラインを使用してコンテナを管理することもできますが、Remote Explorerを使用することもできます。コンテナを停止するには、ドロップダウンから「Containers」を選択し（存在する場合）、実行中のコンテナを右クリックして「**Stop Container**」を選択します。終了したコンテナの開始、コンテナの削除、最近のフォルダの削除も可能です。詳細ビューから、ポートを転送したり、既に転送されたポートをブラウザで開いたりできます。

![Container management](https://code.visualstudio.com/assets/docs/devcontainers/containers/containers-explorer.png)

イメージをクリーンアップしたり、コンテナを一括削除したりしたい場合は、さまざまなオプションについて[未使用のコンテナとイメージのクリーンアップ](https://code.visualstudio.com/docs/devcontainers/tips-and-tricks#_cleaning-out-unused-containers-and-images)をご覧ください。

## Dotfileリポジトリでのカスタマイズ

Dotfilesは、ファイル名がドット（`.`）で始まるファイルで、通常はさまざまなアプリケーションの設定情報を含んでいます。開発コンテナは幅広いアプリケーションタイプをカバーできるため、これらのファイルをどこかに保存して、コンテナが起動して実行された後に簡単にコピーできると便利です。

一般的な方法は、これらのdotfilesをGitHubリポジトリに保存し、ユーティリティを使用してクローンして適用することです。Dev Containers拡張機能には、独自のコンテナでこれらを使用するための組み込みサポートがあります。このアイデアが初めての場合は、存在するさまざまな[dotfilesブートストラップリポジトリ](https://dotfiles.github.io/)をご覧ください。

使用するには、VS Codeのユーザー設定（⌘,（Windows、Linux Ctrl+,））に次のようにdotfiles GitHubリポジトリを追加します：

![Dotfiles settings](https://code.visualstudio.com/assets/docs/devcontainers/containers/dotfiles-settings.png)

または`settings.json`で：

```json
{
  "dotfiles.repository": "your-github-id/your-dotfiles-repo",
  "dotfiles.targetPath": "~/dotfiles",
  "dotfiles.installCommand": "install.sh"
}
```

この時点以降、コンテナが作成される際にdotfilesリポジトリが使用されます。

## 既知の制限事項

### Dev Containers制限事項

- **Windowsコンテナイメージはサポートされていません**
- **マルチルートワークスペースのすべてのルート/フォルダ**は、下位レベルに設定ファイルがあるかどうかに関係なく、同じコンテナで開かれます
- **Linux用の非公式Ubuntu Docker snapパッケージはサポートされていません**。お使いのディストリビューション用の[Docker公式インストール手順](https://docs.docker.com/install/#supported-platforms)に従ってください
- **Windows上のDocker Toolboxはサポートされていません**
- **SSHキーにパスフレーズがある場合のGitリポジトリクローン**でVS Codeのプルおよび同期機能がリモート実行時にハングする可能性があります。パスフレーズなしのSSHキーを使用するか、HTTPSを使用してクローンするか、コマンドラインから`git push`を実行して問題を回避してください
- **ローカルプロキシ設定はコンテナ内で再利用されません**。適切なプロキシ情報が設定されていない限り（例：グローバル`HTTP_PROXY`または`HTTPS_PROXY`環境変数）、拡張機能が動作しない可能性があります
- **ssh-agentがバージョン <= 8.8で実行され、SSHクライアント（任意のプラットフォーム）がバージョン >= 8.9で実行される場合のOpenSSHバージョン間の非互換性**があります。回避策は、wingetまたは[Win32-OpenSSH/releases](https://github.com/PowerShell/Win32-OpenSSH/releases)のインストーラーを使用して、Windows上のOpenSSHを8.9以降にアップグレードすることです（`ssh-add -l`は正しく動作しますが、`ssh <ssh-server>`は`<ssh-server>: Permission denied (publickey)`で失敗します。これは、SSHを使用してリポジトリに接続する際のGitにも影響します）

Containersに関連する[アクティブな問題のリスト](https://aka.ms/vscode-remote/containers/issues)については、こちらをご覧ください。

### Docker制限事項

[Windows](https://docs.docker.com/docker-for-windows/troubleshoot)または[Mac](https://docs.docker.com/docker-for-mac/troubleshoot)のDockerトラブルシューティングガイドを参照し、詳細については[Docker Support Resources](https://success.docker.com/article/best-support-resources)を参照してください。

### Docker拡張機能制限事項

WSL、Remote - Tunnels、またはRemote - SSHウィンドウからDockerまたはKubernetes拡張機能を使用している場合、DockerまたはKubernetesビューで「Attach Visual Studio Code」コンテキストメニューアクションを使用すると、利用可能なコンテナから2回目の選択を求められます。

### 拡張機能制限事項

現時点では、ほとんどの拡張機能は変更なしでDev Containers内で動作します。ただし、場合によっては、特定の機能で変更が必要な場合があります。拡張機能の問題に遭遇した場合は、問題を拡張機能作成者に報告する際に言及できる[一般的な問題と解決策の要約](https://code.visualstudio.com/docs/remote/troubleshooting#_extension-tips)をご覧ください。

さらに、Alpine サポートは利用可能ですが、拡張機能内のネイティブコードの`glibc`依存関係により、コンテナにインストールされた一部の拡張機能が動作しない場合があります。詳細については、[LinuxでのRemote Development](https://code.visualstudio.com/docs/remote/linux)記事をご覧ください。

## 高度なコンテナ設定

以下のトピックに関する情報については、[高度なコンテナ設定](https://code.visualstudio.com/remote/advancedcontainers/overview)記事をご覧ください：

- [環境変数の追加](https://code.visualstudio.com/remote/advancedcontainers/environment-variables)
- [他のローカルファイルマウントの追加](https://code.visualstudio.com/remote/advancedcontainers/add-local-file-mount)
- [デフォルトソースコードマウントの変更または削除](https://code.visualstudio.com/remote/advancedcontainers/change-default-source-mount)
- [コンテナディスクパフォーマンスの向上](https://code.visualstudio.com/remote/advancedcontainers/improve-performance)
- [dev containerへの非rootユーザーの追加](https://code.visualstudio.com/remote/advancedcontainers/add-nonroot-user)
- [Docker Composeのプロジェクト名設定](https://code.visualstudio.com/remote/advancedcontainers/set-docker-compose-project-name)
- [コンテナ内からのDockerまたはKubernetesの使用](https://code.visualstudio.com/remote/advancedcontainers/use-docker-kubernetes)
- [複数のコンテナへの同時接続](https://code.visualstudio.com/remote/advancedcontainers/connect-multiple-containers)
- [リモートDocker MachineまたはSSHホスト上のコンテナ内での開発](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host)
- [Dockerfileビルド警告の削減](https://code.visualstudio.com/remote/advancedcontainers/reduce-docker-warnings)
- [コンテナとのgit認証情報の共有](https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials)

## devcontainer.jsonリファレンス

[devcontainer.jsonリファレンス](https://containers.dev/implementors/json_reference)の完全版があり、開発コンテナをカスタマイズし、実行中のコンテナへのアタッチを制御するためのファイルスキーマを確認できます。

## 質問やフィードバック

- [ヒントとコツ](https://code.visualstudio.com/docs/devcontainers/tips-and-tricks)または[FAQ](https://code.visualstudio.com/docs/devcontainers/faq)をご覧ください
- [Stack Overflow](https://stackoverflow.com/questions/tagged/vscode-remote)で検索してください
- [機能リクエスト](https://aka.ms/vscode-remote/feature-requests)を追加するか[問題を報告](https://aka.ms/vscode-remote/issues/new)してください
- 他の人が使用できる[Dev Container Template](https://containers.dev/templates)または[Feature](https://containers.dev/features)を作成してください
- [Development Containers仕様](https://containers.dev/)をレビューしてフィードバックを提供してください
- [ドキュメント](https://github.com/microsoft/vscode-docs)または[VS Code自体](https://github.com/microsoft/vscode)に貢献してください
- 詳細については[貢献](https://aka.ms/vscode-remote/contributing)ガイドをご覧ください

## 次のステップ

- [実行中のコンテナにアタッチ](https://code.visualstudio.com/docs/devcontainers/attach-container) - 既に実行中のDockerコンテナにアタッチ
- [Development Containerの作成](https://code.visualstudio.com/docs/devcontainers/create-dev-container) - 作業環境用のカスタムコンテナを作成
- [高度なコンテナ](https://code.visualstudio.com/remote/advancedcontainers/overview) - 高度なコンテナシナリオの解決策を見つける
- [devcontainer.jsonリファレンス](https://containers.dev/implementors/json_reference) - `devcontainer.json`スキーマを確認

---

## 補足情報

### 関連リンク

- **公式ドキュメント**: [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/containers)
- **Dev Container仕様**: [containers.dev](https://containers.dev/)
- **テンプレートリポジトリ**: [devcontainers/templates](https://github.com/devcontainers/templates)
- **CLI**: [Dev Container CLI](https://containers.dev/implementors/cli/)

### 日本語コミュニティリソース

- VS Code公式日本語ドキュメントやコミュニティフォーラムでDev Containersに関する情報交換が可能
- DockerやKubernetesの日本語学習リソースも豊富に利用可能

### よくある質問（日本語環境向け）

**Q: 日本語ファイル名やパスを含むプロジェクトでも動作しますか？**
A: はい、UTF-8エンコーディングをサポートしているため、日本語ファイル名やパスでも問題なく動作します。

**Q: Windows上で日本語IMEは正常に動作しますか？**
A: VS Code自体の日本語入力サポートがそのままコンテナ環境でも利用できます。

**Q: タイムゾーンの設定はどうすれば良いですか？**
A: `devcontainer.json`で環境変数`TZ=Asia/Tokyo`を設定することで日本時間に設定できます。