プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Visual Studio Code あれこれ

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 自体も再インストールしたりしたのですが、一向に解決しません。困り果ててあれこれ調べていると、

などの記事が見つかりました。これらを見ると、シンボリックリンクがあるとこのガターインジケータが正しく動作しないと書かれています。

実は開いていたフォルダは、ジャンクション経由で指定したフォルダだったので、もしやと思い、ジャンクションを経由しない方法で指定したところ、問題なく表示することができました。

にしても、なぜ今まではジャンクション経由のパスを指定して開いていたのに問題なかったのかが不思議です。とはいえ、とりあえず自分の実用上は問題ないので、これでよしとします。 似たような問題に困っている方のご参考になればと思います。

参考: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 上の作業ディレクトリに接続して作業したければ、画面左下の緑色のアイコンをクリックすると、

f:id:junichim:20210506143855p:plain

をクリックすると、下記のように

f:id:junichim:20210506143950p:plain

コマンドパレットに選択肢が出てくるので、必要なものを選択すれば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

これは正しくインストール出来ているのか?と疑問に思ったので調べてみました。

すると、詳細な理由は不明ですが、似たような現象があるようです。

Install Remote WSL fail with mv - permission denied · Issue #109 · microsoft/vscode-remote-release · GitHub

上記の記事中で解決策として修正対象になっているスクリプト(今回の場合は、 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:~$

でした。