VSCode拡張機能 Remote Containers におけるpostCreateCommandなどの実行タイミングについて


はじめに🤔

VS Code 拡張機能の Remote Containers を使ったときにコンテナ内でコマンド実行させるには postCreateCommand, postStartCommand, postAttachCommand プロパティで指定すればいい。
が、devcontainer.jsonのリファレンスを見ても、実際にどのタイミングで実行されるのかいまいち分からなかったのでメモ。

なお下記バージョンでの確認であることに注意。
GitHubのIssue見てると実行タイミングについて変更されているので、今後のバージョンによって変わることは十分ありえる。

Table 1. 環境
App Version

VS Code

1.52.1

Remote-Containers

0.154.1

各プロパティの実行タイミング🏄

テスト用に devcontainer.json ファイルを書いて確認した結果が以下の表。
.devcontainer/devcontainer.json
{
  "name": "Test for devcontainer",
  "image": "alpine:3.12",
  "extensions": ["mhutchie.git-graph"],

  "postAttachCommand": "echo '---Attach---'",
  "postCreateCommand": "echo '---Create---'",
  "postStartCommand": "echo '--Start---'"
}
Table 2. コンテナ内でのコマンド実行
Property Desc

postCreateCommand

コンテナ作成後、dotfiles や拡張機能のインストール前に実行される。
コンテナ作成時の1回のみ実行される。

postStartCommand

VS Code Server 接続後に実行される。
拡張機能以外のコンテナ設定が終わった後に実行される。
リモート接続するたびに実行される。

postAttachCommand

postStartCommand の後に実行される。
拡張機能のインストールと並列実行されている。
リモート接続するたびに実行される。

各コマンドは remoteUser によって実行される(デフォルトは root )。
Remote Containers 実行フロー
Figure 1. Remote Containers 実行フロー

おわりに🐾

とりあえず postCreateCommand を使っておけば大丈夫かと思ったけど、意外とそうでもなかった。

コマンドを1度だけ実行したいのか、毎回実行したいのかで使い分ける必要がわかってよかった。