初めに
VSCodeでは、機能拡張内のコンテキストメニューから、無効にする、無効にする(ワークスペース)を選ぶことができるようになっている。
これにより、複数の機能拡張をインストールしていて、また異なる種類の言語開発をしていても、該当するフォルダやワークスペース単位に、必要とする機能拡張のみを有効化することができる。
新しいプロジェクトを新規フォルダで立ち上げる際に、既存のフォルダの機能拡張の有効化、無効化を流用したいという欲求が強くなってきた。
ワークスペースの無効化については、キー割り付けされているわけではないので、個別に無効化にするのが地味に手間だったから。
機能拡張の有効・無効を管理する機能拡張
まず、有効・無効を管理する機能拡張があるかどうか調べたのだが、それ自体はなかった。
ただ、インストールされている機能拡張を一時的に削除したりして、疑似的に有効化・無効化を引き継げるようなものがあったのだが、こちらはそのファイルの追加・削除に時間がかかるのと、インストールされている機能拡張が消えるようなイメージになり、仕様としてどうなのか疑問に思ったので、使用することを取りやめた。
機能拡張の有効・無効を管理する場所は
次に、機能拡張を有効・無効を管理するものはどこなのか調べた。
この情報は、フォルダ・ワークスペースに関連付けれられているものになるのだが、フォルダ直下の.vscodeフォルダや、ワークスペースファイル中には保存されていない。
ではどこかというと、以下のフォルダの下のファイル中だった。
%APPDATA%/Code/User/workspaceStorage
このフォルダは、VSCodeで開いた時に一時的に作成される管理データを保存するフォルダになり、この下にUUID的なコードもしくは13ケタの数値のフォルダが作成され、その下にデータベース等が作られるようになる。
UUID的なコードのフォルダ名は、VSCodeでフォルダやワークスペースで開いたときに作成されるもので、13ケタの数値フォルダは単体ファイルの場合のようだ。
- 捕捉
このフォルダ、自動削除されないようなので時々削除したほうがいいらしい。
デフォルトのC++のインテリセンス用データベースがこのフォルダの下らしいので、気付かないうちにディスクを圧迫するとのこと。
このフォルダの下にstate.vscdbというファイルがあり、そこで管理している。
このファイルはSQLiteで開けることができる。
開くとこんな感じでデータが格納されており、ItemTable中にあるextensionsIdentifiers/*が拡張の有効化、無効化情報だった。
機能拡張の有効・無効を管理する方法があるのか
上の情報をもとに、この情報を管理する方法はあるのかどうか探ったのだが、結局はなかった。
state.vscdbをコピーすれば、引き継ぐことは可能ではあるのだが、workspaceStorage下のフォルダから、VSCodeで現在開いているフォルダの関連を見つけるのがとても手間なためである。
state.vscdbをVSCodeで開いたフォルダで管理できないかも調べてみたのだが、このファイルパスを生成するコードを見たところ、%APPDATA%の該当フォルダがハードコードされえているようだったので難しかった。
結果として、有効・無効の情報については、フォルダ単位に手動で設定するしかないという結論に至った。残念。
これはVSCode 1.55.2での話。
コメント