パンの木を植えて

主として数学の話をするブログ

VSCodeでワークスペースの拡張機能を同僚などと共有したいとき,どうするか?

\[ %%% 黒板太字 %%% \newcommand{\A}{\mathbb{A}} %アフィン空間 \newcommand{\C}{\mathbb{C}} %複素数 \newcommand{\F}{\mathbb{F}} %有限体 \newcommand{\N}{\mathbb{N}} %自然数 \newcommand{\Q}{\mathbb{Q}} %有理数 \newcommand{\R}{\mathbb{R}} %実数 \newcommand{\Z}{\mathbb{Z}} %整数 %%% 2項演算 %%% \newcommand{\f}[2]{ \frac{#1}{#2} } \]

こんにちは.

今日学んだことを書きます.

VSCode の拡張機能とは

私は,テキストエディタ(というかIDEかな)としてVSCodeを使っています.

VSCode はデフォルトだとあまり便利ではないのですが,無料で(たまに有料のもありますけど)配布されている拡張機能を入れることにより便利にカスタマイズできるようになっています.

VSCode の設定を共有する方法

VSCode を使っていると,自然といろんなカスタマイズをやることになります.

  • インデントのサイズとか,

  • あるいは「HTMLファイルをフォーマットするときに,属性を折り返すかどうか」とか,

様々なカスタム設定をすることになります.

そして設定を行うということは,それを共有したくなるということでもあります.

同僚と共同作業をしようとしたときに,設定をさくっと同じにできると便利ですよね.

Pythonのインタプリンタをどうするかとか,あまり違ってて欲しくないことだってあるからです.

VSCodeはかしこいので,そんなこともあろうかと便利な仕組みが用意されています.

どうすれば良いかというと,まず .vscode ディレクトリを作ります.

そして .vscode ディレクトリに settings.json というファイルを作成します.これがワークスペースの設定を記述するファイルになっています.

ですから,settings.json ファイルに設定を書き込んで,それを共有してしまえば,同僚や未来の自分とも設定が共有できるのです.

素晴らしいですね.

拡張機能に対する settings.json ファイルはあるのか

拡張機能に対しても,.vscode フォルダに extensions.json ファイルを作ることにより管理することができます.

ただ,拡張機能の場合は「ワークスペースの推奨する拡張機能」程度までしか管理できなくて,「ワークスペースの拡張機能」をそれにより全アンインストールするとか,一括インストールするといったことはできません.

これが公式ドキュメントなのですが,そういう記述ないですよね.

CLIでなんとかする

ここまでが前置きでした.

ここからが,今日学んだ内容です.

まずPowerShellを開いてください.別にターミナルであれば何であっても同様のことができるのですが,Git Bash とかだと微妙にコマンドが違うのでここで紹介する方法だとうまくいきません.PowerShell を指定することで,環境を揃えています.

そして次のコードを実行します.

code --list-extensions | % { "code --install-extension $_" }

コマンドの意味

コードの意味を説明しておきます.

まずこのコマンドは,パイプ | によって前半と後半に分かれています.パイプの前半部分の出力結果を,後半部分に渡しなさいという構造になっています.

前半部

前半の code --list-extensions というのは,VSCode にインストールされている拡張機能を,(無効にされているものも含めて)すべてリストアップしなさいという命令です.

code の部分がVSCodeでなにかしろという命令で,オプションの --list-extensions が拡張機能を一覧にせよという意味を持ちます.

後半部

後半の % { "code --install-extension $_" } というのは,code --install-extension の後に続けて,パイプで渡された値を代入して出力しなさいと言っています.

たとえば code --list-extensions の結果が hoge.fuga-manager であれば,出力されるのは code --install-extension hoge.fuga-manager です.

中にある $_ ですが,これは「パイプで渡された値」を表す自動変数です.いちおうドキュメントのリンクを貼っておきますね.

そして括弧 { } ですが,これは中の式を文字列としてそのまま表示する機能を持ちます.

最後に % ですが,これは何かというと,「複数ある要素のそれぞれについて,以下を実行する」みたいな命令です.なお % ではなく foreach-object と書いても同じです.foreach-object と書いた方がわかりやすいかもしれませんね.

生成される式

上記コマンドにより,インストールされている拡張機能のそれぞれに対して code --install-extension を頭につけたテキストが出力されます.

code --install-extension hoge.fuga-managerhoge.fuga-manager というIDを持つ拡張機能をインストールしなさいという命令になっているので,それを powershell で実行すれば拡張機能をインストールすることができます.

まとめ

ですから拡張機能を何か削除したり追加したりするごとに code --list-extensions | % { "code --install-extension $_" } を実行してその結果を .vscode ディレクトリにでも .ps1 拡張子をつけて保存しておけば,同僚や未来の自分はすぐさま当時使っていたすべての拡張機能をインストールすることができます.

リストにない全部の拡張機能をアンインストールするか無効にすることが必要な気もしますが,まあいいでしょう.

コマンドひとつでインストールできるようになったわけですから,解決したといってもいいのでは?


2022年12月29日 追記

この記事を書いた当時,シェルスクリプト(特にPowerShell)がマイブームだったのでそれを使おうとして無茶なことをやっていますね.

もっと良い解決策がありまして,単に .devcontainer ディレクトリを作業フォルダの中に作ってそこに設定ファイルを置けばよいです.

code.visualstudio.com

同僚もVSCodeを使っているなら,これでワークスペースごとに拡張機能を共有することができます.