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

ディスクパフォーマンスを向上させる

Dev Containers拡張機能は、デフォルトでローカルファイルシステム内のソースコードに「バインドマウント」を使用します。これは最も簡単なオプションですが、macOSやWindowsでは、コンテナ内からyarn installのようなコマンドを実行すると、ディスクパフォーマンスが低下する可能性があります。この種の問題を解決するためにできることがいくつかあります。

WindowsのWSL 2ファイルシステムにソースコードを保存する

Windows 10 2004以降には、フルLinuxカーネルを提供するWindows Subsystem for Linux (WSL 2)の改良版が含まれており、WSL 1と比較してパフォーマンスが大幅に向上しています。Docker Desktop 2.3以降には、VMではなくWSLでDockerを実行する新しいWSL 2エンジンが含まれています。したがって、WSL 2ファイルシステムにソースコードを保存すると、パフォーマンスが向上し、パーミッション設定などの互換性も向上します。

この新しいエンジンをVS Codeから使用する方法については、WindowsでWSL 2フォルダをコンテナで開くを参照してください。

動画: Windowsで開発コンテナを高速化する

コンテナボリュームでリポジトリをクローンするを使用する

Dev Containers: Clone Repository in Container Volume...コマンドは、ローカルファイルシステムにバインドするのではなく、分離されたローカルのDocker名前付きボリュームを使用します。ファイルツリーを汚染しないだけでなく、ローカルボリュームにはWindowsとmacOSでパフォーマンスが向上するという追加の利点があります。

このアプローチの使用方法については、分離されたコンテナボリュームでGitリポジトリまたはGitHub PRを開くを参照してください。

次の2つのセクションでは、他のシナリオで名前付きボリュームを使用する方法を説明します。

ターゲットの名前付きボリュームを使用する

macOSとWindowsはVMでコンテナを実行するため、「バインド」マウントはコンテナのファイルシステムを直接使用するほど高速ではありません。幸いなことに、Dockerには、コンテナのファイルシステムのように機能するが、コンテナの再構築後も存続するローカルの「名前付きボリューム」の概念があります。これにより、書き込みパフォーマンスが重要なnode_modulesのようなパッケージフォルダ、データフォルダ、またはbuildのような出力フォルダを保存するのに理想的です。devcontainer.jsonで参照するものに基づいて、以下の適切な手順に従ってください。

Dockerfileまたはイメージ:

yarn installを高速化する方法を説明するために、vscode-remote-try-nodeリポジトリを使用しましょう。

次の手順に従ってください

  1. devcontainer.jsonworkspaceMountプロパティを使用して、ソースコードをどこにバインドするかをVS Codeに指示します。次に、mountsプロパティ (VS Code 1.41+) を使用して、node_modulesサブフォルダを名前付きローカルボリュームにマウントします。

    "mounts": [
        "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume"
    ]
    

    : sourceには、${localWorkspaceFolderBasename}${devcontainerId}、またはハードコードされた名前を使用できます。

  2. このリポジトリはVS Codeを非rootの「node」ユーザーとして実行するため、ユーザーがフォルダにアクセスできるようにpostCreateCommandを追加する必要があります。

    "remoteUser": "node",
    "mounts": [
        "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume"
    ],
    "postCreateCommand": "sudo chown node node_modules"
    

    コンテナをrootとして実行する場合は、この2番目の手順は必要ありません。

コンテナをすでに構築して接続している場合は、コマンドパレット (F1) からDev Containers: Rebuild Containerを実行して変更を反映させます。それ以外の場合は、Dev Containers: Open Folder in Container...を実行してコンテナに接続します。

このアプローチに関する2つの注意点

  1. コンテナ内のnode_modulesフォルダを削除すると、ボリュームへの接続が失われる可能性があります。必要な場合は、代わりにnode_modulesフォルダの内容を削除してください (rm -rf node_modules/* node_modules/.*)。

  2. この方法では、空のnode_modulesフォルダがローカルに作成されることがわかります。これは、コンテナ内のボリュームマウントポイントがローカルファイルシステムバインドマウントの内側にあるためです。これは予期されたものであり、無害です。

Docker Compose:

vscode-remote-try-nodeはDocker Composeを使用しませんが、手順は似ていますが、ボリュームマウント設定は別のファイルに配置されます。

  1. Docker Composeファイル (または拡張ファイル) で、適切なサービスにnode_modulesサブフォルダへの名前付きローカルボリュームマウントを追加します。例えば

    version: '3'
    services:
      your-service-name-here:
        volumes:
          # Or wherever you've mounted your source code
          - .:/workspace:cached
          - try-node-node_modules:/workspace/node_modules
        # ...
    
    volumes:
      try-node-node_modules:
    
  2. 次に、devcontainer.jsonworkspaceFolderプロパティが実際のソースコードがマウントされている場所と一致していることを確認してください

    "workspaceFolder": "/workspace"
    
  3. root以外のユーザーとしてコンテナで実行している場合は、マウントしたフォルダの所有者を更新するためにpostCreateCommandを追加します。rootとしてマウントされた可能性があるためです。user-name-goes-hereを適切なユーザーに置き換えてください。

    "remoteUser": "node",
    "workspaceFolder": "/workspace",
    "postCreateCommand": "sudo chown user-name-goes-here node_modules"
    

コンテナをすでに構築して接続している場合は、コマンドパレット (F1) からDev Containers: Rebuild Containerを実行して変更を反映させます。それ以外の場合は、Dev Containers: Open Folder in Container...を実行してコンテナに接続します。

動画: 開発コンテナでnpm installを高速化する

ソースツリー全体に名前付きボリュームを使用する

最後に、上記のオプションのいずれもニーズに合わない場合は、もう一歩進んで、ローカルではなくソースツリー全体を名前付きボリューム内にクローンすることができます。既存のdevcontainer.json設定を取得し、次のように変更することで名前付きボリュームを設定できます (your-volume-name-hereをボリュームに付けたい名前に更新します)。

devcontainer.jsonで参照するものによって異なります

  • Dockerfileまたはイメージ: devcontainer.jsonで以下のプロパティを使用して、ローカルの名前付きボリュームをコンテナにマウントします

    "workspaceMount": "source=your-volume-name-here,target=/workspace,type=volume"
    "workspaceFolder": "/workspace",
    
  • Docker Compose: 適切なサービスに以下の内容でdocker-compose.ymlを更新 (または拡張) します

    version: '3'
    services:
      your-service-name-here:
        volumes:
            - your-volume-name-here:/workspace
        # ...
    
    volumes:
      your-volume-name-here:
    

    また、devcontainer.jsonworkspaceFolderプロパティがボリュームがマウントされている場所 (またはボリューム内のサブフォルダ) と一致していることを確認してください

    "workspaceFolder": "/workspace"
    

コンテナをすでに構築して接続している場合は、コマンドパレット (F1) からDev Containers: Rebuild Containerを実行して変更を反映させます。それ以外の場合は、Dev Containers: Open Folder in Container...を実行してコンテナに接続します。

次に、コマンドパレットからGit: クローンコマンドを使用するか、統合ターミナルを開始 (⌃⇧` (Windows, Linux Ctrl+Shift+`)) し、git cloneコマンドを使用してソースコードを/workspaceフォルダにクローンします。

最後に、ファイル > 開く... / フォルダを開く...コマンドを使用して、クローンされたリポジトリをコンテナで開きます。