Posted at

VSCode InsiderのRemote Development extensions(Python)を試す


概要

VSCode InsiderをつかってPythonのRemote Debugを試してみます。

docker環境で開発を行い、ローカルの環境がグチャグチャになるのを防ぐということができるはずです。

Getting Startedに書いてあるとおりです。


(Docker Toolbox is not currently supported.)


とあるのを気にせずdocker toolboxで進めてみたら、案の定エラーになりました。

ということで以下はDocker for Windows環境で試したものです。


手順


VSCode Insider設置

VSCodeには未導入のためVSCode Insiderを設置します


Download Visual Studio Code Insidersから取得して設置するだけです


Remote Development 拡張設置

Remote Development extension packを設置します


Remote - SSH

Remote - Containers

Remote - WSL

Remote - SSH: Explorer

Remote - SSH: Editing COnfiguration


も同時にインストールされるようです。


サンプルプロジェクトを取得

Pythonで試したかったので以下を取得

git clone https://github.com/Microsoft/vscode-remote-try-python

vscode-remote-try-pythonそのままです。


Open Folder in Container

左下の緑のボタンをクリックして、「Remote-Containers: Open Folder in Container」を押します

F1コマンドで「Remote-」と押して候補選択してもよいです。

remote.png

remote2.png

docker buildが始まって、VSCodeの編集画面が開きます。

試した環境ではプロキシありの環境だったので

docker build --build-arg http_proxy=xxx ...

を指定したかったのですが、--build-argの指定方法がわからず

DockerFile内にENV http_proxy=xxxを足すことで対応

VSCode InsiderのExtensionはimageが変わるごとに追加する必要があるようですが

Managing extensionsを参考にsettings.jsonに

"remote.containers.defaultExtensions": [

"ms-python.python"
]

を追加しておくことで自動設置してくれるようでした。

あとは、ブレークポイントの設定をしてデバッグ実行することで、ローカルのフォルダを開くのとほとんど同じ感覚で使えます。

dockerコマンドを打たずにシームレスに統合されている感がすごい。

一度コンテナ止めてから、再度「Open Folder in Container」してもつながるので、どこかで覚えていてくれているのでしょう。


Remote-Containers: Attach to Running Container

好きなようにコンテナを立ち上げた状態から

おもむろにVSCodeを立ち上げ、

F1コマンドから「Remote-Containers: Attach to Running Container」を実行、

コンテナ選択することでアタッチできます。

既存のdocker-composeを利用して、ひとまずアタッチする場合にはこちらのほうが便利かも。

.devcontainerにdocker-composeファイルを指定する方法もあるようなので

Open Folder in Containerからの起動の方がステップがすくなるのかもしれません。


Remote-Containers: Forward Port from Container

ガイドにこっそりありますが、

起動させた状態から一時的にポートフォワードの設定を追加することができます。

空いているポートでないと候補にあがってこないようなので

デバッグ実行などしてポートを開いた状態で

F1コマンドから「Remote-Containers: Forward Port from Container」を実行します。

一度とめなくてよいので便利です。


まとめ

リリースが楽しみです。