概要
デバイスに依存しない開発環境を構築したく、VS Codeをクラウド上に置く方法を検証した。
案1 - Linuxサーバー + X11を使う
構成
Dockerコンテナ上にLinuxサーバーを立て、クライアントのMacBook上にはXQuartzを起動しておく。リモートのVS Codeを起動した際はX11経由で画面を転送して、あたかもローカルでVS Codeを操作しているかのように扱う。
環境
ホストOS
- macOS: 10.14.4
- Docker: 18.09.2
クライアントOS
- Ubuntu 18.04.2 LTS
手順
XQuartz起動
XQuartzを起動しておく。
X11セットアップ
UbuntuのDockerイメージをプルし、起動してX11の設定を行う。
$ docker pull ubuntu
$ docker run --rm -it ubuntu /bin/bash
$ apt-get update && apt-get install -y x11-apps
$ export DISPLAY=host.docker.internal:0.0
別のターミナルを開き、以下のコマンドを実行する。
$ xhost +localhost
Dockerコンテナ上にて以下のコマンドを実行する。ホストOS上にウィンドウが立ち上がり、Xロゴが表示されることを確認する。
$ xlogo
VS Codeインストール
VS Codeのdocsを参考に、インストールを行う。
$ apt-get install -y curl gpg
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
$ install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
$ sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
$ apt-get install -y apt-transport-https
$ apt-get update
$ apt-get install -y code # or code-insiders
$ apt-get install -y libx11-xcb1 libasound2 # 不足しているライブラリ
VS Code起動と動作確認
VS Codeはrootユーザーでは実行できないため、適当なユーザーを作成する。作成したユーザーにスイッチしてVS Codeを起動し、ウィンドウが立ち上がることを確認する。
$ useradd -m hoge -s /bin/bash
$ su - hoge
$ code
所感
この時点ではLinuxサーバーがホストOS上で動作している。リモートで動作させるためにはSSHの設定が必要だが、その前に、この段階で確認したVS Codeの操作感を記す。
- 描画のラグが大きい。
- 特に大きくスワイプした場合の画面のスクロール量は期待を下回り、ストレスを感じる。
- 基本的なキーボードショートカット(Ctrl+C, Ctrl+Vなど)が使えない。
- ホストOS上のそれを再現しようとすると余計な手間がかかるだろう。
- フルスクリーン化できない。
- X11の設定からフルスクリーンを有効化すると、ウィンドウが消えてしまう。
案2 - Coderを使う
CoderはVS CodeのSaaS版のようなツールである。Dockerイメージ、あるいはバイナリファイルをデプロイすることでVS CodeライクなツールがWebブラウザ経由で使えるようになる。
セットアップ
公式サイトに記載のDockerコマンドを実行すると、Dockerイメージのダウンロードと起動を行う。特筆することは無く、非常にシンプルである。
所感
操作のレスポンスは軽快でストレスを感じない。しかし、オリジナルのVS Codeではないため一部の機能が使えず、特に以下の点に不便さを感じた。
-
一部の拡張機能は検索でヒットしないため、代わりにVSIXファイルのインポートする。さらに、正常に動作させるために一手間が必要。
-
PlantUML
- レンダリングのためにJAVAが必要なので
docker exec
でコンテナにログイン後、$ apt-get install default-jre
を実行する。
- レンダリングのためにJAVAが必要なので
-
PlantUML
-
一部の拡張機能が使えない。
- Git Historyが使えないのは痛手だ。
-
ターミナルの分割ボタンが機能しない。- v1.621(あるいは以前)より対応。
全体の感想
現時点ではどちらの案もローカル版のVS Codeと同程度の快適さは得られず、実用的ではない。前者は(特に)描画の高速化が可能であれば、より実用的になるだろう。後者はリリースされて間もないツールであるため、今後の改善に期待したい。