知識マップ: Windowsアプリの1ファイル配布 - シングルバイナリとOS依存の限界
記事「Windowsアプリの1ファイル配布 - シングルバイナリとOS依存の限界」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsアプリは配布物を1個のEXEへ寄せること自体はかなり可能で、.NETのself-containedやsingle-file・Native AOT、C/C++の静的リンク(/MT)が使えるが、OSバージョンやアーキテクチャ、システムDLL、セキュリティモデルへの依存は残り、対象Windowsへの依存をゼロにはできない。self-containedとframework-dependentは排他的な選択肢で、Native AOTは実質single-fileとして動く代わりに組み込みCOMなどが使えなくなる。WebView2はEvergreenかFixed Versionかでランタイムの提供方法を選ぶ必要があり、WinUI 3はpackaged(MSIX)かunpackagedかでPublishSingleFileの可否が変わる。Shell拡張やドライバーは登録・署名の設計が本題になるため、無理に1EXEへ圧縮するよりapp-local配布のほうが保守しやすいことが多い。
flowchart LR
accTitle: Windowsアプリのシングルバイナリ化の知識マップ
accDescr: 配布物を1個にすることとOSへの依存を消すことが別の軸であること、.NETとC/C++それぞれの単一ファイル化手段、WebView2やWinUI 3のようなホスト統合が配布方式そのものを制約することを示す図
single_binary_packaging["シングルバイナリ化(1ファイル配布)"]
windows_os_dependency["対象Windowsへの依存"]
self_contained_deployment["self-contained発行"]
framework_dependent_deployment["framework-dependent発行(.NET)"]
native_aot["Native AOT"]
builtin_com_interop["built-in COM interop"]
single_file_publish["single-file発行(.NET)"]
static_linking_crt["CRTの静的リンク(/MT)"]
dynamic_linking_crt["CRTの動的リンク(/MD)"]
vc_redistributable["Visual C++ 再頒布可能パッケージ"]
ucrt["UCRT(Universal C Runtime)"]
msix_packaging["MSIXパッケージング(packaged)"]
winui3["WinUI 3 / Windows App SDK"]
webview2["Microsoft Edge WebView2"]
webview2_runtime["WebView2 Runtime"]
webview2_evergreen["Evergreen配布モード(WebView2)"]
webview2_fixed_version["Fixed Versionランタイム"]
shell_extension["シェル拡張(エクスプローラー拡張)"]
com["COM(コンポーネントオブジェクトモデル)"]
driver_signing["ドライバー署名"]
driver_package["ドライバーパッケージ"]
app_local_deployment["app-local配布(アプリ隣接配布)"]
single_binary_packaging -->|"前提とする"| windows_os_dependency
self_contained_deployment -->|"両立しない"| framework_dependent_deployment
native_aot -->|"両立しない"| builtin_com_interop
single_file_publish -.->|"前提とする"| windows_os_dependency
native_aot -.->|"前提とする"| windows_os_dependency
static_linking_crt -->|"両立しない"| dynamic_linking_crt
dynamic_linking_crt -->|"前提とする"| vc_redistributable
static_linking_crt -->|"利用する"| ucrt
dynamic_linking_crt -->|"利用する"| ucrt
msix_packaging -.->|"両立しない"| single_file_publish
winui3 -.->|"利用する"| msix_packaging
webview2 -->|"前提とする"| webview2_runtime
webview2_runtime -->|"で構成できる"| webview2_evergreen
webview2_runtime -->|"で構成できる"| webview2_fixed_version
webview2_evergreen -->|"両立しない"| webview2_fixed_version
shell_extension -->|"利用する"| com
driver_signing -->|"前提とする"| driver_package
driver_package -->|"用いるのは非推奨"| single_binary_packaging
app_local_deployment -->|"推奨される対応"| single_binary_packaging
self_contained_deployment -.->|"前提とする"| windows_os_dependency
single_binary_packaging -.->|"利用する"| static_linking_crt
webview2 -.->|"前提とする"| windows_os_dependency
概念間の関係(全22件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- シングルバイナリ化(1ファイル配布)は対象Windowsへの依存を前提とします。
- self-contained発行はframework-dependent発行(.NET)と両立しません。
- Native AOTはbuilt-in COM interopと両立しません。
- single-file発行(.NET)は対象Windowsへの依存を前提とします。
- Native AOTは対象Windowsへの依存を前提とします。
- CRTの静的リンク(/MT)はCRTの動的リンク(/MD)と両立しません。
- CRTの動的リンク(/MD)はVisual C++ 再頒布可能パッケージを前提とします。
- CRTの静的リンク(/MT)はUCRT(Universal C Runtime)を利用します。
- CRTの動的リンク(/MD)はUCRT(Universal C Runtime)を利用します。
- MSIXパッケージング(packaged)はsingle-file発行(.NET)と両立しません。
- WinUI 3 / Windows App SDKはMSIXパッケージング(packaged)を利用します。
- Microsoft Edge WebView2はWebView2 Runtimeを前提とします。
- WebView2 RuntimeはEvergreen配布モード(WebView2)で構成できます。
- WebView2 RuntimeはFixed Versionランタイムで構成できます。
- Evergreen配布モード(WebView2)はFixed Versionランタイムと両立しません。
- シェル拡張(エクスプローラー拡張)はCOM(コンポーネントオブジェクトモデル)を利用します。
- ドライバー署名はドライバーパッケージを前提とします。
- ドライバーパッケージをシングルバイナリ化(1ファイル配布)に用いることは推奨されません。
- app-local配布(アプリ隣接配布)はシングルバイナリ化(1ファイル配布)に対する本記事の推奨です。
- self-contained発行は対象Windowsへの依存を前提とします。
- シングルバイナリ化(1ファイル配布)はCRTの静的リンク(/MT)を利用します。
- Microsoft Edge WebView2は対象Windowsへの依存を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。