プロジェクトに必要なローカル開発環境は統一したいです。
ですが、プロジェクトの初期はともかく、プロジェクトが進行していくと、メンバーが増えたり入れ替わったりして、ローカル開発環境は統一を失っていきます。
そこで、Winget構成ファイルを使って「あるべき構成」を実現し、1つのコマンドでローカル開発環境を再現できるようにします。
https://learn.microsoft.com/ja-jp/windows/package-manager/configuration/
WinGet構成ファイルはYAMLで記述され、開発環境を構成するためにデバイスにインストールされる内容と、コンピューターとインストール済みアプリケーションの構成状態を定義します。
> winget configure configuration.dsc.yaml
Winget構成ファイルを記述する
この節では、基本的なWinget構成ファイルの記述の仕方を学びます。
https://learn.microsoft.com/ja-jp/windows/package-manager/configuration/create
構成を実行するために必要な前提条件を記述する
Winget構成ファイルを使って「あるべき構成」を実現するための前提条件を記述できます。このセクションはassertion
といいます。
次の例では、VSCodeのバージョンをチェックしています。
# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2 properties: assertions: - resource: Microsoft.WinGet.DSC/WinGetPackage directives: description: Verify min vscode version requirement allowPrerelease: true settings: id: Microsoft.VisualStudioCode version: 1.91.1 source: winget configurationVersion: 0.2.0
構成でインストールするソフトウェアを記述する
Winget構成ファイルを使って「あるべき構成」を記述できます。このセクションはresource
といいます。
次の例では、Gitをインストールします。
# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2 properties: resources: - resource: Microsoft.WinGet.DSC/WinGetPackage directives: description: Git for Windows allowPrerelease: true settings: id: Git.Git source: winget configurationVersion: 0.2.0
ソフトウェアのIDはwinget search
コマンドで調べることができます。
> winget search git 名前 ID バージョン ソース ------------------------------- Git Git.Git 2.45.2 winget
任意のWinget構成ファイルを記述する
この節では、Winget構成ファイルの記述の仕方を学びます。
resource
assertions
とresources
内のresource
に記述できるパラメータを探します。
winget の構成はPowershell DSCに依存しています。assertions
やresources
内のresource
には、powershellのpackage検索からDSC Resource
として見つけることができます。このパッケージ名がresource
のパラメータの前半部分になります。
https://www.powershellgallery.com/packages
Microsoft.WinGet.DSCは下記のURLで見つけることができます。
https://www.powershellgallery.com/packages/Microsoft.WinGet.DSC
Microsoft.WinGet.DSCのページのFileListから拡張子がpsm1のファイルを開き、このファイル内のDSCResource()
属性のついたクラスを探します。このクラス名がresource
のパラメータの後半部分になります。
settings
assertions
とresources
内のsettings
に記述できるパラメータを探します。
Microsoft.WinGet.DSCのページのFileListから拡張子がpsm1のファイルを開き、このファイル内にあるresource
に指定したクラス内からDscProperty()
属性のついたフィールドを探します。このフィールド名がsettings
内のキーになります。そして、このキーに対応して値が記述できます。
任意のWinget構成ファイルを記述する
Microsoft.Windows.Developerモジュールを使用してWindowsの状態をチェックします。
次の例では、アサーションでWindowsのバージョンをチェックしています。resource
とsettings
に記述するべきパラメータがわかったので、Microsoft Learnのサンプルと同一の記述ができるようになりました。
https://www.powershellgallery.com/packages/Microsoft.Windows.Developer/0.2.1-alpha/Content/Microsoft.Windows.Developer.psm1
https://learn.microsoft.com/ja-jp/windows/package-manager/configuration/create
# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2 properties: assertions: - resource: Microsoft.Windows.Developer/OsVersion directives: description: Verify min OS version requirement allowPrerelease: true settings: MinVersion: '10.0.22000' configurationVersion: 0.2.0
まとめ
任意のWinget構成を記述したければ、ソースコードを読む必要があります。