Windowsアプリのシングルバイナリ化の知識マップ(知識グラフ)
type: Dataset
description: 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配布のほうが保守しやすいことが多い。

シングルバイナリ化(1ファイル配布)
type: Concept
definition: アプリの配布物を実行ファイル1個にまとめて配ることを指す、Windowsアプリの配布方式。
alternative label: Single Binary
alternative label: 1EXE配布
requires: 対象Windowsへの依存

対象Windowsへの依存
type: Concept
definition: OSバージョン・CPUアーキテクチャ・システムDLL・セキュリティモデルなど、アプリが実行時に前提とする対象Windows側の要素への依存。
alternative label: OS依存
alternative label: Windows依存

self-contained発行
type: Concept
definition: アプリの実行に必要な.NETランタイム一式も一緒に配布する発行形式。
alternative label: self-contained
incompatible with: framework-dependent発行(.NET)

framework-dependent発行(.NET)
type: Concept
definition: 対象機に事前インストールされた.NETランタイムに依存する.NETの発行形態。
alternative label: Framework-Dependent Deployment

Native AOT
type: Concept
definition: .NETアプリを単一のネイティブバイナリへ事前コンパイルする発行方式。非対応リストにC++/CLIが明記されている。
alternative label: PublishAot
incompatible with: built-in COM interop

built-in COM interop
type: Concept
definition: WindowsがOS標準で提供するCOM相互運用機構。Native AOTには存在しない。
alternative label: built-in COM

single-file発行(.NET)
type: Concept
definition: 発行時に配布物を1個の実行ファイルへまとめる.NETの発行オプション。
alternative label: PublishSingleFile

CRTの静的リンク(/MT)
type: Concept
definition: MSVCでUCRT・VC++ランタイムをDLLとしてではなく実行ファイルへ静的にリンクするコンパイラオプション。
alternative label: /MT
incompatible with: CRTの動的リンク(/MD)
uses: UCRT(Universal C Runtime)

CRTの動的リンク(/MD)
type: Concept
definition: MSVCでUCRT・VC++ランタイムを対象機のDLLとして参照するコンパイラオプション。
alternative label: /MD
requires: Visual C++ 再頒布可能パッケージ
uses: UCRT(Universal C Runtime)

Visual C++ 再頒布可能パッケージ
type: Concept
definition: Visual C++で作られたアプリケーションやコンポーネントの実行に必要なランタイムDLLをまとめて配布するパッケージ。
alternative label: VC++ Redistributable
alternative label: Visual C++再頒布可能パッケージ
alternative label: vcredist

UCRT(Universal C Runtime)
type: Concept
definition: Visual Studio 2015でCランタイムが分割されてできた標準Cライブラリ部分で、Windows 10以降はOSの構成要素として同梱される。
alternative label: Universal C Runtime

MSIXパッケージング(packaged)
type: Concept
definition: package identityを持たせてアプリを配布するWindowsのパッケージング形式。
alternative label: MSIX
alternative label: packaged

WinUI 3 / Windows App SDK
type: Concept
definition: パッケージング方式(packaged/unpackaged)とランタイム方式(framework-dependent/self-contained)の組み合わせで配布要件が決まる、Windowsデスクトップアプリ向けのUIフレームワーク。
alternative label: WinUI 3
alternative label: Windows App SDK

Microsoft Edge WebView2
type: Concept
definition: Chromiumベースのランタイムを使ってWindowsアプリにWeb描画エンジンを埋め込む仕組み。WebBrowserコントロールの完全な差し替え部品ではない。
alternative label: WebView2
requires: WebView2 Runtime

WebView2 Runtime
type: Concept
definition: WebView2アプリの実行に必要な、Chromiumベースの描画エンジンを提供するランタイム。
configured by: Evergreen配布モード(WebView2)
configured by: Fixed Versionランタイム

Evergreen配布モード(WebView2)
type: Concept
definition: Microsoftが自動更新する共有のWebView2 Runtime1本を全アプリで利用させる配布モード。
alternative label: Evergreen
incompatible with: Fixed Versionランタイム

Fixed Versionランタイム
type: Concept
definition: 特定バージョンのWebView2ランタイムをアプリに同梱する配布方式。動作検証済みの構成を凍結できる一方、同梱物が250MBを超え、ブラウザーエンジンの脆弱性修正を自分のリリースで配る責任を負う。
alternative label: Fixed Version

シェル拡張(エクスプローラー拡張)
type: Concept
definition: 右クリックメニューやアイコン表示など、エクスプローラーへ組み込まれる部品。
alternative label: shell extension
alternative label: in-process shell extension
uses: COM(コンポーネントオブジェクトモデル)

COM(コンポーネントオブジェクトモデル)
type: Concept
definition: 公開インターフェース、レジストリ登録、Apartment Modelなどを土台にした、Windowsのバイナリ互換コンポーネントモデル。
alternative label: Component Object Model

ドライバー署名
type: Concept
definition: INFファイルによるインストール定義と署名を含めて成立する、Windowsドライバーの配布・インストールに必要な一連の要件。
alternative label: Driver Signing
requires: ドライバーパッケージ

ドライバーパッケージ
type: Concept
definition: デバイスドライバーをシステムへ導入するためのパッケージで、通常のアプリ配布方式とは別問題として扱われる。
alternative label: デバイスドライバーの導入パッケージ
not recommended for: シングルバイナリ化(1ファイル配布)

app-local配布(アプリ隣接配布)
type: Concept
definition: DLLをEXEと同じフォルダーに置き、そのアプリからだけ読み込ませる配布形態。
alternative label: App-Local Deployment
alternative label: xcopy配布
recommended for: シングルバイナリ化(1ファイル配布)

subject: シングルバイナリ化(1ファイル配布)
predicate: requires
object: 対象Windowsへの依存
description: 配布物を1個のEXEへ寄せても、OSバージョン・アーキテクチャ・システムDLL・セキュリティモデルへの依存は消えず、アプリの実行は対象Windowsを前提とし続ける
evidence: targeting-your-application-at-windows-8-1
verified at: 2026-08-01
certainty: established

subject: self-contained発行
predicate: incompatibleWith
object: framework-dependent発行(.NET)
description: self-containedと framework-dependentは同じ発行に対して排他的な選択肢で、RuntimeIdentifierを指定するとSelfContainedは既定でtrueになる
evidence: overview
verified at: 2026-08-01
certainty: established

subject: Native AOT
predicate: incompatibleWith
object: built-in COM interop
description: Native AOTでは動的読み込みやC++/CLIに加え、Windows上の組み込みCOMが使えなくなる
evidence: native-aot
verified at: 2026-08-01
certainty: established

subject: single-file発行(.NET)
predicate: requires
object: 対象Windowsへの依存
description: Windows向けにsingle-fileで発行する場合、出力はOS・アーキテクチャ固有になるため、最低サポートWindowsとarchを先に固定する必要がある。single-file発行自体はLinux・macOSも対象にできるので、対象Windowsへの依存が生じるのはWindowsをターゲットに選んだときに限られる。
evidence: overview
verified at: 2026-08-01
certainty: context-dependent

subject: Native AOT
predicate: requires
object: 対象Windowsへの依存
description: Native AOTも対象プラットフォームが決め打ちで、AnyCPUで1個という発想は成立しない。Native AOT自体はLinux・macOSも対象にできるので、対象Windowsへの依存が生じるのはWindowsをターゲットに選んだときに限られる。
evidence: native-aot
verified at: 2026-08-01
certainty: context-dependent

subject: CRTの静的リンク(/MT)
predicate: incompatibleWith
object: CRTの動的リンク(/MD)
description: /MTと/MDは同じコンパイル対象に対して選ぶMSVCの排他的なリンクオプションである
evidence: https://learn.microsoft.com/cpp/c-runtime-library/crt-library-features
verified at: 2026-08-01
certainty: established

subject: CRTの動的リンク(/MD)
predicate: requires
object: Visual C++ 再頒布可能パッケージ
description: /MDでリンクした実行ファイルは、対象機にUCRTとVC++ランタイムのDLLが入っていることを前提とする
evidence: https://learn.microsoft.com/cpp/c-runtime-library/crt-library-features
verified at: 2026-08-01
certainty: established

subject: CRTの静的リンク(/MT)
predicate: uses
object: UCRT(Universal C Runtime)
description: /MTはlibucrt.libなどUCRT・VC++ランタイムを実行ファイルへ静的にリンクする
evidence: https://learn.microsoft.com/cpp/c-runtime-library/crt-library-features
verified at: 2026-08-01
certainty: established

subject: CRTの動的リンク(/MD)
predicate: uses
object: UCRT(Universal C Runtime)
description: /MDはucrt.libというDLL用インポートライブラリを使い、実行時にucrtbase.dllを参照する
evidence: https://learn.microsoft.com/cpp/c-runtime-library/crt-library-features
verified at: 2026-08-01
certainty: established

subject: MSIXパッケージング(packaged)
predicate: incompatibleWith
object: single-file発行(.NET)
description: packagedなWinUI 3アプリ、および外部の場所を指すpackagedなアプリではPublishSingleFileは使えない
evidence: packaging
verified at: 2026-08-01
certainty: context-dependent

subject: WinUI 3 / Windows App SDK
predicate: uses
object: MSIXパッケージング(packaged)
description: WinUI 3はpackaging軸としてMSIXなどのpackaged形式を選べる
evidence: packaging
verified at: 2026-08-01
certainty: context-dependent

subject: Microsoft Edge WebView2
predicate: requires
object: WebView2 Runtime
description: WebView2ベースのUIを動かすには、Chromiumベースの描画エンジンを提供するWebView2 Runtimeが対象機に必要になる
evidence: distribution
verified at: 2026-08-01
certainty: established

subject: WebView2 Runtime
predicate: configuredBy
object: Evergreen配布モード(WebView2)
description: WebView2 Runtimeの提供方法として、Microsoftが自動更新する共有の1本を使うEvergreenを選べる
evidence: evergreen-vs-fixed-version
verified at: 2026-08-01
certainty: established

subject: WebView2 Runtime
predicate: configuredBy
object: Fixed Versionランタイム
description: WebView2 Runtimeの提供方法として、特定バージョンをアプリごとに同梱するFixed Versionを選べる
evidence: evergreen-vs-fixed-version
verified at: 2026-08-01
certainty: established

subject: Evergreen配布モード(WebView2)
predicate: incompatibleWith
object: Fixed Versionランタイム
description: EvergreenとFixed Versionは同じアプリに対して選ぶ排他的な配布モードである
evidence: evergreen-vs-fixed-version
verified at: 2026-08-01
certainty: established

subject: シェル拡張(エクスプローラー拡張)
predicate: uses
object: COM(コンポーネントオブジェクトモデル)
description: Shell拡張はExplorerなどのプロセスへ読み込まれて動作するCOMコンポーネントとして実装される
evidence: reg-shell-exts
verified at: 2026-08-01
certainty: established

subject: ドライバー署名
predicate: requires
object: ドライバーパッケージ
description: ドライバーの署名はSYS単体ではなく、INF・CAT・SYSを含むドライバーパッケージ一式に対して行われ、OSもパッケージ単位でドライバーストアへ配置する
evidence: windows-driver-signing-tutorial
verified at: 2026-08-02
certainty: established

subject: ドライバーパッケージ
predicate: notRecommendedFor
object: シングルバイナリ化(1ファイル配布)
description: インストールされたドライバー本体は、上のパッケージ一式をドライバーストアへ配置する形でしか成立せず、1個のEXEを置くだけでは動かないため、single binary化の対象には向かない。ただし配布物としては、署名済みパッケージを同梱して展開・インストールするブートストラッパーEXE1個にまとめること自体は可能である
evidence: windows-driver-signing-tutorial
verified at: 2026-08-02
certainty: established

subject: app-local配布(アプリ隣接配布)
predicate: recommendedFor
object: シングルバイナリ化(1ファイル配布)
description: app.exeと隣接DLL数個をインストーラー不要・管理者権限不要でxcopy配布できるなら、無理に1EXEへ圧縮するより保守しやすいことが珍しくない
evidence: dynamic-link-library-search-order
verified at: 2026-08-01
certainty: established

subject: self-contained発行
predicate: requires
object: 対象Windowsへの依存
description: self-contained発行はRuntimeIdentifier(対象OS/アーキテクチャ)ごとに.NETランタイムを同梱する形態なので、single-fileやNative AOTと同様に最低サポートWindowsとarchを先に固定する必要がある。self-contained発行自体はLinux・macOSも対象にできるので、対象Windowsへの依存が生じるのはWindowsをターゲットに選んだときに限られる。
evidence: deploy-self-contained-apps
verified at: 2026-08-01
certainty: context-dependent

subject: シングルバイナリ化(1ファイル配布)
predicate: uses
object: CRTの静的リンク(/MT)
description: レベルB(言語ランタイムの事前インストール不要)を実現する手段として、ネイティブC/C++では/MTによるCRTの静的リンクを利用できる
evidence: https://learn.microsoft.com/cpp/c-runtime-library/crt-library-features
verified at: 2026-08-01
certainty: context-dependent

subject: Microsoft Edge WebView2
predicate: requires
object: 対象Windowsへの依存
description: WebView2を採用すると単独起動EXEにはないWebView2 Runtimeという追加ランタイムへの依存が生じ、対象Windows側の依存(ホストやランタイム依存)が増える
evidence: distribution
verified at: 2026-08-01
certainty: context-dependent