はじめに
Tauri は、ビルドフレームワークに WiX を使ったインストーラー作成を最初から組み込んでいる。
それはつまり cargo tauri build
や npm run tauri build
を実行した時点で、実行ファイル (.exe) だけではなく、インストーラー (.msi (MSI), .exe(NSIS)) を同時に作成してくれる。
こうした GUI アプリを作成するフレームワークで、最初からインストーラー作成までサポートしていることは珍しくもあるので、この機能が取り込まれていたことに気付いたときは結構感動した。
しかしながら、こうして組み込まれていると気になってくるのがカスタマイズ方法。
インストーラーに対して、例えば次のような項目を追加したくなったりする。
- 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 ビルドツール (最新)
) をインストールしてくる必要がある。
加えて 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 のいや~~なところがここでも…
例えば .\src-tauri\wix\custom.wxs
として保存して設定する。
{
"tauri": {
"bundle": {
"windows": {
"wix": {
"template": "wix/custom.wxs",
}
}
}
}
}
WiX Fragment として拡張する
{
"tauri": {
"bundle": {
"windows": {
"wix": {
"fragmentPaths": ["wix/registry.wxs"],
"componentRefs": ["MyFragmentRegistryEntries"]
}
}
}
}
}
独自の NSIS テンプレートを使用する
個人的には WiX と NSIS だと、 NSIS の方が扱いやすい印象を覚えたので、こちらの方を好んで使用するようにしている。
マスターテンプレートは、Tauri レポジトリ内の ここから手に入るので、使用している Tauri CLI のバージョンと合ったブランチに切り替えてダウンロードする。
{
"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.json
の tauri.bundle.targets
を変更する。
デフォルトでは、 "all"
という文字列になっているが、これを配列にしてそれぞれ選択していく。
例えば、NSIS のみとする場合は、 ["nsis"]
といった感じ。
Windows のみ NSIS に変える、しかし他のプラットフォームはそのままという場合は、そのまま並べて書く。
{
"tauri": {
"bundle": {
"targets": ["deb", "appimage", "nsis", "app", "dmg", "updater"]
}
}
}
まとめ
そもそもインストーラー作成がフレームワークに含まれている事自体個人開発ではありがたいのだが、カスタマイズしやすいような導線も貼られていて調べやすかった。
こういう整備環境が充実しているところも Tauri 好きだなぁ~、と思うところだなと感じた。