このガイドでは、 winapp CLI と Rust アプリケーションを使用して、パッケージ ID を使用してデバッグし、アプリケーションを MSIX としてパッケージ化する方法について説明します。
完全な実際の例については、このリポジトリの Rust サンプル を確認してください。
パッケージ ID は、Windows app モデルの主要な概念です。 これにより、アプリケーションは特定のWindows API (通知、セキュリティ、AI API など) にアクセスでき、クリーンなインストール/アンインストール エクスペリエンスが提供されます。
標準の実行可能ファイル ( cargo build で作成されたものなど) にはパッケージ ID がありません。 このガイドでは、デバッグ用に追加し、配布用にパッケージ化する方法を示します。
[前提条件]
Rust ツールチェーン: rustup または winget (または既にインストールされている場合は更新) を使用して Rust をインストールします。
winget install Rustlang.Rustup --source wingetwinapp CLI: winget を使用して
winappツールをインストールします (既にインストールされている場合は更新します)。winget install microsoft.winappcli --source winget
1. 新しい Rust アプリを作成する
まず、単純な Rust アプリケーションを作成します。
cargo new rust-app
cd rust-app
これを実行して、すべてが動作していることを確認します。
cargo run
出力は "Hello, world!" にする必要があります。
2. コードを更新して ID を確認する
アプリがパッケージ ID で実行されているかどうかを確認するように更新します。 これは、後の手順で ID が正しく動作していることを確認するのに役立ちます。
windows クレートを使用して、Windows API にアクセスします。
まず、次を実行して、 windows の依存関係を Cargo.toml に追加します。
cargo add windows --features ApplicationModel
これにより、Windows API バインドが ApplicationModel 機能と共に追加されます。これにより、ID を確認するために Package API にアクセスできるようになります。
次に、 src/main.rs の内容全体を次のコードに置き換えます。 このコードは、現在のパッケージ ID の取得を試みます。 成功した場合は、パッケージ ファミリ名が出力されます。それ以外の場合は、"パッケージ化されていません" が出力されます。
Note
完全なサンプルには、ID が存在する場合にWindows通知を表示するコードも含まれていますが、このガイドでは ID チェックに焦点を当てます。
use windows::ApplicationModel::Package;
fn main() {
match Package::Current() {
Ok(package) => {
match package.Id() {
Ok(id) => match id.FamilyName() {
Ok(name) => println!("Package Family Name: {}", name),
Err(e) => println!("Error getting family name: {}", e),
},
Err(e) => println!("Error getting package ID: {}", e),
}
}
Err(_) => println!("Not packaged"),
}
}
3. ID なしで実行する
次に、通常どおりにアプリをビルドして実行します。
cargo run
"パッケージ化されていません" という出力が表示されます。 これにより、標準の実行可能ファイルがパッケージ ID なしで実行されていることが確認されます。
4. winapp CLI を使用してProjectを初期化する
winapp init コマンドでは、アプリ マニフェストとアセットなど、必要なものがすべて一度に設定されます。 マニフェストは、API アクセスを許可するために使用Windowsアプリの ID (名前、発行元、バージョン) を定義します。
次のコマンドを実行し、プロンプトに従います。
winapp init
プロンプトが表示されたら、次を実行します。
- パッケージ名: Enter キーを押して既定値を受け入れる (rust-app)
- Publisher名: Enter キーを押して既定値をそのまま使用するか、名前を入力します
- バージョン: Enter キーを押して 1.0.0.0 を受け入れる
- 説明: Enter キーを押して既定値をそのまま使用するか、説明を入力します
-
SDK のセットアップ: [SDK をセットアップしない] を選択します (Rust では、C++ SDK ヘッダーではなく、独自の
windowsクレートが使用されます)
このコマンドは次の操作を行います:
-
Package.appxmanifestの作成 - アプリの ID を定義するマニフェスト -
Assetsフォルダーの作成 - MSIX パッケージ化とストアの申請に必要なアイコン
Note
管理されている SDK パッケージがないため、 winapp.yaml は作成されません。Rust は Cargo 経由で windows クレートを使用するため、 winapp restore/update が追跡するものはありません。
Package.appxmanifestを開いて、表示名、発行元、機能などのプロパティをさらにカスタマイズできます。
実行エイリアスの追加 (コンソール アプリの場合)
cargo newコンソール アプリを作成するため、マニフェストに実行エイリアスを追加する必要があります。 これを使用しない場合、 winapp run は AUMID アクティブ化を使用してアプリを起動します。これにより、新しいウィンドウが開き、コンソール アプリが終了するとすぐにウィンドウが閉じられ、出力が飲み込まれます。
エイリアスを使用すると、ユーザーは MSIX をインストールした後、任意のターミナルから名前でアプリを実行することもできます。 マニフェストは、ユーザーがrust-app.exeまたはrust-appとして呼び出すことができるrust-app.exe (既定ではプロジェクトの exe 名) などのエイリアスを登録します。
UI アプリ (独自のウィンドウをレンダリングする Rust アプリ) を構築する場合は、この手順をスキップします。 これらのアプリは、既定の AUMID 起動で正常に動作します。
エイリアスを追加します。
winapp manifest add-alias
これにより、uap5:ExecutionAliasにPackage.appxmanifestエントリが追加されます。
5. ID を使用したデバッグ
アプリを完全にパッケージ化せずに ID (通知など) を必要とする機能をテストするには、 winapp runを使用します。 これにより、ビルド出力フォルダー全体が、実際の MSIX インストールと同様にルーズ レイアウト パッケージとして登録され、アプリが起動されます。 デバッグに証明書や署名は必要ありません。
実行可能ファイルをビルドします。
cargo buildID を使用して実行する:
winapp run .\target\debug --with-alias
--with-alias フラグは、実行エイリアスを使用してアプリを起動し、コンソール出力が現在のターミナルに留まります。 これには、手順 4 で追加した uap5:ExecutionAlias が必要です。
Note
winapp run は、パッケージをシステムに登録します。 このため、手順 6 で後でインストールしようとすると、MSIX が "既にインストール済み" と表示されることがあります。 完了したら、 winapp unregister を使用して開発パッケージをクリーンアップします。
次のような出力が表示されます。
Package Family Name: rust-app_12345abcde
これにより、アプリが有効なパッケージ ID で実行されていることを確認できます。
ヒント
高度なデバッグ ワークフロー (デバッガーのアタッチ、IDE セットアップ、スタートアップ デバッグ) については、 デバッグ ガイドを参照してください。
6. MSIX を使用したパッケージ化
アプリを配布する準備ができたら、同じマニフェストを使用して MSIX としてパッケージ化できます。 MSIX では、クリーン インストール/アンインストール、自動更新、および信頼できるインストール エクスペリエンスが提供されます。
パッケージ ディレクトリを準備する
まず、最適なパフォーマンスを得るためのリリース モードでアプリケーションをビルドします。
cargo build --release
次に、配布に必要なファイルのみを含むディレクトリを作成します。
target\release フォルダーには、アプリの一部ではないビルド成果物が含まれています。実行可能ファイルのみが必要です。
mkdir dist
copy .\target\release\rust-app.exe .\dist\
開発証明書を生成する
MSIX パッケージに署名する必要があります。 ローカル テストの場合は、自己署名開発証明書を生成します。
winapp cert generate --if-exists skip
Important
証明書の発行者は、Package.appxmanifest 内の Publisher と一致する必要があります。
cert generate コマンドは、マニフェストからこれを自動的に読み取ります。
署名とパッケージ
これで、パッケージ化して 1 つの手順でサインインできるようになりました。
winapp pack .\dist --cert .\devcert.pfx
注:
packコマンドは、現在のディレクトリから Package.appxmanifest を自動的に使用し、パッケージ化する前にターゲット フォルダーにコピーします。 生成された .msix ファイルは現在のディレクトリにあります。
証明書をインストールする
MSIX パッケージをインストールする前に、コンピューター上の開発証明書を信頼する必要があります。 このコマンドを管理者として実行します (証明書ごとに 1 回だけ実行する必要があります)。
winapp cert install .\devcert.pfx
インストールと実行
Note
手順 5 で winapp run を使用した場合は、パッケージがシステムに既に登録されている可能性があります。 最初 winapp unregister 使用して開発登録を削除してから、リリース パッケージをインストールします。
生成された .msix ファイルをダブルクリックするか、PowerShell を使用してパッケージをインストールします。
Add-AppxPackage .\rust-app.msix
次のように入力して、ターミナル内の任意の場所からアプリを実行できるようになりました。
rust-app
"パッケージ ファミリ名" の出力が表示され、インストールされ、ID で実行されていることを確認します。
ヒント
(コード変更後など) アプリを再パッケージ化する必要がある場合は、Versionをもう一度実行する前に、Package.appxmanifestのwinapp packをインクリメントします。 Windowsインストールされているパッケージを更新するには、より高いバージョン番号が必要です。
ヒント
- 配布の準備ができたら、証明機関のコード署名証明書を使用して MSIX に署名できるため、ユーザーは自己署名証明書をインストールする必要がありません
- Microsoft Storeは MSIX に署名します。送信前に署名する必要はありません。
- サポートするアーキテクチャごとに 1 つずつ、複数の MSIX パッケージを作成する必要がある場合があります (x64、Arm64)
次のステップ
winget を使用して配布: MSIX をWindows パッケージ マネージャー Community Repository に送信しますMicrosoft Store に発行する :を使用してパッケージを送信する -
CI/CD の設定:
setup-WinAppCliGitHub Action を使用して、パイプライン内のパッケージングを自動化します Explore Windows API : パッケージ ID を使用して、 これで、Notifications 、on-device AI 、およびその他のidentity 依存 API
Windows developer