WinUIでアプリが完成したら、次は「人に配る」段階です。ところが、ビルドした .exe をそのまま渡しても、まず動きません。依存ランタイムやインストール体験、そして署名——配布には固有の作法があります。私も最初、exeを渡して「起動しない」と言われて初めて、この壁に気づきました。
この記事では、WinUIアプリの標準的な配布形式 MSIX を軸に、パッケージ化・署名・配布の全体像を整理します。細かな手順よりも「何が必要で、どう選ぶか」を掴むための概要です。基礎はWinUI入門記事、開発全体の流れはデスクトップアプリ開発チェックリストも参照してください。
Table of contents
Open Table of contents
MSIXとは
MSIX は、Windowsのモダンなアプリ配布・インストール形式です。従来のインストーラ(MSIやセットアップexe)に比べ、次の利点があります。
- クリーンなインストール/アンインストール(レジストリを汚さない)
- 依存関係を同梱でき、環境差で動かない問題を減らせる
- 自動更新の仕組みに対応できる(→ WinUIアプリに自動更新を入れる)
- Microsoft Storeでの配布にそのまま使える
WinUIアプリは基本的にこのMSIXで配布します。
配布に必要な3要素
配布は、大きく次の3ステップで考えると整理できます。
- パッケージ化 … アプリを
.msixファイルにまとめる - コード署名 … 証明書で署名する(MSIXは署名が必須)
- 配布 … サイドロード or Microsoft Store でユーザーに届ける
順に見ていきます。特に2の署名は、初心者が必ずつまずくポイントです。
なぜコード署名が必要か
MSIXは、署名されていないとインストールできません。 これはセキュリティのためで、「このアプリが誰によって作られ、改ざんされていないか」を保証する仕組みです。
署名に使う証明書は、用途で変わります。
- 開発・テスト中 … 自分で作る自己署名証明書でOK。ただし、その証明書をPCに「信頼」させる必要があります
- 本番配布(サイドロード) … 本来は正規の認証局(CA)が発行した証明書が望ましい
- Microsoft Store配布 … 自分での署名は不要(Storeが署名してくれる)
つまり「Storeで配るなら署名は気にしなくてよい/自分で配るなら署名と信頼が要る」と覚えておくと分かりやすいです。
パッケージ化と署名の流れ(概要)
手段は2つあります。Visual Studioのメニュー(「プロジェクト」メニュー → 「公開」 →「アプリパッケージの作成」)から画面操作で作る方法と、コマンドで作る方法です。ここではコマンドの流れを、最小の例で示します(winapp CLIを使う場合)。
# 1. リリースビルド
.\BuildAndRun.ps1 /p:Configuration=Release -SkipRun
# 2. 開発用の証明書を作る(マニフェストのPublisherに自動一致)
winapp cert generate --manifest .
# 3. 証明書をPCに信頼させる(管理者権限が必要・一度だけ)
winapp cert install ./devcert.pfx
# 4. パッケージ化+署名(.msix が作られる)
winapp package <ビルド出力フォルダ> --cert ./devcert.pfx
できあがった .msix は、ダブルクリックか次のコマンドでインストールできます。
Add-AppxPackage ./MyApp.msix
配布方法の選び方
作った .msix を、どうユーザーに届けるか。主な選択肢は2つです。
サイドロード(自分で配る)
.msix を直接渡す、または App Installer を使ってWebサイトからインストール&自動更新させる方法です。手軽ですが、利用者側で証明書を信頼する手間が発生します(Store外配布の宿命)。社内配布や限定公開に向きます。
Microsoft Store Partner Center に登録し、署名済みパッケージをアップロードして審査を受ける方法です。署名はStore任せにでき、ユーザーは検索して安全にインストールできます。一般公開に最適で、審査というハードルはありますが、届きやすさは随一です。
自己完結(self-contained)という選択
WinUIアプリは通常、Windows App SDKランタイムが別途必要です。ユーザー環境にそれが無いと動きません。これを避けたいときは、self-contained(自己完結)配置にして、ランタイムをアプリに同梱できます。
winapp package <ビルド出力フォルダ> --cert ./devcert.pfx --self-contained
サイズは大きくなりますが、「ランタイムが無くて動かない」問題を回避できます。配布先の環境が読めないときに有効です。
まとめ
WinUIアプリの配布は、MSIX × 署名 × 配布方法の3点で考えると迷いません。
- MSIX … Windowsのモダンな配布形式(クリーン・依存同梱・自動更新)
- 署名 … MSIXは署名必須。開発は自己署名+信頼、Storeは署名不要
- 配布 … 手軽なサイドロードか、届きやすいMicrosoft Store
- self-contained … ランタイム同梱で「動かない」を回避
まずは自己署名証明書でローカルにインストールできる所まで試すと、配布の全体像が一気に腑に落ちます。そこまで来れば、あとはStore申請やCI/CDでの自動化へ広げていけます。
