前回のレッスンではWinUI C++の環境インストールと最初のプロジェクト作成を完了し、プログラムを正常に起動できるようになりました。今回の授業では、作成した最初のWinUI C++プログラムの内部構造を分析していきます。

以下で各ファイル・フォルダの役割を解説します
プロジェクトディレクトリを解析
ソリューション名
一番上部に表示される「Solution ‘App3’」がソリューション名で、この例ではApp3となっています。プロジェクト作成時に任意のソリューション名を指定可能で、既定値はプロジェクト名と同一です。

上記画像の一番目の入力欄がプロジェクト名、最後の欄がソリューション名です。既定で同一の名前になっていますが、別々の名前に変更することもできます。
一つのソリューションに複数のプロジェクトを格納可能で、本プロジェクトにはデスクトップパッケージ型プロジェクト「App3 (Desktop)」が1つだけ含まれています。
1. References(参照)
プロジェクトが依存するSDK、Windows App SDK、WinRTランタイム、NuGetでインストールしたコンポーネントへの参照を管理するフォルダです。
- Windows SDK、WinUI 3コントロールライブラリ、C++/WinRTヘッダーライブラリ、Microsoft.UI.Xamlなどの依存ライブラリがここで管理されます。
- 手動で編集する必要はなく、Visual StudioがNuGetパッケージを管理する際に自動的に更新されます。

2. External Dependencies(外部依存関係)
システム標準ヘッダー、SDKヘッダー、サードパーティライブラリのヘッダーファイルが自動的にスキャンされ表示されるフォルダです。
- Windows.h、winrt/配下の各種ヘッダー、Microsoft.UI.Xaml底层ヘッダーなどが含まれます。
- 読み取り専用で外部から取り込まれたコードを確認する用途のみ、手動編集はできません。通常Visual Studioインストール時に付属するライブラリが対象となります。

任意のファイルをダブルクリックで開くと、ファイルパスがVisual Studioのインストール配下にあることを確認できます。上部のファイル名にマウスオーバーすると完全なパスが表示されます。

3. Assets リソースフォルダ(アプリアイコン / 起動画面)
Microsoft Store掲載、システムダイアログ、起動スプラッシュ画面、ロック画面で使用する画像リソースを格納し、MSIXパッケージ作成・ストア公開に利用します。
なぜこれらの画像ファイルが存在するのか。プロジェクト作成時にパッケージ型テンプレートを選択したためです。パッケージとは、最終的にMSIXファイルまたはMicrosoft Store用配布ファイルにコンパイルする形式のことを指します。パッケージ型と非パッケージ型の違いは以下の通りです。非パッケージ型はexeファイル単体で実行可能、過去の多くの開発プロジェクトがこちらに該当し、コンパイル後exeをダブルクリックするだけで起動できます。一方パッケージ型はexe、dll、各種リソースファイルを一つのパッケージにまとめ、他のユーザーがパッケージファイルを実行するだけでインストールできる仕組みです。今回はMicrosoft Storeへ公開する前提のため、パッケージ型テンプレートを選択しています。

上記画像がプロジェクト作成時に選択したテンプレートです。説明文から「Microsoft Store公開用、MSIXファイル出力対応プロジェクト」であることが分かります。ストア公開には各種アイコン・画像が必須なため、プロジェクト内に事前に各種画像リソースが用意されています。パッケージを使用しない選択肢も存在し、exe単体出力で直接実行することも可能です。詳細は後述します。
各画像ファイルの役割
| ファイル名 | 役割 |
|---|---|
| LockScreenLogo.scale-200.png | ロック画面に表示するアプリアイコン(200%高DPIスケーリング対応) |
| SplashScreen.scale-200.png | アプリ起動時のスプラッシュ画面 |
| Square44x44Logo…複数画像 | スタートメニュー小アイコン、タスクバーアイコン、Alt+Tabウィンドウサムネイル |
| Square150x150Logo.scale-200.png | スタートメニュー中サイズタイルアイコン |
| StoreLogo.png | Microsoft Storeに表示されるアプリ大アイコン |
| Wide310x150Logo.scale-200.png | スタートメニュー横長タイル |
app.manifest
従来型Windowsアプリケーションマニフェスト(Win32互換用)
- アプリ権限、対応Windowsバージョン、DPI感知設定、管理者権限、ウィンドウスケーリング動作を定義します。
- UWPの
Package.appxmanifestとは別のファイルで、デスクトップパッケージ型プロジェクトでは2種類のマニフェストが共存します。
4. App.xaml / App.xaml.h / App.xaml.cpp
アプリケーション全体のルートクラス(winrt::App3::Appに対応)
App.xaml:XAML全体共通リソースディクショナリ。グローバルスタイル、コントロールテンプレート、色、フォント、テーマリソースを定義し、プロジェクト内全ページで共有されます。App.xaml.h:C++/WinRTにより自動生成されたヘッダーファイル。Appクラスの宣言を記述し、OnLaunched、OnActivatedなどライフサイクル関数を含みます。App.xaml.cpp:アプリライフサイクルロジックを実装OnLaunched:アプリ起動時に実行され、MainWindowの作成と表示を行います。- ウィンドウアクティベート、一時停止、テーマ切り替え、例外キャッチ処理を記述。
- グローバル初期化処理(フォント、データベース、シングルトンサービス)をこちらに記載します。
cppファイルを開くと下記のコードが確認できます
void App::OnLaunched([[maybe_unused]] LaunchActivatedEventArgs const& e)
{
window = make<MainWindow>();
window.Activate();
}Code language: C++ (cpp)

この箇所からプログラムはMainWindowへ処理が移行します。Appはアプリのエントリーポイントであり、ウィンドウを生成する役割ではありません。実際に画面やコントロール、ダイアログを作成するのはMainWindowとなります。
5. MainWindow.xaml 一式(メインウィンドウ)
アプリ既定のメインウィンドウ、デスクトップアプリのルート可視ウィンドウ、最上位の画面です。
MainWindow.xaml:ウィンドウ画面レイアウト。ボタン、テキストボックス、ナビゲーションコントロール、ページを格納するFrameを記述します。MainWindow.idl:IDLインターフェース定義ファイル(C++/WinRTコア)。ウィンドウが外部に公開するプロパティ、メソッド、イベントを定義し、XAMLバインディング、コンポーネント間呼び出し、型メタデータ生成に使用。編集後は自動的に.h/.cppの連携コードが生成されます。MainWindow.xaml.h:IDLとXAMLから自動生成されたクラスヘッダー。コントロールメンバー、コンストラクタ、イベントハンドラ宣言を格納。MainWindow.xaml.cpp:ウィンドウ業務ロジック。ボタンクリックイベント、データバインディング、ページ遷移、コントロール操作コードを記述。
下記のMainWindow.xamlはコントロールとレイアウトを定義するファイルです
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="App3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="App3">
<Grid>
</Grid>
</Window>
Code language: HTML, XML (xml)
6. module.g.cpp
C++/WinRTグローバルモジュール自動生成ファイル(手動編集禁止)
- 全ての
.idlファイルを元にWinRT型登録コードを生成。 winrt::App3::implementation名前空間のエントリを提供し、システムが独自XAMLコントロール・ウィンドウクラスを認識できるようにします。- IDLファイルを追加・削除するとVisual Studioが自動的に再生成します。
7. Package.appxmanifest(MSIXパッケージ定義ファイル、最重要ファイル)
デスクトップアプリをMSIXインストーラーにパッケージするための設定ファイル。ダブルクリックすると可視エディタで開けます。
- アプリ名、バージョン、発行者、アイコン、起動エントリの設定。
- システム権限宣言(ファイルアクセス、カメラ、ネットワーク、バックグラウンドタスク)。
- ファイル開くプロトコル、URLプロトコル、拡張機能の関連付け定義。
- ストア公開情報、デスクトップショートカット、ファイル関連付けを設定。app.manifestとの違い:本ファイルはMicrosoft Store / MSIXパッケージ専用マニフェストで、UWP・パッケージ型デスクトップアプリに使用されます。

例えばこちらではMicrosoft Store関連の設定(バージョン、パッケージ名、発行者情報など)を記述します。これらの情報はMicrosoft Store開発者ページから取得する必要があります。
8. packages.config
NuGetパッケージ設定ファイル。プロジェクトに導入された全NuGetパッケージのバージョンを記録します。
- Microsoft.Windows.SDK.NET、Windows App SDK、C++/WinRT、WinUI 3ライブラリなど。
- チーム開発やPC変更時、Visual Studioがこのファイルを参照して依存パッケージを自動復元します。
9. pch.h/pch.cpp(事前コンパイルヘッダー、C++コンパイル高速化)
pch = Precompiled Header(事前コンパイルヘッダー)
pch.h:全ソースで共通使用するヘッダーを一括インクルード(winrt/Windows.*、Microsoft.UI.Xaml.*、標準ライブラリなど)。全cppファイルの最初行に#include "pch.h"を記述します。pch.cpp:事前コンパイルヘッダーのコンパイル用ソースファイル。役割:大量のシステムヘッダーを各ファイルで個別読み込まず、コンパイル時間を大幅に短縮します。
共通で使用するインクルード文をこのファイルにまとめ、他のソースからこのファイルを読み込むことでコード量削減とビルド速度向上を実現します。
10. readme.txt
Visual Studioテンプレート標準付属の説明文書。WinUI 3 C++プロジェクトの基本的なビルド、パッケージ作成、デバッグ手順が記載されています。
混同しやすい2種類のmanifestファイル
app.manifest→ 従来Win32プロセス用マニフェスト(ウィンドウ、システム互換性、権限設定)Package.appxmanifest→ MSIXアプリパッケージマニフェスト(ストア公開、インストール、システム機能宣言)
プログラム全体の実行フロー
- アプリ起動 →
App::OnLaunched(App.xaml.cpp)へ進む - MainWindowインスタンスを作成しアクティブ表示 window = make
(); window.Activate(); MainWindow.xamlが画面を描画、cppファイルがユーザー操作を処理- パッケージ出力時に
Package.appxmanifestを読み込みインストーラーを生成、Assets内の各アイコン画像がパッケージに埋め込まれる
以上が最もシンプルな空白アプリのディレクトリ構造と実行フローの全解説となります。次回のレッスンではウィンドウにボタンを追加し、クリックするたびに数値が増加する機能を実装し、WinUI C++フレームワークの動作原理を理解します。