LoginSignup
3
0

More than 3 years have passed since last update.

Visual Studio Codeの拡張機能をバージョン管理したい

Posted at

拡張機能のアンインストールで痛い目を見たので、同じことを繰り返さないようにメモします。

経緯

Visual Studio Codeの拡張機能って便利ですよね。ただ、新しい機能を追加した後、それまで動いていた他の機能が動かなくなることがあります。
久しぶりにMarkdown Preview Enhanced でフローチャートを描いたのですが、全然表示されませんでした。
どの拡張機能を追加したり削除したりしたかをバージョン管理できれば、原因の特定に役立つのではないでしょうか

注意

Gitとbatchは全然慣れていないので間違ってたらごめんなさい。

やりたいこと

  • インストールしてある拡張機能の一覧をテキストファイル(以下、拡張機能一覧と呼びます)として出力する
  • 拡張機能一覧をバージョン管理する
  • Visual Studio Codeを拡張機能一覧の通りに構成しなおす

環境

  • Windows10 1803
  • Visual Studio Code 1.36.0

方法

拡張機能一覧の出力

まず、拡張機能一覧を出力します。

コマンドプロンプトを開き、拡張機能一覧を保存したい場所にカレントディレクトリを変えてから以下のコマンドを実行します。ファイル名は好きに変えてください。

code --list-extensions > extension_list.txt

拡張機能一覧をバージョン管理

最初の一度だけgitにレポジトリを追加

git init (拡張機能一覧を保存するディレクトリ)

後は拡張機能を追加/削除するたびに先ほどの拡張機能一覧の出力とgit addとgit commitを繰り返すだけです。「なんか改行変だよ」ってgitに言われますが、無視して大丈夫そうです(多分)

git add extension_list.txt
git commit extension_list.txt

いちいちコマンド叩くのがめんどくさいので、バッチにまとめてスタートアップに置きことにしました。

@echo off
REM 拡張機能一覧を置いてあるディレクトリ
cd "C:\Users\hoge\vs_extension"
code --list-extensions > extension_list.txt

REM 拡張機能一覧を更新するのを待つ
timeout /t 15

REM 前回のコミットとの差分を取得
REM 変数は毎回初期化しないと、次にバッチを実行したときに前回の値が残ってしまう
set diff=
FOR /F %%i in ('git diff') do set diff=%%i

REM 差分が出ていればコミット
REM コミットメッセージには差分をそのまま使用
REM 複数個の拡張機能に変更を加えていても一つしかコミットメッセージに表示されないので注意
if not "%diff%" == "" (
    git add extension_list.txt
    git commit extension_list.txt -m %diff%
) 

これで自動化できる...あれ?できてないぞ

code --list-extensions > extension_list.txt

これ以降のコマンドが全く実行されません。
原因が分からなかったので、このコマンドだけ別のバッチに分けて
スタートアップに入れました。
詳しい人、どうしてなのか教えてください。

Visual Studio Codeを拡張機能一覧の通りに構成しなおす(力尽きた)

これもバッチでできるようにしたかったのですが力尽きました。ここからは手動です。

まず入っているものをアンインストール

最終的に同じ形になっていれば、どう入力しても同じです。
一行ずつ入力するのがめんどくさいので、以下のような入力方法ででやりました。

拡張機能一覧をコピー
先頭に「code 」と入力。(スクショだと抜けていますが、スペースが必要です。)
スクリーンショット (16).png

2行目から最後まで「Ctrl+Alt+↓」でカーソルを広げる
スクリーンショット (25).png

「--uninstall-extension 」をコピー&ペースト
2019-07-07 (2).png

キーボードの「end」で行末へ移動し、スペースを入力
2019-07-07 (3).png

キーボードの「home」で行の先頭へ移動
スクリーンショット (18).png

BackSpaceで一行にする
スクリーンショット (19).png

コマンドプロンプトに貼り付けて実行

再インストール

gitで拡張機能一覧を戻したいバージョンにしてから、ほぼ同じことをします。コピー&ペーストするのが「--uninstall-extension 」の代わりに「--install-extension 」になるだけです。

やってみた感想

バッチみたいな、いかにも「私めはSIerで働かせていただいております!」って感じの技術じゃなくて、シャレオツな言語でスクリプト組めるようになりたい。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0