こんにちは.
今日学んだことを書きます.
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-manager
は hoge.fuga-manager
というIDを持つ拡張機能をインストールしなさいという命令になっているので,それを powershell で実行すれば拡張機能をインストールすることができます.
まとめ
ですから拡張機能を何か削除したり追加したりするごとに code --list-extensions | % { "code --install-extension $_" }
を実行してその結果を .vscode
ディレクトリにでも .ps1
拡張子をつけて保存しておけば,同僚や未来の自分はすぐさま当時使っていたすべての拡張機能をインストールすることができます.
リストにない全部の拡張機能をアンインストールするか無効にすることが必要な気もしますが,まあいいでしょう.
コマンドひとつでインストールできるようになったわけですから,解決したといってもいいのでは?
2022年12月29日 追記
この記事を書いた当時,シェルスクリプト(特にPowerShell)がマイブームだったのでそれを使おうとして無茶なことをやっていますね.
もっと良い解決策がありまして,単に .devcontainer
ディレクトリを作業フォルダの中に作ってそこに設定ファイルを置けばよいです.
同僚もVSCodeを使っているなら,これでワークスペースごとに拡張機能を共有することができます.