はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

Visual Studio Codeについてのメモ

VSCodeについての自分用メモ。

目次:

編集画面Tips

  • Ctrl + Shift + Pでコマンドパレットが表示される
  • 文字列をHTMLのタグで囲みたい時は文字列を選択してからコマンドパレットからEmmet: Wrap with Abbrebiationを実行する

リモートDockerコンテナで開発する

SSHで接続した先のリモートホスト上で動くDockerコンテナ内で開発する方法。 開発環境はDockerコンテナ内に構築する。 ローカルマシンにはDockerも開発言語もインストールしなくてよい。

VSCode拡張機能の準備
  1. クライアント側から公開鍵でパスワードなしで ssh ユーザ名@ホスト名 で接続できるようにしておく
  2. ローカルにVS Codeをインストールする
  3. 拡張機能 Visual Studio Code Remote Development Extension Pack (Remote Development)をインストールする
Dockerfileを準備する

ソースコードリモートホスト上に置く。 正常にビルドできるDockerfileを用意する。

次のように開発用ユーザーを追加する記述も入れておく。

RUN addgroup -g 1000 devuser && \
    adduser -u 1000 --home /tmp devuser -G devuser -D
devcontainer.jsonを準備する

Dockerを実行するディレクトリに.devcontainerディレクトリを作成し、その中にdevcontainer.jsonを作成する。 以下のような内容で事前に準備してもよいが、なければ初回接続時に一般的な内容のものが作成される。

.devcontainer/devcontainer.json:

{
    "name": "testdev",
    "build": {
        "dockerfile": "../Dockerfile"
    },
    "forwardPorts": [3000],
    "remoteUser": "devuser"
}

"remoteUser"にはDockerfileで作成したユーザーを指定する。

初回接続
  1. 左下の><をクリックし、[ Connect Current Window to Host... ] を選択する
  2. ホストを選択するか、+ Add New SSH Host... をクリック → 上記 ユーザ名@ホスト名 を入力 → .ssh/hosts を選択 → Open Remote を選択する
  3. ソースコードのあるディレクトリを開く
  4. コマンドパレットから [ Reopen in Container ] を選択する

もしdevcontainer.jsonファイルがない場合には、 From Dockerfile を選択してDockerfileを指定するとdevcontainer.jsonファイルが作成される。

初回はコンテナをビルドするため時間がかかる。

ビルドに失敗して、その後に修正しても反映されない場合には、リモートホスト上でdocker ps --allをしてエラーを起こしたコンテナが残っているか確認する。 もしコンテナが残っていたらdocker rm コンテナIDで削除するとビルドできるようになる場合がある。

2回目からの接続

2回目からは次のどちらかで接続できる。

  • [ Connect Current Window to Host... ] で接続し [ Reopen in Container ] を実行する
  • VSCode の「最近使用した項目」から [ Dev Container: 〜 ] と書かれている項目を選択する

なお、Dockerfile内ではUID、GIDともに1000で作成したが、Remote Developmentを使うと実行時に利用者のUID、GIDに変更してくれる。

参照: Docker や VSCode + Remote-Container のパーミッション問題に立ち向かう