Windows 用インストーラー (MSI) を作る

WiX ベースの MSI インストーラーを tauri build で作る。bundle.windows.wix の主な設定、WebView2 の同梱方式、日本語化と MSI 特有のバージョン制約を示す。

ビルド・配布 対象: Tauri 2.x 更新日: 読了目安: 約6分 build-003
目次
  1. 前提条件
  2. 1. tauri.conf.json の設定
  3. 日本語の MSI を作る
  4. 2. インストーラーをカスタマイズする
  5. 動作確認
  6. よくあるエラーと対処法
  7. WiX のダウンロードに失敗する
  8. version にプレリリース表記があるとビルドできない
  9. 同じバージョンを再インストールすると何も起きない
  10. OS ごとの違いと注意点
  11. 関連レシピ

MSI は Windows Installer サービスが処理するパッケージ形式で、グループポリシーや Intune での一括配布に対応しているため、企業向けアプリではほぼ必須です。Tauri は WiX Toolset v3 で MSI を生成します。WiX 本体は初回ビルド時に CLI が自動ダウンロードするので、手動インストールは不要です。ここでは bundle.windows.wix の設定と、NSIS にはない MSI 固有の制約を扱います。

前提条件

  • Windows 上でビルドすること。MSI はクロスコンパイルできません
  • Visual Studio Build Tools(C++ ワークロード)と WebView2 ランタイム
  • 初回ビルド時のインターネット接続(WiX を取得してキャッシュするため。bundle.useLocalToolsDir: true でキャッシュ先を target/.tauri/ にできる)

プラグインや capability の権限は不要です。

1. tauri.conf.json の設定

{
  "bundle": {
    "targets": ["msi"],
    "licenseFile": "../LICENSE.txt",
    "windows": {
      "allowDowngrades": false,
      "webviewInstallMode": { "type": "embedBootstrapper", "silent": true },
      "wix": {
        "language": ["ja-JP", "en-US"],
        "bannerPath": "./wix/banner.bmp",
        "dialogImagePath": "./wix/dialog.bmp",
        "upgradeCode": "b3f1c2d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
      }
    }
  }
}
  • targets: ["msi"] にすると NSIS を作らず MSI だけ生成します。"all" なら両方
  • licenseFile: インストーラーに使用許諾画面を追加します。MSI では .rtf 推奨(.txt も可)
  • language: 文字列なら単一言語、配列なら言語ごとに別の MSI が作られます(後述)
  • bannerPath / dialogImagePath: 上部バナー(493×58 px)とウェルカム画面(493×312 px)の画像。BMP 形式のみ
  • upgradeCode: 同一アプリの判定に使う GUID。一度決めたら変えないでください。変えると旧バージョンが「別アプリ」扱いになり、二重インストールされます
  • webviewInstallMode: WebView2 未導入の PC 向けの同梱方式。downloadBootstrapper(既定、要ネット)、embedBootstrapper(約 1.8MB 追加、Windows 7 対応)、offlineInstaller(約 127MB)、fixedVersion(約 180MB、特定版を固定)、skip

日本語の MSI を作る

language に "ja-JP" を含めると、WiX 同梱の日本語ロケールで UI が日本語化されます。配列で複数指定すると言語ごとに 1 ファイルずつ、末尾に _ja-JP のようなサフィックス付きで出力されます。1 つの MSI で言語を切り替えることはできないので、多言語を 1 ファイルにしたければ NSIS を使ってください。

独自の翻訳ファイルを当てたい場合はオブジェクト形式で localePath を指定します。

{
  "wix": {
    "language": {
      "en-US": null,
      "ja-JP": { "localePath": "./wix/locales/ja-JP.wxl" }
    }
  }
}

2. インストーラーをカスタマイズする

レジストリ追加やサービス登録は WiX フラグメントで行います。src-tauri/windows/fragments/ に .wxs を置き、fragmentPaths と componentRefs で参照します。UI 自体を差し替える template もありますが、Tauri 更新時の追従コストが高いので、まずフラグメントで済むか検討してください。

{
  "wix": {
    "fragmentPaths": ["./windows/fragments/registry.wxs"],
    "componentRefs": ["MyRegistryEntries"]
  }
}

動作確認

npm run tauri build -- --bundles msi

src-tauri/target/release/bundle/msi/ に my-notes_1.0.0_x64_ja-JP.msi のようなファイルが生成されます。ダブルクリックでウィザードが開き、既定では C:\Program Files\<productName>\ にインストールされます。サイレントインストールとログ取得は msiexec で確認します。

msiexec /i .\my-notes_1.0.0_x64_ja-JP.msi /quiet /l*v install.log

よくあるエラーと対処法

WiX のダウンロードに失敗する

プロキシ環境や社内ネットワークでは、初回の WiX 取得がタイムアウトして「Downloading ... failed」という趣旨のエラーになります。HTTPS_PROXY 環境変数を設定するか、ネットのある PC で一度ビルドしてキャッシュディレクトリを丸ごとコピーしてください。useLocalToolsDir を有効にしておくとキャッシュがプロジェクト内に収まり、コピーが楽になります。

version にプレリリース表記があるとビルドできない

MSI のバージョンは major.minor.patch の数値 3 組しか受け付けません。tauri.conf.json の version が 1.0.0-beta.1 のようだと、MSI 生成段階でバージョン形式が不正という趣旨のエラーになります。NSIS は通るため、MSI を追加したときに初めて発覚しがちです。プレリリース番号は 1.0.0 のように落として運用してください。

同じバージョンを再インストールすると何も起きない

Windows Installer は同一バージョンの MSI を「既にインストール済み」とみなし、ファイルを更新しません。開発中に何度もビルドして試す場合は、version を上げるか、コントロールパネルから一度アンインストールしてください。逆に古いバージョンを上書きさせたくない場合は allowDowngrades: false にします。

OS ごとの違いと注意点

  • MSI は Windows 専用です。macOS / Linux のビルドマシンからは NSIS(実験的)しか作れません
  • 既定はマシン単位のインストール(Program Files)で UAC の昇格が必要です。ユーザー単位で管理者権限なしにインストールさせたい場合は NSIS の installMode: "currentUser" が向いています
  • Windows 7 をサポートするなら webviewInstallMode を embedBootstrapper にします
  • 未署名の MSI は SmartScreen に警告されます。certificateThumbprint と timestampUrl で署名するか、signCommand で外部ツールに委ねます

関連レシピ

参考リンク(公式ドキュメント)

Web Ninja

この記事を書いた人

Web Ninja ウェブエンジニア (Web Engineer)

会社員ネットワークエンジニアから独立してかれこれ 25 年以上 Web エンジニアとして活動中。普段は JavaScript と Node.js を自在に操り、時には C++ や Perl といった古流の技も嗜みます。近年は Tauri × Rust という新たな武器を手に、デスクトップアプリ開発の最前線を駆け抜けています。「作りたい」を「作れる」に変えるための、実践的な「技」をお届けします。

お問い合わせ: tauri.ninja@gmail.com

内容の誤り・動かないコードを報告する