Visual Studio Code (以下、 VSCode ) をあれこれ触っていたので、まとめておきます。
Visual Studio Code のバージョンは 1.56.0 です。
ソースコードの差分が表示されない問題
VSCode の拡張機能の Git History を入れると、コミットログがVSCode 上で快適に見れそうだと思ったので、これを試してみました。
VSCode 上で git log を見る際に便利な拡張機能 Git History | Lonely Mobiler
Git History そのものはなかなかいい感じです。ですが、ふと気づくと、 Git History そのものは動作するのですが、なぜかそれまで問題なく動いていた、エディター上で変更箇所を色付きで表示する機能が動かなくなりました(この機能は、 gutter indicators, ガターインジケータというそうです)。
これは、まずいぞ、ということで、一旦 Git Hisotry をアンインストールしたり、 VSCode 自体も再インストールしたりしたのですが、一向に解決しません。困り果ててあれこれ調べていると、
- Visual Studio Code Git decorations disappear - Stack Overflow
- vscode git changes not showing in explorer view when working through symbolic links. · Issue #109865 · microsoft/vscode · GitHub
などの記事が見つかりました。これらを見ると、シンボリックリンクがあるとこのガターインジケータが正しく動作しないと書かれています。
実は開いていたフォルダは、ジャンクション経由で指定したフォルダだったので、もしやと思い、ジャンクションを経由しない方法で指定したところ、問題なく表示することができました。
にしても、なぜ今まではジャンクション経由のパスを指定して開いていたのに問題なかったのかが不思議です。とはいえ、とりあえず自分の実用上は問題ないので、これでよしとします。 似たような問題に困っている方のご参考になればと思います。
参考:VSCode のアンインストール方法
なお、 VSCode を完全にアンインストールするには、下記記事のように
VS Codeをアンインストールするには:Visual Studio Code TIPS - @IT
C:\Users\ユーザー名\AppData\Roaming\Code
C:\Users\ユーザー名\.vscode
も削除しておく必要があります。
Remote WSL 拡張機能をインストール
WSL 側に開発環境を入れて、 Visual Studio Code からリモート開発ができると知ったので、これも試してみました。
なお、余談ですが WSL は WSL 1 を使ってます。
というのも WSL 2 は Hyper-V がベースになっているっぽいので、Hyper-V が有効な状態だと、VirtualBox を使う際に支障が出てしまいます。
もちろん、 VirtualBox 側も Hyper-V が有効な状態での動作に対応しているようですが、手元の環境ではまだ検証できていないため、WSL 2 にまだ上げられず、 WSL 1 のままにしているという事情があるためです。
先々、 VirtualBox 側の動作が確認出来たら、WSL も移行したいと思います。
Visual Studio Code 側の設定
拡張機能として Remote WSL を選択し、インストールします。似たようなものとして、 Remote Development というのもあるのですが、こちらは3つのリモート機能をまとめてインストールすることができるようです。
3つのリモート機能については、下記の記事などを参考にしてください。
今回は WSL しか使わないので、 Remote WSL にしました。この辺りは、ご自分の用途に合わせてインストールするといいと思います。
WSL 側の設定
WSL のターミナルを立ち上げて、適当な作業ディレクトリに移動後、
mor@DESKTOP-H6IEJF9:~/work/test$ code .
とします。 公式の説明を読むと、 WSL 側にサーバーがインストールされ、WIndows側の VSCode と通信してリモート開発ができるようになるとのことです。
インストールが終わると、勝手に VSCode が起動します。
以後は、WSL 上の作業ディレクトリに接続して作業したければ、画面左下の緑色のアイコンをクリックすると、
をクリックすると、下記のように
コマンドパレットに選択肢が出てくるので、必要なものを選択すればOKです。なお、 New WSL Window や New WSL Windows using Distro... だと、リモートに接続した状態ですが、特にどのフォルダも開いていないので、改めてフォルダを選択して開く必要があります(この状態でメニューの『フォルダを開く』を選択すると、WSL側のフォルダを選択できるので、便利です)。
参考:code 実行時のエラーについて
実は、最初に試した際は、下記のように mv でに関するエラーが表示されました。
mor@DESKTOP-H6IEJF9:~/work/test$ code . Installing VS Code Server for x64 (cfa2e218100323074ac1948c885448fdf4de2a7f) Downloading: 100% Unpacking: 100% mv: '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f-1620269414' から '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f' へ移動できません: 許可がありません mv: '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f-1620269414' から '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f' へ移動できません: 許可がありません mv: '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f-1620269414' から '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f' へ移動できません: 許可がありません mv: '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f-1620269414' から '/home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f' へ移動できません: 許可がありません Unpacked 1952 files and folders to /home/mor/.vscode-server/bin/cfa2e218100323074ac1948c885448fdf4de2a7f. mor@DESKTOP-H6IEJF9:~/work/test$ ls
これは正しくインストール出来ているのか?と疑問に思ったので調べてみました。
すると、詳細な理由は不明ですが、似たような現象があるようです。
上記の記事中で解決策として修正対象になっているスクリプト(今回の場合は、 C:\Users\ユーザー名.vscode\extensions\ms-vscode-remote.remote-wsl-0.56.1\scripts\wslDownload.sh)を見てみると、
# Rename temporary folder to final folder name, retries needed due to WSL for _ in 1 2 3 4 5; do mv "$TMP_EXTRACT_FOLDER" "$VSCODE_REMOTE_BIN/$COMMIT" && break sleep 2 done if [ ! -d "$VSCODE_REMOTE_BIN/$COMMIT" ]; then echo "WARNING: Unable to move $TMP_EXTRACT_FOLDER. Trying copying instead." 1>&2 cp -r "$TMP_EXTRACT_FOLDER" "$VSCODE_REMOTE_BIN/$COMMIT" fi if [ ! -d "$VSCODE_REMOTE_BIN/$COMMIT" ]; then echo "ERROR: Failed create $VSCODE_REMOTE_BIN/$COMMIT. Make sure all VSCode WSL windows are closed and try again." 1>&2 exit 11 fi EXTRACTED_COUNT=$(find "$VSCODE_REMOTE_BIN/$COMMIT" | wc -l) if [ "$FILE_COUNT" -ne "$EXTRACTED_COUNT" ]; then echo "ERROR: Unpacking failed: Files expected: $FILE_COUNT, is $EXTRACTED_COUNT" 1>&2 else echo "Unpacked $EXTRACTED_COUNT files and folders to $VSCODE_REMOTE_BIN/$COMMIT." fi
となっていました。 mv を5回試して、どこかで成功すれば『Unpacked ・・・』のメッセージが出るようです。 なので、これはこれで正しくインストールされているということのようです。
心臓に悪いですね。
ちなみに、このエラーがでたときは、 WSL というか Ubuntu のバージョンは
mor@DESKTOP-H6IEJF9:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS" mor@DESKTOP-H6IEJF9:~$
でした。