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

既定の NSIS インストーラーを bundle.windows.nsis で設定する。installMode の 3 種、日本語化、installerHooks、サイレントインストール、MSI との使い分けを示す。

ビルド・配布 対象: Tauri 2.x 更新日: 読了目安: 約5分 build-004
目次
  1. 前提条件
  2. 1. tauri.conf.json の設定
  3. installMode の 3 種類
  4. 言語
  5. 画像
  6. 2. installerHooks でインストール前後に処理を挟む
  7. 動作確認
  8. よくあるエラーと対処法
  9. NSIS のダウンロードに失敗する
  10. 画像や言語の指定でビルドが止まる
  11. 「Windows によって PC が保護されました」と出る
  12. OS ごとの違いと注意点
  13. 関連レシピ

NSIS (Nullsoft Scriptable Install System) は Tauri が Windows で既定で生成するインストーラー形式で、<productName>_<version>_x64-setup.exe という 1 つの実行ファイルになります。管理者権限なしでユーザー単位にインストールでき、多言語を 1 ファイルに同梱でき、インストール前後に独自処理を差し込めるのが特徴です。まず NSIS を選び、企業の一括展開が必要になったら MSI を追加する、という順序が現実的です。

前提条件

  • Windows 上でビルドするのが基本。Linux / macOS からのクロスビルドは実験的サポート
  • NSIS 本体(makensis)は初回ビルド時に CLI が自動ダウンロードしてキャッシュします。手動インストールは不要です

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

1. tauri.conf.json の設定

{
  "bundle": {
    "targets": ["nsis"],
    "licenseFile": "../LICENSE.txt",
    "windows": {
      "webviewInstallMode": { "type": "downloadBootstrapper", "silent": true },
      "nsis": {
        "installMode": "currentUser",
        "languages": ["Japanese", "English"],
        "displayLanguageSelector": true,
        "installerIcon": "./icons/icon.ico",
        "headerImage": "./nsis/header.bmp",
        "sidebarImage": "./nsis/sidebar.bmp",
        "startMenuFolder": "My Notes",
        "compression": "lzma"
      }
    }
  }
}

installMode の 3 種類

値インストール先管理者権限レジストリ
currentUser(既定)%LOCALAPPDATA%\<productName>不要HKCU
perMachineC:\Program Files\<productName>必要(UAC)HKLM
bothユーザーが選択選択次第選択次第

currentUser は権限のないユーザーでも導入できる反面、PC を共有する全員に配布したい用途には向きません。both にすると最初の画面で選ばせることができます。

言語

languages には NSIS の言語ファイル名を書きます(Japanese, English, SimpChinese など)。MSI と違い、全言語が 1 つのインストーラーに入ります。既定では OS の表示言語が自動で選ばれ、displayLanguageSelector: true で起動直後に選択ダイアログが出ます。文言の差し替えは customLanguageFiles に言語名をキーにした .nsh を指定します。

画像

headerImage は 150×57 px、sidebarImage は 164×314 px の BMP を用意します。PNG は使えません。installerIcon は .ico です。パスはすべて src-tauri/ からの相対パスです。

2. installerHooks でインストール前後に処理を挟む

常駐プロセスの停止や旧設定の削除は NSIS のフックマクロで行います。src-tauri/windows/hooks.nsi を作り、NSIS_HOOK_PREINSTALL / POSTINSTALL / PREUNINSTALL / POSTUNINSTALL のうち必要なものを定義します。

!macro NSIS_HOOK_PREINSTALL
  ; インストール前: 起動中の旧バージョンを止める
  nsExec::Exec 'taskkill /IM my-notes.exe /F'
!macroend

!macro NSIS_HOOK_POSTUNINSTALL
  ; アンインストール後: ユーザーデータを消す
  RMDir /r "$LOCALAPPDATA\jp.example.mynotes"
!macroend
{
  "bundle": {
    "windows": {
      "nsis": { "installerHooks": "./windows/hooks.nsi" }
    }
  }
}

UI や流れ自体を変えたい場合は template にカスタム .nsi を指定できますが、Tauri 更新時の追従コストが高いので、フックで足りるならフックを使ってください。

動作確認

npm run tauri build -- --bundles nsis

src-tauri/target/release/bundle/nsis/my-notes_1.0.0_x64-setup.exe が生成されます。実行するとウィザードが開き、完了後にスタートメニューとデスクトップにショートカットが作られ、「アプリと機能」にも登録されます。

自動展開やテストでは NSIS 標準のサイレントスイッチ /S が使えます。

.\my-notes_1.0.0_x64-setup.exe /S

よくあるエラーと対処法

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

プロキシ環境では初回の makensis 取得で「Downloading ... failed」という趣旨のエラーになります。HTTPS_PROXY を設定するか、bundle.useLocalToolsDir: true にしてネットのある PC で作ったキャッシュ(target/.tauri/)をコピーしてください。

画像や言語の指定でビルドが止まる

headerImage に PNG を指定した、languages に ja-JP のようなロケール表記を書いた、といったケースでは makensis が該当ファイルを開けないという趣旨のエラーを出します。画像は BMP、言語は NSIS の言語ファイル名(Japanese)に直します。

「Windows によって PC が保護されました」と出る

未署名の -setup.exe は SmartScreen に止められます。bundle.windows.certificateThumbprint と timestampUrl でコード署名するか、signCommand で任意の署名ツールを呼びます。

OS ごとの違いと注意点

  • Linux / macOS からは --runner cargo-xwin --target x86_64-pc-windows-msvc でクロスビルドできますが実験的です。CI では Windows ランナーが安全です
  • ARM 版 Windows 向けは --target aarch64-pc-windows-msvc で別途ビルドします
  • installMode をリリース途中で変えると、レジストリの場所が違うため新旧が共存します。最初に決めたら変えないでください
  • MSI との比較: NSIS はユーザー単位インストール・多言語同梱・フックが得意、MSI はグループポリシー配布が得意。両方必要なら targets: ["nsis", "msi"] で同時に作れます
  • 管理者権限で動作しているかをアプリ側で判定したい場合は アプリが管理者権限で動いているか確認する を参照してください

関連レシピ

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

Web Ninja

この記事を書いた人

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

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

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

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