Windowsアプリ配布方式の選定ガイド
配布方式の選択は「どれが簡単か」ではなく、OS にどこまで触るかと更新責任を誰が持つかの選択です。
ざっくりした判断:
- OS への登録が濃い → MSI
- package identity と modern packaging → MSIX
- per-user の簡単配布と自動更新 → ClickOnce
- 置くだけ配布が最優先 → xcopy
- 更新基盤を自社で設計運用する覚悟がある → 独自 updater
5つの方式は同じ土俵ではない
MSI / MSIX / ClickOnce / xcopy は主にどう入れるかの話。独自 updater は主にどう更新責任を持つかの話。2層に分けて考えます:
| 層 | 主な候補 | 決めること |
|---|---|---|
| 初回導入 | MSI / MSIX / ClickOnce / xcopy | 配置場所、登録内容、権限、アンインストール |
| 継続更新 | MSIX / ClickOnce / 手動差し替え / 独自 updater | 更新確認、配信元、署名検証、ロールバック |
独自 updater は、既存の配布方式で足りない更新要件があるときに追加で選ぶものです。
一枚で見る判断表
| 状況 | まず選ぶもの | 理由 |
|---|---|---|
| 全ユーザー向け、サービスやCOM登録あり | MSI | Windows Installer の土俵が自然 |
| Win10/11前提、clean install、頻繁更新 | MSIX | modern packaging と更新モデル |
| .NET社内業務アプリをper-userで簡単配布 | ClickOnce | built-in 更新が使いやすい |
| 置くだけで動くツール、閉域、USB配布 | xcopy | インストールの概念を持ち込まない |
| 商用製品で更新UXを自前で握りたい | 独自 updater | built-in 更新より自由度が高い |
| ドライバが必要 | MSI 寄り | driver package は別問題 |
| in-process shell extension が必要 | MSI 寄り | MSIX と相性が悪い |
各方式の詳細
MSI
- 向いている案件: 全ユーザー向け業務アプリ、Windows サービス含む、COM 登録あり
- 強み: アプリの導入状態を Windows の流儀で表現できる
- 弱み: authoring が難しい、高頻度更新では重くなりがち
MSIX
- 向いている案件: Win10/11前提、更新頻度高め、package identity が必要
- 強み: 更新とアンインストールがきれい
- 弱み: shell extension、ドライバ、古い Win32 前提は不向き
ClickOnce
- 向いている案件: .NET 社内向け、per-user、標準ユーザーで導入
- 強み: built-in 更新モデルが簡単
- 弱み: OS へ深く触るタイプには不向き
xcopy
- 向いている案件: 診断ツール、設定ツール、ログ収集、USB 配布
- 強み: 失敗の仕方が分かりやすい。フォルダごと差し替えで済む
- 弱み: スタートメニュー登録、サービス、自動更新がない
独自 updater
- 向いている案件: 更新頻度が高い、チャネル配信、段階ロールアウト制御
- 強み: 自由度が高い
- 弱み: 署名検証、再試行、ロールバック、proxy 対応、updater 自身の更新まで責任が増える
観点別の比較
| 観点 | MSI | MSIX | ClickOnce | xcopy | 独自 updater |
|---|---|---|---|---|---|
| per-user 導入 | ○ | ○ | ◎ | ◎ | ○ |
| per-machine 導入 | ◎ | ○ | △ | × | ○ |
| built-in 更新 | △ | ◎ | ◎ | × | ◎ |
| サービスとの相性 | ◎ | △ | × | × | ○ |
| ドライバとの相性 | △ | × | × | × | ○ |
| shell extension | ◎ | × | × | × | ○ |
| 閉域・オフライン | ◎ | ○ | ○ | ◎ | ◎ |
| 実装・運用コスト | ○ | ○ | ◎ | ◎ | × |
迷ったときに見る6つの質問
- そのアプリは current user だけでよいか、machine-wide か
- service / driver / shell extension / COM 登録はあるか
- package identity が必要な Windows 機能を使うか
- 標準ユーザーだけで導入したいか
- 更新頻度は月次か、週次か、もっと高いか
- 対象環境は閉域か、OS バージョンは揃っているか
まとめ
- 初回導入をどう成立させるかと継続更新を誰が責任を持って回すかを分けて決める
- driver / shell extension / service があるなら、OS 統合の方式から決まる
- 独自 updater は最後の切り札であり、最初の選択肢ではない
- 閉域では賢さより単純さが勝つことが多い
迷ったら、まず per-user か per-machine か、OS へ何を登録するか、更新頻度はどのくらいかの3つを固定しましょう。
参考資料
- Microsoft Learn, Windows Installer
- Microsoft Learn, What is MSIX?
- Microsoft Learn, Packaging overview for Windows apps
- Microsoft Learn, MSIX features and supported platforms
- Microsoft Learn, App Installer file overview
- Microsoft Learn, Prepare to package a desktop application
- Microsoft Learn, Know your installer
- Microsoft Learn, Convert an installer that includes services
- Microsoft Learn, ClickOnce deployment and security
- Microsoft Learn, Manage updates for a ClickOnce application
- Microsoft Learn, Choosing a ClickOnce deployment strategy
- Microsoft Learn, ClickOnce cache overview
- Microsoft Learn, Windows App SDK deployment guide for self-contained apps
関連する記事
同じタグを共有する最新の記事です。さらに近い話題で知識を深められます。
Windowsで「Windows によって PC が保護されました」が出る理由
Windowsアプリ配布時にSmartScreen警告が出る理由を、コード署名、EV/OV証明書、Azure Artifact Signing、MSIX、Microsoft Store、ClickOnce、社内配布、App Controlまで実務目線で整理します。
ClickOnce 入門:配布・更新・選定基準
ClickOnce の仕組みと向き不向きを実務目線で整理します。マニフェスト、自動更新、キャッシュ分離、署名、配布経路の注意点に加え、社内業務アプリで強い理由と MSI/MSIX が適するケースの見分け方が分かります。
自動アップデートのセキュリティ設計
Windows アプリの自動アップデートを単なる便利機能ではなく信頼境界として設計するための要点を整理します。HTTPS だけでは守れない理由、署名付き metadata、クライアント側検証、鍵分離、fail-closed と rollback まで一通り把握できます。
Windows管理者特権の必要/不要の境界
Windowsで管理者特権が必要になる場面を、UAC、保護領域、サービス、ドライバ、per-user/per-machine 配布の観点で整理し、無駄な昇格を減らす設計の見分け方と典型例、よくある誤解までを実務向けにまとめます。
Windowsシングルバイナリ化の限界と実践
Windows アプリを 1 EXE にしたいときの「配布物を 1 個にする」と「OS 依存を消す」の違いを、.NET、C++、WebView2、WinUI、サービス、ドライバまで段階別に整理し、技術選定と配布設計の判断軸が分かります。
関連トピック
このテーマと近いトピックページです。記事を起点に、関連するサービスや他の記事へ進めます。
Windows技術トピック
Windows 開発、不具合調査、既存資産活用の技術トピックをまとめた入口です。
このテーマがつながるサービス
この記事は次のサービスページにつながります。近い入口からご覧ください。
Windowsアプリ開発
業務アプリ、装置連携、通信ツールなどの Windows ソフト開発を支援します。
既存Windowsソフトの改修・保守
既存 Windows ソフトの機能追加、保守、段階的モダナイゼーションを支援します。