1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

winget configurationを使ってWindows開発環境を一瞬で構築する

Posted at

はじめに

前回の記事では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でもある程度の環境移行は可能でしたが、いくつかの課題がありました。

  1. インストールされているアプリの単純なリストしか扱えない
  2. バージョン指定が煩雑
  3. アプリの設定や構成までは管理できない
  4. 依存関係の管理が完全ではない

Wingetでは、exportサブコマンドを使うことで、そのマシンにインストールされているアプリケーションのうち、Wingetでインストール可能なプログラムのリストをJSON形式で出力することができます。しかし、引っ越し元でexportする場合にバージョン情報を付けること、importするときにバージョン情報に従うか無視するかの選択肢しかありません。

また、exportで出力されるJSONファイルには不要なプログラムも含まれてしまう問題もあります。Wingetは、export時には依存関係で入ったプログラムなのかどうかを区別していないため、たとえば、C/C++のランタイムはすべて見つけ出し、wingetでインストール可能なものはexportコマンドで出力します。

winget configurationの革新性

winget configurationは、こうした課題を解決し、より高度な環境構築を実現します。

主な特徴

  1. 宣言的な構成管理: YAMLファイルで環境を定義
  2. アプリケーションの自動インストール: パッケージの一括インストール
  3. 構成の自動適用: アプリケーションのインストールだけでなく、設定も自動化
  4. アイドルポテンシャル: 実行中に他の作業ができる(無人インストールが可能)
  5. 再現性の確保: 同じ設定ファイルから常に同じ環境を構築可能
  6. バージョン管理の容易さ: 構成ファイルを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. 新メンバーオンボーディングの効率化

新しいチームメンバーが入社した際、以下のようなプロセスでスムーズなオンボーディングを実現できます:

  1. チームの標準構成をteam-env.dsc.yamlとして管理
  2. 新メンバーのPCセットアップ時にwinget configure team-env.dsc.yamlを実行
  3. 開発者は環境構築を待つ間に他のオンボーディング作業に集中できる

2. プロジェクト固有の開発環境

プロジェクトごとに異なる開発環境が必要な場合も対応可能です。

  1. プロジェクトリポジトリのルートに.devconfig/project.dsc.yamlを配置
  2. READMEに環境セットアップ手順としてwinget configure .devconfig/project.dsc.yamlを記載
  3. 開発者がプロジェクトに参加する際、コマンド一発で環境構築

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にあるかという情報です。このマニフェストは誰でもプルリクエストを送ることができます(そのソフトウェアに関係のない第三者でも)。

セキュリティを重視する場合は、以下の対策を検討しましょう。

  1. 社内プライベートリポジトリの構築
  2. インストール前の確認プロンプトを有効にする
  3. 特に重要なアプリケーションは公式サイトからの手動インストールを検討

最新バージョン情報とアップデート方法

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環境で再現性の高い開発環境を構築できるようになっています。

今後の展望としては

  1. より多くの公式構成テンプレートの登録
  2. VSCode拡張機能やDevContainerとの連携強化
  3. サードパーティアプリの設定自動化の拡充

Windows開発環境の構築自動化を検討している方は、ぜひwinget configurationを試してみてください。一度構成ファイルを作成すれば、何度でも同じ環境を再現でき、チーム全体の生産性向上につながります。

参考リンク


この記事が皆さんの開発環境構築の効率化に役立てば幸いです。質問やフィードバックがあれば、コメント欄にお寄せください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?