VSCodeの設定・拡張機能を環境間で共有する
追記
こんなものがあるらしい。この記事いらんやんけ!
本題
VSCodeの設定を環境間で共有するのはまあまあ面倒くさい(自分はMac/Ubuntuで設定を共有している)。この記事ではそのあたりについて言述する。
共有したい設定
VSCodeで共有しておきたい設定は次の2つ。
settings.json はOSによって保存場所が違うみたいで、例えば Ubuntu(Linux) だと .config
の下とかに保存されているが、 Mac だともっと深いところに保存されている。
- Windows
%APPDATA%\Code\User\settings.json
- Mac
$HOME/Library/Application Support/Code/User/settings.json
- Linux
$HOME/.config/Code/User/settings.json
setting.json
は bashrc のように dotfiles のリポジトリ等でファイルを管理して、上記の場所にシンボリックリンク等を張れば共有することができるので、難しくはない。
ln -s $HOME/rc/settings.json $HOME/.config/Code/User/settings.json
曲者なのが拡張機能で、拡張機能本体の容量がまあまあ大きいのでそのままリポジトリ等で管理するわけにはいかない。(できないこともないが、 push や clone にめっちゃ時間がかかったりする)
そのため、拡張機能は拡張機能の名前のリストのみ管理することにする。これには code --list-extensions
コマンドが利用でき、これでインストールされている拡張機能のリストを出力することができる。(Macは code
コマンドを使うのに少し設定が必要らしい https://code.visualstudio.com/docs/setup/mac )
$ code --list-extensions bungcip.better-toml codezombiech.gitignore Compulim.vscode-clock dbaeumer.vscode-eslint ...
この出力結果をファイルに保存してリポジトリとかで管理して共有する。
code --list-extensions > $HOME/rc/extensions
このファイルから1発でインストールできたらいいけど、ドキュメント見たかんじ欲しいコマンドは無さそう…。
出力した拡張機能リストからのダウンロードには code --install-extension
を使う。ただし、ドキュメントにあるように1つづつしかダウンロードできないため、ファイルの行をループして1つづつインストールしていく。このスクリプトも extensions のファイルと一緒に管理しておこう。
while read ext; do code --install-extension $ext done <$HOME/rc/extensions
一応、実行したらこんなかんじ。
$ sh install.sh Found 'bungcip.better-toml' in the marketplace. Installing... Extension 'bungcip.better-toml' v0.3.2 was successfully installed! Found 'codezombiech.gitignore' in the marketplace. Installing... Extension 'codezombiech.gitignore' v0.6.0 was successfully installed! Found 'compulim.vscode-clock' in the marketplace. Installing... Extension 'compulim.vscode-clock' v0.0.1 was successfully installed! Found 'dbaeumer.vscode-eslint' in the marketplace. Installing... ...
まとめ
環境の共有には次の手順が必要。
settings.json
のシンボリックリンクを張るextensions
リストの作成、インストール
$HOME/rc/vscode/settings.json
と $HOME/rc/vscode/extensions
が存在している状態なら次のスクリプトでなんとかなる。(Windowsなし)
# setting.json if [ "$(uname)" == 'Darwin' ]; then SETTINGS_PATH="$HOME/Library/Application Support/Code/User/settings.json" elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then SETTINGS_PATH="$HOME/.config/Code/User/settings.json" elif [ "$(expr substr $(uname -s) 1 10)" == 'MINGW32_NT' ]; then echo "Windows is not supported." exit 1 else echo "Your platform ($(uname -a)) is not supported." exit 1 fi ln -s $HOME/rc/vscode/settings.json $SETTINGS_PATH # install extensions while read ext; do code --install-extension $ext done <$HOME/rc/vscode/extensions echo 'done.'