はじめに
前回の記事ではWingetの基本的な使い方についてまとめました。本記事では、最近追加された「winget configuration」について紹介します。
この機能を活用すれば、開発環境のセットアップを効率化できます。
みなさんこんにちは。新しいPCをセットアップする際や、チームメンバーの開発環境を統一する時に、面倒な作業の連続で時間を無駄にした経験はないでしょうか。
この記事では、単なるアプリインストールツールとしてのwingetの使い方を超えて、開発環境の完全自動化を実現する方法を解説します。DevContainerのようなコンテナ技術を使わなくても、Windowsネイティブで開発環境の再現性を確保する新しいアプローチをご紹介します。
wingetの進化 パッケージマネージャーから環境構築ツールへ
wingetは2020年にプレビュー版がリリースされてから着実に進化し、2023年に「1.6」がリリースされた際に「winget configuration」機能が安定版として追加されました。これはMicrosoft Build 2023で発表された機能で、開発環境のセットアップを構成ファイル(*.dsc.yaml)を使って自動化できるようになりました。
「WinGet Configuration」は、構成ファイル(*.dsc.yaml)を元に開発ツールやフレームワーク、パッケージ、アプリなどをセットアップする仕組みです。これまで数時間、数日かかっていた複雑な作業を、コマンドを一発実行するだけで無人で完了できる信頼性の高さが特徴です。
この機能の意義は非常に大きく、Visual Studio Codeのような複雑な開発環境も設定ファイル一つで構築できるようになりました。
従来のwinget exportとimportの限界
従来のwinget export/importでもある程度の環境移行は可能でしたが、いくつかの課題がありました。
- インストールされているアプリの単純なリストしか扱えない
- バージョン指定が煩雑
- アプリの設定や構成までは管理できない
- 依存関係の管理が完全ではない
Wingetでは、exportサブコマンドを使うことで、そのマシンにインストールされているアプリケーションのうち、Wingetでインストール可能なプログラムのリストをJSON形式で出力することができます。しかし、引っ越し元でexportする場合にバージョン情報を付けること、importするときにバージョン情報に従うか無視するかの選択肢しかありません。
また、exportで出力されるJSONファイルには不要なプログラムも含まれてしまう問題もあります。Wingetは、export時には依存関係で入ったプログラムなのかどうかを区別していないため、たとえば、C/C++のランタイムはすべて見つけ出し、wingetでインストール可能なものはexportコマンドで出力します。
winget configurationの革新性
winget configurationは、こうした課題を解決し、より高度な環境構築を実現します。
主な特徴
- 宣言的な構成管理: YAMLファイルで環境を定義
- アプリケーションの自動インストール: パッケージの一括インストール
- 構成の自動適用: アプリケーションのインストールだけでなく、設定も自動化
- アイドルポテンシャル: 実行中に他の作業ができる(無人インストールが可能)
- 再現性の確保: 同じ設定ファイルから常に同じ環境を構築可能
- バージョン管理の容易さ: 構成ファイルをGitで管理可能
特に注目すべきは、Microsoft公式のプロジェクトで使用されている点です。たとえば、Visual Studio CodeやPowerToysのソースコードをコンパイルする環境を構築するには、GitHubで公開されている「configuration.dsc.yaml」を利用できます。この技術は「Dev Home」でも活用されており、アプリ開発環境を数クリックで構築できる利便性があります。
実践的な活用法:チーム開発環境の標準化
以下に、winget configurationを使った実践的な活用例を示します。
1. 基本的な構成ファイルの作成
まず、以下のような最小限のdev-environment.dsc.yaml
ファイルを作成します:
# dev-environment.dsc.yaml
properties:
resources:
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: VSCode
properties:
id: Microsoft.VisualStudioCode
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Git
properties:
id: Git.Git
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Node
properties:
id: OpenJS.NodeJS.LTS
source: winget
2. 構成の適用方法
上記のファイルを作成したら、以下のコマンドで環境を構築します。
winget configure dev-environment.dsc.yaml
このコマンド一発で、VSCode、Git、Node.jsがインストールされ、基本的な開発環境が整います。
3. より高度な構成例
以下は、フロントエンド開発チーム向けの構成ファイル例です。
# frontend-team.dsc.yaml
properties:
resources:
# 開発ツール
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: VSCode
properties:
id: Microsoft.VisualStudioCode
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Git
properties:
id: Git.Git
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Node
properties:
id: OpenJS.NodeJS.LTS
source: winget
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Chrome
properties:
id: Google.Chrome
source: winget
# VSCode拡張機能設定
- resource: Microsoft.VisualStudio.Code.DSC/Extension
dependsOn:
- VSCode
id: ESLint
properties:
extensionId: dbaeumer.vscode-eslint
- resource: Microsoft.VisualStudio.Code.DSC/Extension
dependsOn:
- VSCode
id: Prettier
properties:
extensionId: esbenp.prettier-vscode
# Git設定
- resource: Microsoft.Windows.DSC/PowerShellScript
dependsOn:
- Git
id: GitConfig
properties:
scriptContent: |
git config --global core.autocrlf true
git config --global pull.rebase false
実際の業務での活用シナリオ
1. 新メンバーオンボーディングの効率化
新しいチームメンバーが入社した際、以下のようなプロセスでスムーズなオンボーディングを実現できます:
- チームの標準構成を
team-env.dsc.yaml
として管理 - 新メンバーのPCセットアップ時に
winget configure team-env.dsc.yaml
を実行 - 開発者は環境構築を待つ間に他のオンボーディング作業に集中できる
2. プロジェクト固有の開発環境
プロジェクトごとに異なる開発環境が必要な場合も対応可能です。
- プロジェクトリポジトリのルートに
.devconfig/project.dsc.yaml
を配置 - READMEに環境セットアップ手順として
winget configure .devconfig/project.dsc.yaml
を記載 - 開発者がプロジェクトに参加する際、コマンド一発で環境構築
3. CI/CD環境の標準化
テスト用VMやCI/CD環境でも同じ構成ファイルを使用することで、「開発環境では動くのに本番では動かない」問題を軽減できます。
既存のexport/importコマンドとの連携
既存の環境から新しい構成ファイルを作成するには、まず従来のexportコマンドで出力したJSONを参考にすることも可能です。
# 既存環境の出力
winget export -o current-apps.json --include-versions
# 出力されたJSONを参考に新しい構成ファイルを作成
# (現時点では自動変換機能はないため手動で作成が必要)
なお、GitHub上では自動変換を可能にする機能が検討されています。これにより、JSONファイルからYAML構成ファイルへの変換が容易になる可能性があります。
セキュリティと注意点
wingetのパッケージは基本的に信頼性が高いものの、実務での利用にあたっては以下の点に注意が必要です。
Wingetのリポジトリは、GitHubにて管理されていますが、ここで管理されている情報(マニフェスト)は、どのソフトウェアのインストーラーがどこのURLにあるかという情報です。このマニフェストは誰でもプルリクエストを送ることができます(そのソフトウェアに関係のない第三者でも)。
セキュリティを重視する場合は、以下の対策を検討しましょう。
- 社内プライベートリポジトリの構築
- インストール前の確認プロンプトを有効にする
- 特に重要なアプリケーションは公式サイトからの手動インストールを検討
最新バージョン情報とアップデート方法
2025年5月現在、wingetの最新バージョンは1.8.1911となっています。インストールや更新は以下の方法で行えます。
winget コマンドのバージョンは、winget -v
コマンドで確認可能です。現時点では、Microsoft.DesktopAppInstaller のバージョン 1.8.1911 が最新版として公開されていますので、こちらのバージョンをダウンロードする手順をご紹介します。
PowerShellから以下のコマンドで最新版をインストールできます。
# 最新バージョンのダウンロードとインストール
Invoke-WebRequest -Uri https://github.com/microsoft/winget-cli/releases/download/v1.8.1911/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -OutFile winget.msixbundle -UseBasicParsing
Add-AppxPackage -Path winget.msixbundle
Remove-Item winget.msixbundle
応用例:特定技術スタック向けの構成ファイル
以下に、いくつかの主要な技術スタック向けの構成ファイル例を示します。これらはチーム内で共有し、カスタマイズして使用できます。
React開発環境
# react-dev.dsc.yaml
properties:
resources:
# 基本開発ツール
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: VSCode
properties:
id: Microsoft.VisualStudioCode
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Git
properties:
id: Git.Git
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Node
properties:
id: OpenJS.NodeJS.LTS
# ブラウザ
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Chrome
properties:
id: Google.Chrome
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Edge
properties:
id: Microsoft.Edge
# VSCode拡張機能
- resource: Microsoft.VisualStudio.Code.DSC/Extension
dependsOn:
- VSCode
id: ESLint
properties:
extensionId: dbaeumer.vscode-eslint
- resource: Microsoft.VisualStudio.Code.DSC/Extension
dependsOn:
- VSCode
id: Prettier
properties:
extensionId: esbenp.prettier-vscode
- resource: Microsoft.VisualStudio.Code.DSC/Extension
dependsOn:
- VSCode
id: ReactSnippets
properties:
extensionId: dsznajder.es7-react-js-snippets
# React開発環境のセットアップ
- resource: Microsoft.Windows.DSC/PowerShellScript
dependsOn:
- Node
id: SetupCRA
properties:
scriptContent: |
npm install -g create-react-app
npm install -g yarn
.NET開発環境
# dotnet-dev.dsc.yaml
properties:
resources:
# 基本開発ツール
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: VSCode
properties:
id: Microsoft.VisualStudioCode
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: VisualStudio
properties:
id: Microsoft.VisualStudio.2022.Community
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: Git
properties:
id: Git.Git
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: DotNet
properties:
id: Microsoft.DotNet.SDK.8
# VSCode拡張機能
- resource: Microsoft.VisualStudio.Code.DSC/Extension
dependsOn:
- VSCode
id: CSharp
properties:
extensionId: ms-dotnettools.csharp
# 開発ツール
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: AzureDataStudio
properties:
id: Microsoft.AzureDataStudio
- resource: Microsoft.WinGet.DSC/WinGetPackage
id: SSMS
properties:
id: Microsoft.SQLServerManagementStudio
まとめと今後の展望
winget configurationは、Windows環境での開発セットアップの自動化において革新的な進化を遂げました。DevContainerのようなコンテナ技術に頼らなくても、ネイティブなWindows環境で再現性の高い開発環境を構築できるようになっています。
今後の展望としては
- より多くの公式構成テンプレートの登録
- VSCode拡張機能やDevContainerとの連携強化
- サードパーティアプリの設定自動化の拡充
Windows開発環境の構築自動化を検討している方は、ぜひwinget configurationを試してみてください。一度構成ファイルを作成すれば、何度でも同じ環境を再現でき、チーム全体の生産性向上につながります。
参考リンク
- Microsoft公式ドキュメント - winget configuration
- GitHub - microsoft/winget-cli
- Windows Package Manager 1.6 リリースノート
この記事が皆さんの開発環境構築の効率化に役立てば幸いです。質問やフィードバックがあれば、コメント欄にお寄せください。