WinGet 構成 (DSC) を使用してソフトウェアと設定の展開を自動化する方法

WinGet と DSC を使って Windows 構成を設定したり調整したりするのは、特に自動化したり複数のマシンを同期させようとしている場合は、なかなか面倒です。YAML ファイルを使ってアプリのインストール、削除、レジストリ編集を試したことがあるかもしれませんが、実際に変更を適用したりテストしたりする際に、何かを壊さずに行う方法について行き詰まっているのではないでしょうか。構文やコマンドの癖、あるいは構成が実際に期待通りに動作しているかどうかわからないことなど、特に面倒なことが時々あります。ここでの目標は、WinGet を使って宣言型構成をプッシュするためのある程度信頼性の高い方法を実現することです。つまり、毎回クリックするのではなく、コードを使って環境を管理するようなものです。

WinGetとDSCを使ってWindowsの設定を管理する方法

方法 1: DSC 対応の WinGet 構成コマンドを実行する

自動化に本格的に取り組みたいなら、WinGet はバージョン 1.6.2631 から DSC (Desired State Configuration) のサポートを開始しました。*ネタバレ* つまり、YAML ファイルでシステムの構成を定義し、あとは WinGet に任せることができるということです。Windows に「Firefox、Notepad++、PowerToys がインストールされているか確認して、7-Zip は削除してね」と指示するようなものです。しかも、すべて一発で完了します。

まず、WinGetが最新のバージョン、または少なくともバージョン1.6.2631以降であることを確認してください。古いバージョンはDSCをサポートしていません。まだDSCサポートを有効にしていない場合は、以下を実行してください。

winget configure --enable

さて、何かを適用する前に、YAML構文を検証することをお勧めします。YAMLファイルはインデントとスペースに大きく依存しています。タブのせいでエラーになるのは誰も望んでいません!構文をチェックするには、次のようにします。

winget configure validate winget_configure_dsc_sample_win11.yaml

これにより、YAML が整形式かどうかがわかります。インデントエラーがある場合は修正してください。設定によっては、YAML が正しくない場合に検証ステップが失敗し、修正後に正常に動作するという、少々不安定な動作になることがあります。

設定の適用

ファイルの準備ができたら、実際に設定を展開します。これは、YAML仕様に基づいて「Windowsに動作をまとめるように指示する」と考えてください。以下を実行してください。

winget configure --file winget_configure_dsc_sample_win11.yaml --accept-configuration-agreements

このコマンドはYAMLを読み取り、アプリをインストールまたは削除し、レジストリ設定を調整し、さらにはWindowsの機能も記述通りに調整します。ConfigurationRemotingServer.exeプロセスが開始され、宣言されたすべての変更が適用され、実行内容のログが表示されます。とてもクールだと思いませんか?

何も変更せずに現在の設定がYAMLと一致しているかどうかを確認したい場合は、ドライラン(検査のようなもの)を実行してください。コマンドは以下のようになります。

winget configure test -f winget_configure_dsc_sample_win11.yaml --accept-configuration-agreements

システムがまだ YAML に準拠していない場合は、「システムは記述された構成状態ではありません」というメッセージが表示されます。つまり、まだ設定されていませんが、次回の完全デプロイ実行時に修正されます。

その他のヒント: 外部 YAML ファイルとアプリ ID の使用

さらに自動化したいですか?YAML 構成を GitHub などの外部サイトでホストできます。URL を指定するだけです。

winget configure --accept-configuration-agreements --disable-interactivity -f https://raw.githubusercontent.com/yourrepo/yourconfig.yaml

これにより、複数のマシンへの自動デプロイがはるかに簡単になります。手動でコピーする必要はありません。YAML のインデントが正しいことを確認してください。特にアプリ ID やレジストリの変更を参照する場合は注意が必要です。

たとえば、Microsoft Store から PowerToys アプリ ID を見つけるには、次のコマンドを実行します。

winget show powertoys -s msstore

アプリを名前で検索するには:

winget search appname

または、インストールされているアプリを一覧表示します。

winget list

これは、アプリのインストール/削除には正確なアプリ ID またはパッケージ名が必要になるため、YAML ファイルを作成するときに役立ちます。

いくつかの注意点と最後のメモ

YAMLはインデントに敏感です。スペースのみを使用し、タブは使用しないでください。一部のマシンでは、設定を初めて適用する際にエラーが発生することがありますが、再起動または再試行すると正常に動作する場合もあります。もちろん、表示されるログを確認してトラブルシューティングを行い、変更内容を確認してください。

この設定は完璧ではありませんが、Windows環境を大規模環境でもワークステーション専用でも、思い通りに動作させるための非常に洗練された方法です。ただし、YAMLが正確であることをある程度前提としていることを忘れないでください。大規模な変更を行う前に、まずは小さな構成でテストすることをお勧めします。

まとめ

  • DSCをサポートするには、WinGetを少なくとも1.6.2631に更新してください。
  • DSCサポートを有効にするにはwinget configure --enable
  • YAMLファイルを検証するにはwinget configure validate
  • 設定を適用するwinget configure --file yourfile.yaml
  • `winget show` と `winget search` を使用してアプリと ID を検索します
  • オプションで、自動化のために構成をオンラインでホストします
  • YAMLのインデントとログに注意する

まとめ

このプロセス全体は最初は少し面倒かもしれませんが、一度慣れてしまえば、Windowsのセットアップを自動化する非常に優れた方法になります。YAML設定、特にDSCを使用すると、何度もクリックすることなく、環境を宣言的に繰り返し制御できます。なぜか時々少し不安定に感じることがありますが、まあ、Windowsですからね。こういう癖は好きにさせてください。これが誰かのワークフローの効率化、あるいは少なくとも数時間の手間の節約になることを願っています。