WinGet の構成

プロジェクトに必要なローカル開発環境は統一したいです。

ですが、プロジェクトの初期はともかく、プロジェクトが進行していくと、メンバーが増えたり入れ替わったりして、ローカル開発環境は統一を失っていきます。

そこで、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

assertionsresources内のresourceに記述できるパラメータを探します。

winget の構成はPowershell DSCに依存しています。assertionsresources内の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のパラメータの後半部分になります。

https://www.powershellgallery.com/packages/Microsoft.WinGet.DSC/1.8.1911-alpha/Content/Microsoft.WinGet.DSC.psm1

settings

assertionsresources内のsettingsに記述できるパラメータを探します。

Microsoft.WinGet.DSCのページのFileListから拡張子がpsm1のファイルを開き、このファイル内にあるresourceに指定したクラス内からDscProperty()属性のついたフィールドを探します。このフィールド名がsettings内のキーになります。そして、このキーに対応して値が記述できます。

https://www.powershellgallery.com/packages/Microsoft.WinGet.DSC/1.8.1911-alpha/Content/Microsoft.WinGet.DSC.psm1

任意のWinget構成ファイルを記述する

Microsoft.Windows.Developerモジュールを使用してWindowsの状態をチェックします。

次の例では、アサーションでWindowsのバージョンをチェックしています。resourcesettingsに記述するべきパラメータがわかったので、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構成を記述したければ、ソースコードを読む必要があります。

執筆担当者プロフィール
浅井 敏之

浅井 敏之(日本ビジネスシステムズ株式会社)

C#/.Net のアプリケーション開発 および 開発環境構築を担当しています.

担当記事一覧