LoginSignup
1
1

Tauri のインストーラーをカスタマイズする: Windows 編

Last updated at Posted at 2024-05-19

はじめに

Tauri は、ビルドフレームワークに WiX を使ったインストーラー作成を最初から組み込んでいる。
それはつまり cargo tauri buildnpm run tauri build を実行した時点で、実行ファイル (.exe) だけではなく、インストーラー (.msi (MSI), .exe(NSIS)) を同時に作成してくれる

こうした GUI アプリを作成するフレームワークで、最初からインストーラー作成までサポートしていることは珍しくもあるので、この機能が取り込まれていたことに気付いたときは結構感動した。

image.png

image.png

しかしながら、こうして組み込まれていると気になってくるのがカスタマイズ方法。
インストーラーに対して、例えば次のような項目を追加したくなったりする。

  • PATH 環境変数に追加するオプション選択
  • 追加の依存アプリケーションのインストール案内
  • シンボリックリンクの追加
  • などなど

こうした際にどういじればインストーラーをカスタイマイズできるのか、また、どこまでいじることができるのかを探ってみようと思った。

検証環境

  • Windows 11 Pro 23H2
  • Tauri 1.5.3
  • tauri-cli(Cargo) 1.5.7

基本仕様

公式では次のところにドキュメントがある。

記載にある通り、ベースのフレームワークには WiX (Toolset v3) と NDIS をそれぞれ使っている。

WiX についてここでまとめる事の言い訳
WiX はざっくりとした情報しか知らないので、本当はこちらを体系的に学んだ方がいいのだろうが、このまま「Tauri を題材に学んでいくスタイル」で行く。

NSISも合わせて触ったが、NSISの方がとっつきやすく、ただスクリプトを書くだけで結果を出すのも早かった。

なので、WiX に関しては、一旦おまけということで。

ビルド方法

npm 系であれば

npm run tauri build

cargo であれば

cargo tauri build

32-bit や ARM アーキテクチャへの対応

ここら辺についてはまずは、以下の Rust Lang のドキュメントを読んだ方がいい。

32-bit 対応

まずは、対応するためのツールチェーンである i686-pc-windows-msvc を rustup に追加する必要がある。

rustup target add i686-pc-windows-msvc

そして、ターゲット (--target) に i686-pc-windows-msvc を指定してビルドする。

cargo tauri build --target i686-pc-windows-msvc

Arm64 対応

Arm64 の場合は、まずは Visual Studio Installer を使用して追加のビルドツール MSVC v143 - VS 2022 C++ ARM64 build tools (Latest) (日本語名: MSVC v143 - VS 2022 C++ ARM ビルドツール (最新)) をインストールしてくる必要がある。

image.png

加えて rustup にツールチェーンである aarch64-pc-windows-msvc を追加する。

rustup target add i686-pc-windows-msvc

そしてビルド時のターゲットに `` を指定してビルドする。

cargo tauri build --target i686-pc-windows-msvc

WebView2 のインストールオプション

WebView2 は Windows におけるフロントエンドの基盤となっているもの。
Tauri の特徴として、Chrominium 等に頼らず、OS ネイティブサポートの Web ビューエンジンを使用して描画しているため、このオプションが存在する。

基本的には、 Windows 10 (2018年4月以降のリリースから最新) and Windows 11 ではデフォルトで OS にバンドルされているので、ここら辺のオプションは気にする必要はない。
しかしながら、Windows 7 等にインストールする際には、このオプションの設定が有効になってくる。

今回は Windows 11 での話をメインに扱うので、一旦リンクだけで説明はスキップする。

Tauri Config でカスタマイズする

Tauri Config の Windows 向け設定として、WixConfig の設定項目が存在する。

主に以下の様な項目を設定可能。

アトリビュート 説明
language インストーラーで表示する言語設定
license RTF フォーマットでのライセンスレンダー用ファイル設定
enableElevatedUpdateTask アップデートチェックを Windows Task Scheduler に設定
bannerPath インストーラーに表示されるバナー画像を設定。サイズは、493px × 312px 固定で、ビットマップファイル (.bmp) である必要がある。
dialogImagePath 開始時と完了時に表示される画像を設定。サイズは、493px × 312px 固定で、ビットマップファイル (.bmp) である必要がある。

独自の WiX テンプレートを使用する

現状、テンプレートのカスタマイズには二通ある。

  • ソース .wix ファイルを直接カスタマイズする
  • WiX Fragment として拡張する

ソース .wix ファイルを直接カスタマイズする

ソース を直接書き直しつつ、これを適用する。
適用するには、Tauri Config で tauri.bundle.windows.wix.template を設定する。

ただ、こちらを設定する場合は先のソースでもいいが、一度 tauri build して生成された main.wxs ファイルをいじった方が良いと思われる。
ファイルは、 .\src-tauri\target\release\wix\x64\main.wxs に、ビルド時に生成される。

以下生成されたものを一部抜粋。
見て通り、ターゲットのパスや開発者グループ名などを設定してくれるので、ソースからの改編の手間が省ける。

パス指定について
公式ドキュメントを見ると、.wxs ファイルまでのパスを POSIX パス (/) で記述している様に見える。しかしながら、実際は単に文字列結合を tauri.config.json を元に解決しているだけで、POSIX ファイルだとファイル認識してくれず、ビルド時にエラーを起こす。
認識のためには Winsdows Path ( \\ 文字列上ダブルスラッシュである必要がある。)で記載する必要がある。
Windows のいや~~なところがここでも… :weary:

例えば .\src-tauri\wix\custom.wxs として保存して設定する。

tauri.config.json
{
  "tauri": {
    "bundle": {
      "windows": {
        "wix": {
          "template": "wix/custom.wxs",
        }
      }
    }
  }
}

WiX Fragment として拡張する

tauri.config.json
{
  "tauri": {
    "bundle": {
      "windows": {
        "wix": {
          "fragmentPaths": ["wix/registry.wxs"],
          "componentRefs": ["MyFragmentRegistryEntries"]
        }
      }
    }
  }
}

独自の NSIS テンプレートを使用する

個人的には WiX と NSIS だと、 NSIS の方が扱いやすい印象を覚えたので、こちらの方を好んで使用するようにしている。

マスターテンプレートは、Tauri レポジトリ内の ここから手に入るので、使用している Tauri CLI のバージョンと合ったブランチに切り替えてダウンロードする。

tauri.config.json
{
  "tauri": {
    "bundle": {
      "windows": {
        "nsis": {
          "template": "nsis/template.nsi"
        }
      }
    }
  }
}

例えば、次の様なエラーが NSIS ビルド時に発生する。

Error failed to bundle project: `Error rendering "installer.nsi" line 549, col 36: Helper not defined: "unescape-dollar-sign"`

こういった原因は、Tauri CLI のバージョンが、古いことが多い。

以下のような形で Tauri CLI を最新にしておくことをおススメする。

cargo install tauri-cli

インストーラーのターゲットを絞る

デフォルトでは WiX と NSIS の両方のインストーラーを作成する振る舞いをする。
しかしながら、いざ NSIS だけで運用すると決めたら WiX ベースのインストーラーはわざわざ作成する必要がなくなってくる。

この場合は、tauri.config.jsontauri.bundle.targets を変更する。
デフォルトでは、 "all" という文字列になっているが、これを配列にしてそれぞれ選択していく。
例えば、NSIS のみとする場合は、 ["nsis"] といった感じ。

Windows のみ NSIS に変える、しかし他のプラットフォームはそのままという場合は、そのまま並べて書く。

tauri.config.json
{
  "tauri": {
    "bundle": {
      "targets": ["deb", "appimage", "nsis", "app", "dmg", "updater"]
    }
  }
}

まとめ

そもそもインストーラー作成がフレームワークに含まれている事自体個人開発ではありがたいのだが、カスタマイズしやすいような導線も貼られていて調べやすかった。
こういう整備環境が充実しているところも Tauri 好きだなぁ~、と思うところだなと感じた。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1