Tauriの基礎 - ビルドと配布
概要
Tauriは、RustバックエンドとWebフロントエンドを組み合わせたデスクトップアプリケーション開発フレームワークである。
ビルドシステムは、RustのコンパイルとWebアセットのバンドルを自動的に統合し、各プラットフォームに最適化された配布形式を生成する。
主な特徴は以下の通りである。
- クロスプラットフォームビルド
- Windows (msi, exe)、MacOS (app, dmg)、Linux (deb, rpm, AppImage) に対応する。
- 軽量なバイナリ
- Rustの最適化により、小さなファイルサイズで配布できる。
- 複数のバンドル形式
- プラットフォームごとに適切なインストーラ形式を選択できる。
- CI/CD連携
- GitHub Actionsと連携した自動ビルドが可能である。
Tauriのビルドプロセスでは、フロントエンドのビルド (Vite, webpack等)、Rustバックエンドのコンパイル、およびバンドル作成が一連のフローで実行される。
ビルドコマンド
Tauriのビルドは、tauri build コマンドを実行する。
基本構文
ビルドコマンドの基本構文を以下に示す。
# 基本的なビルド実行 pnpm tauri build # 特定の設定ファイルを指定 pnpm tauri build --config src-tauri/tauri.production.conf.json # バンドルを作成せずにバイナリのみビルド pnpm tauri build --no-bundle # デバッグビルド pnpm tauri build --debug
パッケージマネージャ別の実行方法
使用するパッケージマネージャに応じて、コマンドが異なる。
| パッケージマネージャ | コマンド | 備考 |
|---|---|---|
| npm | npm run tauri build |
package.json ファイルの scripts に定義が必要
|
| yarn | yarn tauri build |
Yarn v1 / v2 / v3 対応 |
| pnpm | pnpm tauri build |
推奨パッケージマネージャ |
| bun | bun tauri build |
高速なパッケージマネージャ |
| cargo | cargo tauri build |
Rust専用 (フロントエンドは別途ビルド) |
主要オプション一覧
下表に、tauri build コマンドの主要オプションを示す。
| オプション | 説明 | 使用例 |
|---|---|---|
--config |
設定ファイルを指定する | --config tauri.prod.conf.json |
--target |
ビルドターゲットを指定する | --target x86_64-pc-windows-msvc |
--features |
Cargo featuresを有効化する | --features custom-protocol |
--no-bundle |
バンドルを作成しない | --no-bundle |
--debug |
デバッグモードでビルドする | --debug |
--bundles |
生成するバンドル形式を指定する | --bundles msi,nsis |
--verbose |
詳細なログを出力する | -v または --verbose |
tauri build と tauri bundleの使い分け
tauri build と tauri bundle は用途が異なる。
| コマンド | 用途 | 実行内容 |
|---|---|---|
tauri build |
アプリケーションの完全ビルド | フロントエンドビルド + Rustコンパイル + バンドル作成 |
tauri bundle |
バンドルのみ作成 | 既存のバイナリからバンドルを作成 |
tauri bundle コマンドは、バイナリが既に存在する場合にバンドル形式のみを作成する時に使用する。
# 特定のバンドル形式のみ作成 pnpm tauri bundle --bundles app,dmg # MacOS pnpm tauri bundle --bundles msi,nsis # Windows pnpm tauri bundle --bundles deb,appimage # Linux
バンドル形式
Tauriは各プラットフォームに対応した複数のバンドル形式をサポートしている。
プラットフォーム別バンドル形式
| プラットフォーム | バンドル形式 | 拡張子 | 説明 |
|---|---|---|---|
| Linux | deb | .deb | Debian/Ubuntu系パッケージ |
| Linux | rpm | .rpm | Red Hat/Fedora系パッケージ |
| Linux | AppImage | .AppImage | ポータブル実行形式 |
| Windows | msi | .msi | Windows Installer (WiX) |
| Windows | nsis | .exe | NSISインストーラ |
| MacOS | app | .app | MacOSアプリケーションバンドル |
| MacOS | dmg | .dmg | MacOSディスクイメージ |
Linux バンドル形式
Linuxでは、3つのバンドル形式から選択できる。
rpm (RPM Package)
Red Hat/Fedora系ディストリビューション向けのパッケージ形式である。
- 対象ディストリビューション
- RHEL, SUSE等
- 特徴
- パッケージマネージャ (dnf, zypper) で管理できる。
- 依存関係が自動的に解決される。
- エンタープライズ環境で広く使用される。
- 選択基準
- RHEL / SUSEユーザを対象とする場合に選択する。
deb (Debian Package)
Debian系ディストリビューション向けのパッケージ形式である。
- 対象ディストリビューション
- Debian, Ubuntu, Linux Mint, Pop!_OS等
- 特徴
- パッケージマネージャ (apt) で管理できる。
- 依存関係が自動的に解決される。
- システムへの統合が容易である。
- 選択基準
- Debian系ユーザを主な対象とする場合に選択する。
AppImage
ポータブルな実行形式で、インストール不要で実行できる。
- 対象環境
- 全てのLinuxディストリビューション
- 特徴
- インストール不要
- 単一ファイルで配布可能
- 実行権限を付与するだけで動作する。
- サンドボックス機能を内蔵
- 選択基準
- 幅広いユーザへの配布や、ポータブル版が必要な場合に選択する。
Windowsバンドル形式
Windowsでは、2つのインストーラ形式から選択できる。
msi (Windows Installer - WiX)
Microsoft標準のインストーラ形式である。
- 特徴
- Windows標準のインストーラ
- グループポリシーでの配布が可能
- エンタープライズ環境での展開に適している。
- サイレントインストール対応
- 選択基準
- 企業環境での配布、システム管理が必要な場合に選択する。
exe (NSIS)
NSIS (Nullsoft Scriptable Install System) ベースのインストーラである。
- 特徴
- カスタマイズ性が高い。
- インストーラのUIを自由に設計可能
- ファイルサイズが比較的小さい。
- 選択基準
- カスタムインストーラが必要な場合に選択する。
MacOSバンドル形式
MacOSでは、アプリケーションバンドルとディスクイメージ形式をサポートする。
app (Application Bundle)
MacOS標準のアプリケーション形式である。
- 特徴
- MacOS標準のアプリケーション形式
- Finderから直接起動可能
- Applicationsフォルダにドラッグ&ドロップでインストール
- 選択基準
- 開発用または直接配布する場合に選択する。
dmg (Disk Image)
MacOSのディスクイメージ形式で、配布に適している。
- 特徴
- MacOS標準の配布形式
- 圧縮によりファイルサイズを削減可能
- インストールUIをカスタマイズ可能
- 選択基準
- 一般ユーザへの配布に選択する。
Universal Binary
Intel MacとApple Silicon Macの両方で動作するバイナリである。
- 特徴
- x86_64とaarch64の両方のアーキテクチャに対応
- 単一のファイルで全てのMacに対応可能
- ファイルサイズが増加する。
- 作成方法
- Rustターゲットを追加してビルドする。
# Universal Binary用のターゲットを追加 rustup target add x86_64-apple-darwin rustup target add aarch64-apple-darwin # Universal Binaryをビルド pnpm tauri build --target universal-apple-darwin </syntaxhighlight>
tauri.conf.jsonファイルの設定
ビルド設定は、tauri.conf.json ファイルの bundle セクションで行う。
bundleセクションの基本構造
bundle セクションの基本的な構造を以下に示す。
| 設定項目 | 型 | 説明 |
|---|---|---|
active |
boolean | バンドル作成の有効/無効 |
targets |
string / array | 生成するバンドル形式 |
identifier |
string | アプリケーション識別子 (逆ドメイン形式) |
icon |
array | アイコンファイルのパス |
resources |
array | バンドルに含めるリソース |
copyright |
string | 著作権情報 |
category |
string | アプリケーションカテゴリ |
shortDescription |
string | 短い説明 |
longDescription |
string | 詳細な説明 |
設定例
tauri.conf.json ファイルの設定例を以下に示す。
{
"build": {
"beforeBuildCommand": "pnpm build",
"beforeDevCommand": "pnpm dev",
"frontendDist": "../dist",
"devUrl": "http://localhost:5173"
},
"bundle": {
"active": true,
"targets": "all",
"identifier": "com.example.myapp",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"resources": ["resources/*"],
"copyright": "Copyright (c) 2024 Example Corp.",
"category": "DeveloperTool",
"shortDescription": "My Tauri Application",
"longDescription": "A cross-platform desktop application built with Tauri",
"MacOS": {
"minimumSystemVersion": "10.13",
"entitlements": null,
"exceptionDomain": "",
"frameworks": [],
"providerShortName": null,
"signingIdentity": null
},
"windows": {
"certificateThumbprint": null,
"digestAlgorithm": "sha256",
"timestampUrl": "",
"wix": {
"language": "ja-JP"
},
"nsis": {
"installMode": "currentUser",
"languages": ["Japanese", "English"]
}
},
"linux": {
"deb": {
"depends": ["libwebkit2gtk-4.1-0"]
}
}
},
"productName": "My App",
"version": "1.0.0"
}
targetsの設定
targets には、生成するバンドル形式を指定する。
// 全ての形式を生成
"targets": "all"
// 特定の形式のみ生成
"targets": ["deb", "appimage"]
// 単一の形式
"targets": "msi"
identifierの設定
アプリケーション識別子は、逆ドメイン形式で指定する。
// 推奨形式
"identifier": "com.example.myapp"
// 組織の場合
"identifier": "org.company.product"
iconの設定
アイコンは各プラットフォームで必要な形式を指定する。
"icon": [
"icons/32x32.png", // Linux (小サイズ)
"icons/128x128.png", // Linux (中サイズ)
"icons/128x128@2x.png", // MacOS (Retina)
"icons/icon.icns", // MacOS アイコン
"icons/icon.ico" // Windows アイコン
]
resourcesの設定
バンドルに含めるリソースファイルを指定する。
// 全てのリソースを含める
"resources": ["resources/*"]
// 特定のファイルのみ
"resources": ["resources/config.json", "resources/data/*"]
// 複数のディレクトリ
"resources": ["assets/*", "data/*", "templates/*"]
プラットフォーム別設定
各プラットフォーム固有の設定項目を以下に示す。
MacOSの設定
"MacOS": {
"minimumSystemVersion": "10.13", // 最低バージョン
"entitlements": "entitlements.plist", // 権限設定
"signingIdentity": "Developer ID Application: Name", // 署名ID
"hardenedRuntime": true, // Hardened Runtime
"providerShortName": "ABCDEF" // Apple Provider ID
}
Windowsの設定
"windows": {
"certificateThumbprint": "ABC123...", // 証明書サムプリント
"digestAlgorithm": "sha256", // ダイジェストアルゴリズム
"timestampUrl": "http://timestamp.digicert.com", // タイムスタンプサーバ
"wix": {
"language": "ja-JP" // インストーラ言語
},
"nsis": {
"installMode": "currentUser", // インストールモード
"languages": ["Japanese", "English"]
}
}
Linuxの設定
"linux": {
"deb": {
"depends": ["libwebkit2gtk-4.1-0", "libssl3"],
"desktopTemplate": null
},
"appimage": {
"bundleMediaFramework": false
}
}
プラットフォーム固有設定ファイル
環境ごとに異なる設定を使用する場合、個別の設定ファイルを作成できる。
# プロジェクト構造 src-tauri/ ├── tauri.conf.json # 基本設定 ├── tauri.macos.conf.json # MacOS専用設定 ├── tauri.windows.conf.json # Windows専用設定 └── tauri.linux.conf.json # Linux専用設定
# 特定の設定ファイルでビルド pnpm tauri build --config src-tauri/tauri.macos.conf.json
アイコン設定
アイコンは各プラットフォームで異なる形式とサイズが要求される。
アイコン形式とサイズ
| プラットフォーム | 形式 | 必要なサイズ | 備考 |
|---|---|---|---|
| Windows | ICO | 256x256, 128x128, 64x64, 48x48, 32x32, 16x16 | マルチアイコン形式 |
| MacOS | ICNS | 512x512, 256x256, 128x128, 64x64, 32x32, 16x16 | Retina対応 (@2x) |
| Linux | PNG | 512x512, 256x256, 128x128, 64x64, 32x32 | フリーサイズ対応 |
アイコン生成コマンド
Tauri CLIを使用して、ソース画像から各プラットフォームのアイコンを自動生成できる。
# アイコンを自動生成 (1024x1024以上のPNG画像が必要) pnpm tauri icon ./path/to/source-icon.png # 出力先を指定 pnpm tauri icon ./path/to/source-icon.png --output ./src-tauri/icons
生成されるファイル構成を以下に示す。
src-tauri/icons/ ├── 32x32.png ├── 128x128.png ├── 128x128@2x.png ├── icon.icns # MacOS用 ├── icon.ico # Windows用 └── icon.svg # オプション
設定方法
生成したアイコンを tauri.conf.json ファイルに設定する。
{
"bundle": {
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}
手動作成時の注意点
アイコンを手動で作成する場合の注意事項を以下に示す。
- ソース画像は 1024x1024以上の解像度を推奨する。
- 低解像度からの拡大は画質が劣化する。
- PNG画像は透明度をサポートする必要がある。
- アルファチャンネルを含める。
- ICOファイルは複数サイズを含める必要がある。
- Windowsで適切に表示されない場合はサイズ不足の可能性がある。
- ICNSファイルはMacOS固有のツールで作成する。
iconutilコマンド またはsipsコマンドを使用する。
デバッグビルドとリリースビルド
Tauriでは、デバッグ用とリリース用で異なるビルドプロファイルを使用する。
特徴と違いの比較
| 項目 | デバッグビルド | リリースビルド |
|---|---|---|
| 最適化 | なし (高速コンパイル) | あり (実行速度優先) |
| ファイルサイズ | 大きい | 小さい |
| DevTools | 有効 | 無効 (設定で変更可能) |
| パニック時の挙動 | スタックトレース表示 | アプリケーション終了 |
| シンボル情報 | 含まれる | 削除される (strip) |
| ビルド時間 | 短い | 長い |
| 用途 | 開発・デバッグ | 本番配布 |
Cargo.tomlファイルのprofileの設定
Cargo.toml ファイルでリリースビルドの最適化設定を行う。
[profile.release]
# 最適化レベル
# s: サイズ優先, z: さらにサイズ優先, 3: 速度優先
opt-level = "s"
# リンク時最適化 (LTO) : サイズ削減に有効
lto = true
# コード生成ユニット数 (1にすると最適化が効く)
codegen-units = 1
# パニック時の挙動
# abort: 終了, unwind: スタック巻き戻し
panic = "abort"
# デバッグシンボルを削除
strip = true
設定オプションの詳細
| オプション | 値 | 説明 |
|---|---|---|
opt-level |
0〜3, "s", "z" | 最適化レベル "s": サイズ優先 "z": さらにサイズ優先 3: 速度優先 |
lto |
true, false, "thin" | リンク時最適化 true: 完全LTO "thin": 高速LTO |
codegen-units |
1〜256 | コード生成ユニット数 1: 最適化重視 16: 並列コンパイル重視 |
panic |
"abort", "unwind" | パニック時の挙動 "abort": 即座に終了 "unwind": スタック巻き戻し |
strip |
true, false, "symbols", "debuginfo" | シンボル削除 true: 全て削除 "debuginfo": デバッグ情報のみ削除 |
DevToolsの有効化/無効化方法
リリースビルドでDevToolsを有効にするには、tauri.conf.json ファイルで設定する。
{
"build": {
"withGlobalTauri": true
},
"tauri": {
"security": {
"devtools": true
}
}
}
または、Rustコードで制御することも可能である。
use tauri::Manager;
fn main() {
tauri::Builder::default()
.setup(|app| {
#[cfg(debug_assertions)]
{
// デバッグビルドのみDevToolsを開く
let window = app.get_window("main").unwrap();
window.open_devtools();
}
Ok(())
})
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
コード署名
配布するアプリケーションには、コード署名を行うことが推奨される。
Windows 署名
Windowsでは、Authenticode署名を使用する。
SignTool と Authenticode
Windowsのコード署名には、SignToolを使用する。
- 必要なもの
- コード署名証明書 (EV または OV)
- SignTool (Windows SDKに含まれる)
- タイムスタンプサーバのURL
tauri.conf.jsonファイルでの証明書設定例
{
"bundle": {
"windows": {
"certificateThumbprint": "ABC123DEF456...", // 証明書のサムプリント
"digestAlgorithm": "sha256", // ダイジェストアルゴリズム
"timestampUrl": "http://timestamp.digicert.com", // タイムスタンプサーバ
"wix": {
"language": "ja-JP"
}
}
}
}
環境変数による署名設定
環境変数を使用して署名設定を行うことも可能である。
# 環境変数を設定
export TAURI_SIGNING_PRIVATE_KEY="private-key-path"
export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="password"
# ビルド実行
pnpm tauri build
署名確認方法
# PowerShellで署名を確認
Get-AuthenticodeSignature "path/to/app.exe"
## または
signtool verify /pa "path/to/app.msi"
MacOS署名
MacOSでは、codesignとnotarizationが必要である。
codesignの基本
Apple Developer IDで署名を行う。
- 必要なもの
- Apple Developer Account
- Developer ID Application 証明書
- Xcode Command Line Tools
tauri.conf.jsonファイルでの設定例
{
"bundle": {
"MacOS": {
"signingIdentity": "Developer ID Application: Your Name (TEAM_ID)",
"hardenedRuntime": true,
"entitlements": "entitlements.plist",
"providerShortName": "TEAM_ID"
}
}
}
entitlements.plistファイルの作成
entitlements.plist ファイルでアプリケーションの権限を定義する。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- ネットワークアクセス -->
<key>com.apple.security.network.client</key>
<true/>
<!-- ファイル読み取り -->
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<!-- カメラアクセス (必要な場合) -->
<key>com.apple.security.device.camera</key>
<false/>
<!-- マイクアクセス (必要な場合) -->
<key>com.apple.security.device.audio-input</key>
<false/>
</dict>
</plist>
Notarization (公証)
MacOS 10.15以降、Gatekeeperを通過するためにNotarizationが必須である。
# 1. アプリを署名してビルド pnpm tauri build # 2. Appleに送信して、Notarizationをリクエスト xcrun notarytool submit "src-tauri/target/release/bundle/macos/MyApp.app.zip" \ --apple-id "your@email.com" \ --password "app-specific-password" \ --team-id "TEAM_ID" \ --wait # 3. Notarization完了後、Stapleを適用 xcrun stapler staple "src-tauri/target/release/bundle/macos/MyApp.app" </syntaxhighlight>
環境変数による署名設定
# Apple Developer認証情報を設定
export APPLE_ID="your@email.com"
export APPLE_PASSWORD="app-specific-password" # App-specific password
export APPLE_TEAM_ID="TEAM_ID"
# ビルド実行 (自動的に署名とNotarizationが行われる)
pnpm tauri build
署名確認方法
# 署名を確認 codesign --verify --deep --strict --verbose=2 "MyApp.app" # Notarizationを確認 spctl --assess --verbose --type exec "MyApp.app"
CI/CD連携 (GitHub Actions)
GitHub Actionsを使用して、複数プラットフォームの自動ビルドを行える。
tauri-apps/tauri-action の使用方法
Tauri公式のGitHub Actionを使用することで、簡単にCI/CDパイプラインを構築することができる。
マトリックスビルド設定例
.github/workflows/build.yml ファイルの設定例を以下に示す。
name: Build and Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest'
args: '--target universal-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Install dependencies (Ubuntu only)
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
- name: Install frontend dependencies
run: pnpm install
- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: ${{ github.ref_name }}
releaseName: 'MyApp ${{ github.ref_name }}'
releaseBody: 'See the assets to download and install this version.'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
MacOS署名用の証明書インポート例
MacOSでコード署名を行う場合、証明書をGitHub Secretsに登録して、ワークフローでインポートする必要がある。
# MacOS署名用の追加ステップ
- name: Import Apple Certificate
if: matrix.platform == 'macos-latest'
env:
CERTIFICATE_BASE64: ${{ secrets.APPLE_CERTIFICATE_BASE64 }}
CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
run: |
# 証明書を一時ファイルに作成
echo $CERTIFICATE_BASE64 | base64 --decode > certificate.p12
# キーチェーンにインポート
security create-keychain -p actions temp.keychain
security default-keychain -s temp.keychain
security unlock-keychain -p actions temp.keychain
security import certificate.p12 -k temp.keychain -P $CERTIFICATE_PASSWORD -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple: -s -k actions temp.keychain
# クリーンアップ
rm -f certificate.p12
Windows署名用の証明書インポート例
Windowsでコード署名を行う場合の設定例を以下に示す。
# Windows署名用の追加ステップ
- name: Import Windows Certificate
if: matrix.platform == 'windows-latest'
env:
CERTIFICATE_BASE64: ${{ secrets.WINDOWS_CERTIFICATE_BASE64 }}
CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
run: |
# 証明書を一時ファイルに作成
[System.IO.File]::WriteAllBytes("certificate.pfx", [System.Convert]::FromBase64String($env:CERTIFICATE_BASE64))
# 証明書をインストール
$pwd = ConvertTo-SecureString -String $env:CERTIFICATE_PASSWORD -Force -AsPlainText
Import-PfxCertificate -FilePath certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password $pwd
# クリーンアップ
Remove-Item -Path certificate.pfx -Force
必要なGitHub Secrets
下表に、CI/CDでコード署名を行うために必要なGitHub Secretsを示す。
| Secret名 | 説明 | プラットフォーム |
|---|---|---|
APPLE_CERTIFICATE_BASE64 |
Base64エンコードされた.p12証明書 | MacOS |
APPLE_CERTIFICATE_PASSWORD |
証明書のパスワード | MacOS |
APPLE_ID |
Apple ID (メールアドレス) | MacOS |
APPLE_PASSWORD |
App-specific password | MacOS |
APPLE_TEAM_ID |
Apple Developer Team ID | MacOS |
WINDOWS_CERTIFICATE_BASE64 |
Base64エンコードされた.pfx証明書 | Windows |
WINDOWS_CERTIFICATE_PASSWORD |
証明書のパスワード | Windows |
出力先とファイル構造
ビルド完了後、成果物は特定のディレクトリに出力される。
ビルド成果物の場所
| プラットフォーム | 成果物の場所 | 生成されるファイル |
|---|---|---|
| Linux | src-tauri/target/release/bundle/ | deb/, rpm/, appimage/ |
| Windows | src-tauri/target/release/ | .exe, bundle/msi/ |
| MacOS | src-tauri/target/release/bundle/ | macos/, dmg/ |
プロジェクト構造図
ビルド後の典型的なプロジェクト構造を以下に示す。
my-tauri-app/ ├── src/ # フロントエンドソース │ ├── App.tsx │ └── main.tsx ├── src-tauri/ # Rustバックエンド │ ├── src/ │ │ └── main.rs │ ├── tauri.conf.json │ ├── Cargo.toml │ ├── icons/ # アイコンファイル │ └── target/ # ビルド成果物 │ └── release/ │ ├── my-app # 実行可能ファイル │ └── bundle/ │ ├── deb/ │ │ └── my-app_1.0.0_amd64.deb │ ├── appimage/ │ │ └── my-app_1.0.0_amd64.AppImage │ ├── msi/ │ │ └── My App_1.0.0_x64.msi │ ├── nsis/ │ │ └── My App_1.0.0_x64-setup.exe │ ├── macos/ │ │ └── My App.app │ └── dmg/ │ └── My App_1.0.0_x64.dmg ├── package.json └── pnpm-lock.yaml
プラットフォーム別出力例
各プラットフォームで生成されるファイル名の例を以下に示す。
Linux
src-tauri/target/release/bundle/
├── deb/
│ └── my-app_1.0.0_amd64.deb
├── rpm/
│ └── my-app-1.0.0-1.x86_64.rpm
└── appimage/
└── my-app_1.0.0_amd64.AppImage
Windows
src-tauri/target/release/
├── my-app.exe # スタンドアロン実行ファイル
└── bundle/
├── msi/
│ └── My App_1.0.0_x64.msi
└── nsis/
└── My App_1.0.0_x64-setup.exe
MacOS
src-tauri/target/release/bundle/
├── macos/
│ └── My App.app/ # アプリケーションバンドル
│ └── Contents/
│ ├── MacOS/
│ │ └── My App
│ ├── Resources/
│ └── Info.plist
└── dmg/
└── My App_1.0.0_x64.dmg
トラブルシューティング
よくある問題と解決方法
| 問題 | 原因 | 解決方法 |
|---|---|---|
| ビルドが失敗する | 依存関係の不足 | 必要なライブラリをインストールする。 |
| アイコンが表示されない | アイコン形式/サイズの不一致 | 正しい形式とサイズのアイコンを用意する。 |
| ファイルサイズが大きい | 最適化不足 | Cargo.tomlファイルで最適化設定を確認する。 |
| MacOSでアプリが起動しない | 署名 / Notarizationの問題 | codesign と notarytool を確認する。 |
| WindowsでSmartScreen警告 | コード署名なし | Authenticode署名を行う。 |
| LinuxでWebViewエラー | WebKit依存関係の不足 | libwebkit2gtkライブラリをインストールする。 |
依存関係の問題
Linux
# RHEL
## 開発ツールグループのインストール
sudo dnf group install "Development Tools"
## 各種ライブラリのインストール
sudo dnf install curl wget openssl-devel gtk3-devel webkit2gtk4.1-devel libayatana-appindicator-gtk3-devel \
librsvg2-devel
# SUSE
sudo zypper install curl wget make gcc libopenssl-devel gtk3-devel webkit2gtk4.1-devel libayatana-appindicator3-devel \
librsvg-devel
# Debian
sudo apt update
sudo apt install curl wget build-essential libssl-dev libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev \
librsvg2-dev
または、Tauriが提供するスクリプトを使用してインストールする。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
MacOS
# Xcode Command Line Tools をインストール xcode-select --install # Rust をインストール curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Windows
まず、Microsoft Visual C++ Build Toolsをインストールする。
次に、Rustをインストールする。
アイコンが表示されない問題
アイコンが正しく表示されない場合の確認事項を示す。
- ファイルパスが正しいか確認する
- tauri.conf.json ファイルの
icon設定を確認する。
- tauri.conf.json ファイルの
- アイコンサイズが適切か確認する。
- 1024x1024以上のソース画像を使用する。
- ファイル形式が正しいか確認する。
- Windows: ICO
- MacOS: ICNS
- Linux: PNG
ビルドエラーの対処法
Rustコンパイルエラー
# 詳細なエラー情報を表示 RUST_BACKTRACE=1 pnpm tauri build # Cargo の詳細ログ CARGO_LOG=cargo::core::compiler::fingerprint=info pnpm tauri build
フロントエンドビルドエラー
フロントエンドを単独でビルドして確認する。
pnpm build
または、キャッシュをクリアして再ビルドする。
rm -rf node_modules dist pnpm install pnpm build
依存関係の問題
Cargo.lockファイルを削除して再ビルドする。
rm -rf src-tauri/Cargo.lock src-tauri/target pnpm tauri build </syntaxhighlight>
診断コマンド
問題の診断に使用できるコマンドを以下に示す。
# Tauri環境情報を表示 pnpm tauri info # Rust のバージョン確認 rustc --version cargo --version # Node.js / pnpm のバージョン確認 node --version pnpm --version # インストール済みのRustターゲット一覧 rustup target list --installed # クリーンビルド pnpm tauri build --verbose
参考リンク
- Tauri公式ドキュメント - Building
- Tauri公式ドキュメント - Distributing
- Tauri公式ドキュメント - Reducing App Size
- tauri-action (GitHub Actions)
- Tauri公式ドキュメント - Code Signing
- Tauriの基礎 - プロジェクト構造
- Tauriの基礎 - 設定ファイル