MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Tauriの基礎 - ビルドと配布のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Tauriの基礎 - ビルドと配布
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Tauriは、RustバックエンドとWebフロントエンドを組み合わせたデスクトップアプリケーション開発フレームワークである。<br> <br> ビルドシステムは、RustのコンパイルとWebアセットのバンドルを自動的に統合し、各プラットフォームに最適化された配布形式を生成する。<br> <br> 主な特徴は以下の通りである。<br> * クロスプラットフォームビルド *: Windows (msi, exe)、MacOS (app, dmg)、Linux (deb, rpm, AppImage) に対応する。 * 軽量なバイナリ *: Rustの最適化により、小さなファイルサイズで配布できる。 * 複数のバンドル形式 *: プラットフォームごとに適切なインストーラ形式を選択できる。 * CI/CD連携 *: GitHub Actionsと連携した自動ビルドが可能である。 <br> Tauriのビルドプロセスでは、フロントエンドのビルド (Vite, webpack等)、Rustバックエンドのコンパイル、およびバンドル作成が一連のフローで実行される。<br> <br><br> == ビルドコマンド == Tauriのビルドは、<code>tauri build</code> コマンドを実行する。<br> <br> ==== 基本構文 ==== ビルドコマンドの基本構文を以下に示す。<br> <br> # 基本的なビルド実行 pnpm tauri build # 特定の設定ファイルを指定 pnpm tauri build --config src-tauri/tauri.production.conf.json # バンドルを作成せずにバイナリのみビルド pnpm tauri build --no-bundle # デバッグビルド pnpm tauri build --debug <br> ==== パッケージマネージャ別の実行方法 ==== 使用するパッケージマネージャに応じて、コマンドが異なる。<br> <br> <center> {| class="wikitable" |+ パッケージマネージャ別のビルドコマンド ! パッケージマネージャ !! コマンド !! 備考 |- | npm || <code>npm run tauri build</code> || <u>package.json</u> ファイルの <code>scripts</code> に定義が必要 |- | yarn || <code>yarn tauri build</code> || Yarn v1 / v2 / v3 対応 |- | pnpm || <code>pnpm tauri build</code> || 推奨パッケージマネージャ |- | bun || <code>bun tauri build</code> || 高速なパッケージマネージャ |- | cargo || <code>cargo tauri build</code> || Rust専用 (フロントエンドは別途ビルド) |} </center> <br> ==== 主要オプション一覧 ==== 下表に、<code>tauri build</code> コマンドの主要オプションを示す。<br> <br> <center> {| class="wikitable" |+ tauri buildコマンドのオプション一覧 ! オプション !! 説明 !! 使用例 |- | <code>--config</code> || 設定ファイルを指定する || --config tauri.prod.conf.json |- | <code>--target</code> || ビルドターゲットを指定する || --target x86_64-pc-windows-msvc |- | <code>--features</code> || Cargo featuresを有効化する || --features custom-protocol |- | <code>--no-bundle</code> || バンドルを作成しない || --no-bundle |- | <code>--debug</code> || デバッグモードでビルドする || --debug |- | <code>--bundles</code> || 生成するバンドル形式を指定する || --bundles msi,nsis |- | <code>--verbose</code> || 詳細なログを出力する || -v または --verbose |} </center> <br> ==== tauri build と tauri bundleの使い分け ==== <code>tauri build</code> と <code>tauri bundle</code> は用途が異なる。<br> <br> <center> {| class="wikitable" |+ コマンドの使い分け ! コマンド !! 用途 !! 実行内容 |- | <code>tauri build</code> || アプリケーションの完全ビルド || フロントエンドビルド + Rustコンパイル + バンドル作成 |- | <code>tauri bundle</code> || バンドルのみ作成 || 既存のバイナリからバンドルを作成 |} </center> <br> <code>tauri bundle</code> コマンドは、バイナリが既に存在する場合にバンドル形式のみを作成する時に使用する。<br> <br> # 特定のバンドル形式のみ作成 pnpm tauri bundle --bundles app,dmg # MacOS pnpm tauri bundle --bundles msi,nsis # Windows pnpm tauri bundle --bundles deb,appimage # Linux <br><br> == バンドル形式 == Tauriは各プラットフォームに対応した複数のバンドル形式をサポートしている。<br> <br> ==== プラットフォーム別バンドル形式 ==== <center> {| class="wikitable" |+ プラットフォーム別バンドル形式一覧 ! プラットフォーム !! バンドル形式 !! 拡張子 !! 説明 |- | 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ディスクイメージ |} </center> <br> ==== Linux バンドル形式 ==== Linuxでは、3つのバンドル形式から選択できる。<br> <br> ===== rpm (RPM Package) ===== Red Hat/Fedora系ディストリビューション向けのパッケージ形式である。<br> <br> * 対象ディストリビューション *: RHEL, SUSE等 *: <br> * 特徴 *: パッケージマネージャ (dnf, zypper) で管理できる。 *: 依存関係が自動的に解決される。 *: エンタープライズ環境で広く使用される。 *: <br> * 選択基準 *: RHEL / SUSEユーザを対象とする場合に選択する。 <br> ===== deb (Debian Package) ===== Debian系ディストリビューション向けのパッケージ形式である。<br> <br> * 対象ディストリビューション *: Debian, Ubuntu, Linux Mint, Pop!_OS等 *: <br> * 特徴 *: パッケージマネージャ (apt) で管理できる。 *: 依存関係が自動的に解決される。 *: システムへの統合が容易である。 *: <br> * 選択基準 *: Debian系ユーザを主な対象とする場合に選択する。 <br> ===== AppImage ===== ポータブルな実行形式で、インストール不要で実行できる。<br> <br> * 対象環境 *: 全てのLinuxディストリビューション *: <br> * 特徴 *: インストール不要 *: 単一ファイルで配布可能 *: 実行権限を付与するだけで動作する。 *: サンドボックス機能を内蔵 *: <br> * 選択基準 *: 幅広いユーザへの配布や、ポータブル版が必要な場合に選択する。 <br> ==== Windowsバンドル形式 ==== Windowsでは、2つのインストーラ形式から選択できる。<br> <br> ===== msi (Windows Installer - WiX) ===== Microsoft標準のインストーラ形式である。<br> <br> * 特徴 *: Windows標準のインストーラ *: グループポリシーでの配布が可能 *: エンタープライズ環境での展開に適している。 *: サイレントインストール対応 *: <br> * 選択基準 *: 企業環境での配布、システム管理が必要な場合に選択する。 <br> ===== exe (NSIS) ===== NSIS (Nullsoft Scriptable Install System) ベースのインストーラである。<br> <br> * 特徴 *: カスタマイズ性が高い。 *: インストーラのUIを自由に設計可能 *: ファイルサイズが比較的小さい。 *: <br> * 選択基準 *: カスタムインストーラが必要な場合に選択する。 <br> ==== MacOSバンドル形式 ==== MacOSでは、アプリケーションバンドルとディスクイメージ形式をサポートする。<br> <br> ===== app (Application Bundle) ===== MacOS標準のアプリケーション形式である。<br> <br> * 特徴 *: MacOS標準のアプリケーション形式 *: Finderから直接起動可能 *: Applicationsフォルダにドラッグ&ドロップでインストール *: <br> * 選択基準 *: 開発用または直接配布する場合に選択する。 <br> ===== dmg (Disk Image) ===== MacOSのディスクイメージ形式で、配布に適している。<br> <br> * 特徴 *: MacOS標準の配布形式 *: 圧縮によりファイルサイズを削減可能 *: インストールUIをカスタマイズ可能 *: <br> * 選択基準 *: 一般ユーザへの配布に選択する。 <br> ===== Universal Binary ===== Intel MacとApple Silicon Macの両方で動作するバイナリである。<br> <br> * 特徴 *: x86_64とaarch64の両方のアーキテクチャに対応 *: 単一のファイルで全てのMacに対応可能 *: ファイルサイズが増加する。 *: <br> * 作成方法 *: Rustターゲットを追加してビルドする。 <br> # 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> <br><br> == tauri.conf.jsonファイルの設定 == ビルド設定は、<u>tauri.conf.json</u> ファイルの <code>bundle</code> セクションで行う。<br> <br> ==== bundleセクションの基本構造 ==== <code>bundle</code> セクションの基本的な構造を以下に示す。<br> <br> <center> {| class="wikitable" |+ bundle セクションの主要設定項目 ! 設定項目 !! 型 !! 説明 |- | <code>active</code> || boolean || バンドル作成の有効/無効 |- | <code>targets</code> || string / array || 生成するバンドル形式 |- | <code>identifier</code> || string || アプリケーション識別子 (逆ドメイン形式) |- | <code>icon</code> || array || アイコンファイルのパス |- | <code>resources</code> || array || バンドルに含めるリソース |- | <code>copyright</code> || string || 著作権情報 |- | <code>category</code> || string || アプリケーションカテゴリ |- | <code>shortDescription</code> || string || 短い説明 |- | <code>longDescription</code> || string || 詳細な説明 |} </center> <br> ==== 設定例 ==== <u>tauri.conf.json</u> ファイルの設定例を以下に示す。<br> <br> <syntaxhighlight lang="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" } </syntaxhighlight> <br> ==== targetsの設定 ==== <code>targets</code> には、生成するバンドル形式を指定する。<br> <br> <syntaxhighlight lang="javascript"> // 全ての形式を生成 "targets": "all" // 特定の形式のみ生成 "targets": ["deb", "appimage"] // 単一の形式 "targets": "msi" </syntaxhighlight> <br> ==== identifierの設定 ==== アプリケーション識別子は、逆ドメイン形式で指定する。<br> <br> <syntaxhighlight lang="javascript"> // 推奨形式 "identifier": "com.example.myapp" // 組織の場合 "identifier": "org.company.product" </syntaxhighlight> <br> ==== iconの設定 ==== アイコンは各プラットフォームで必要な形式を指定する。<br> <br> <syntaxhighlight lang="javascript"> "icon": [ "icons/32x32.png", // Linux (小サイズ) "icons/128x128.png", // Linux (中サイズ) "icons/128x128@2x.png", // MacOS (Retina) "icons/icon.icns", // MacOS アイコン "icons/icon.ico" // Windows アイコン ] </syntaxhighlight> <br> ==== resourcesの設定 ==== バンドルに含めるリソースファイルを指定する。<br> <br> <syntaxhighlight lang="javascript"> // 全てのリソースを含める "resources": ["resources/*"] // 特定のファイルのみ "resources": ["resources/config.json", "resources/data/*"] // 複数のディレクトリ "resources": ["assets/*", "data/*", "templates/*"] </syntaxhighlight> <br> ==== プラットフォーム別設定 ==== 各プラットフォーム固有の設定項目を以下に示す。<br> <br> ===== MacOSの設定 ===== <syntaxhighlight lang="javascript"> "MacOS": { "minimumSystemVersion": "10.13", // 最低バージョン "entitlements": "entitlements.plist", // 権限設定 "signingIdentity": "Developer ID Application: Name", // 署名ID "hardenedRuntime": true, // Hardened Runtime "providerShortName": "ABCDEF" // Apple Provider ID } </syntaxhighlight> <br> ===== Windowsの設定 ===== <syntaxhighlight lang="javascript"> "windows": { "certificateThumbprint": "ABC123...", // 証明書サムプリント "digestAlgorithm": "sha256", // ダイジェストアルゴリズム "timestampUrl": "http://timestamp.digicert.com", // タイムスタンプサーバ "wix": { "language": "ja-JP" // インストーラ言語 }, "nsis": { "installMode": "currentUser", // インストールモード "languages": ["Japanese", "English"] } } </syntaxhighlight> <br> ===== Linuxの設定 ===== <syntaxhighlight lang="json"> "linux": { "deb": { "depends": ["libwebkit2gtk-4.1-0", "libssl3"], "desktopTemplate": null }, "appimage": { "bundleMediaFramework": false } } </syntaxhighlight> <br> ==== プラットフォーム固有設定ファイル ==== 環境ごとに異なる設定を使用する場合、個別の設定ファイルを作成できる。<br> <br> # プロジェクト構造 src-tauri/ ├── tauri.conf.json # 基本設定 ├── tauri.macos.conf.json # MacOS専用設定 ├── tauri.windows.conf.json # Windows専用設定 └── tauri.linux.conf.json # Linux専用設定 <br> # 特定の設定ファイルでビルド pnpm tauri build --config src-tauri/tauri.macos.conf.json <br><br> == アイコン設定 == アイコンは各プラットフォームで異なる形式とサイズが要求される。<br> <br> ==== アイコン形式とサイズ ==== <center> {| class="wikitable" |+ プラットフォーム別アイコン要件 ! プラットフォーム !! 形式 !! 必要なサイズ !! 備考 |- | 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 || フリーサイズ対応 |} </center> <br> ==== アイコン生成コマンド ==== Tauri CLIを使用して、ソース画像から各プラットフォームのアイコンを自動生成できる。<br> <br> # アイコンを自動生成 (1024x1024以上のPNG画像が必要) pnpm tauri icon ./path/to/source-icon.png # 出力先を指定 pnpm tauri icon ./path/to/source-icon.png --output ./src-tauri/icons <br> 生成されるファイル構成を以下に示す。<br> <br> src-tauri/icons/ ├── 32x32.png ├── 128x128.png ├── 128x128@2x.png ├── icon.icns # MacOS用 ├── icon.ico # Windows用 └── icon.svg # オプション <br> ==== 設定方法 ==== 生成したアイコンを <u>tauri.conf.json</u> ファイルに設定する。<br> <br> <syntaxhighlight lang="json"> { "bundle": { "icon": [ "icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico" ] } } </syntaxhighlight> <br> ==== 手動作成時の注意点 ==== アイコンを手動で作成する場合の注意事項を以下に示す。<br> <br> * ソース画像は 1024x1024以上の解像度を推奨する。 *: 低解像度からの拡大は画質が劣化する。 *: <br> * PNG画像は透明度をサポートする必要がある。 *: アルファチャンネルを含める。 *: <br> * ICOファイルは複数サイズを含める必要がある。 *: Windowsで適切に表示されない場合はサイズ不足の可能性がある。 *: <br> * ICNSファイルはMacOS固有のツールで作成する。 *: <code>iconutil</code> コマンド または <code>sips</code> コマンドを使用する。 <br><br> == デバッグビルドとリリースビルド == Tauriでは、デバッグ用とリリース用で異なるビルドプロファイルを使用する。<br> <br> ==== 特徴と違いの比較 ==== <center> {| class="wikitable" |+ デバッグビルドとリリースビルドの比較 ! 項目 !! デバッグビルド !! リリースビルド |- | 最適化 || なし (高速コンパイル) || あり (実行速度優先) |- | ファイルサイズ || 大きい || 小さい |- | DevTools || 有効 || 無効 (設定で変更可能) |- | パニック時の挙動 || スタックトレース表示 || アプリケーション終了 |- | シンボル情報 || 含まれる || 削除される (strip) |- | ビルド時間 || 短い || 長い |- | 用途 || 開発・デバッグ || 本番配布 |} </center> <br> ==== Cargo.tomlファイルのprofileの設定 ==== <u>Cargo.toml</u> ファイルでリリースビルドの最適化設定を行う。<br> <br> <syntaxhighlight lang="toml"> [profile.release] # 最適化レベル # s: サイズ優先, z: さらにサイズ優先, 3: 速度優先 opt-level = "s" # リンク時最適化 (LTO) : サイズ削減に有効 lto = true # コード生成ユニット数 (1にすると最適化が効く) codegen-units = 1 # パニック時の挙動 # abort: 終了, unwind: スタック巻き戻し panic = "abort" # デバッグシンボルを削除 strip = true </syntaxhighlight> <br> ==== 設定オプションの詳細 ==== <center> {| class="wikitable" |+ profile.release 設定オプション ! オプション !! 値 !! 説明 |- | <code>opt-level</code> || 0〜3, "s", "z" || 最適化レベル<br>"s": サイズ優先<br>"z": さらにサイズ優先<br>3: 速度優先 |- | <code>lto</code> || true, false, "thin" || リンク時最適化<br>true: 完全LTO<br>"thin": 高速LTO |- | <code>codegen-units</code> || 1〜256 || コード生成ユニット数<br>1: 最適化重視<br>16: 並列コンパイル重視 |- | <code>panic</code> || "abort", "unwind" || パニック時の挙動<br>"abort": 即座に終了<br>"unwind": スタック巻き戻し |- | <code>strip</code> || true, false, "symbols", "debuginfo" || シンボル削除<br>true: 全て削除<br>"debuginfo": デバッグ情報のみ削除 |} </center> <br> ==== DevToolsの有効化/無効化方法 ==== リリースビルドでDevToolsを有効にするには、<u>tauri.conf.json</u> ファイルで設定する。<br> <br> <syntaxhighlight lang="json"> { "build": { "withGlobalTauri": true }, "tauri": { "security": { "devtools": true } } } </syntaxhighlight> <br> または、Rustコードで制御することも可能である。<br> <br> <syntaxhighlight lang="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"); } </syntaxhighlight> <br><br> == コード署名 == 配布するアプリケーションには、コード署名を行うことが推奨される。<br> <br> ==== Windows 署名 ==== Windowsでは、Authenticode署名を使用する。<br> <br> ===== SignTool と Authenticode ===== Windowsのコード署名には、SignToolを使用する。<br> <br> * 必要なもの ** コード署名証明書 (EV または OV) ** SignTool (Windows SDKに含まれる) ** タイムスタンプサーバのURL <br> ===== tauri.conf.jsonファイルでの証明書設定例 ===== <syntaxhighlight lang="javascript"> { "bundle": { "windows": { "certificateThumbprint": "ABC123DEF456...", // 証明書のサムプリント "digestAlgorithm": "sha256", // ダイジェストアルゴリズム "timestampUrl": "http://timestamp.digicert.com", // タイムスタンプサーバ "wix": { "language": "ja-JP" } } } } </syntaxhighlight> <br> ===== 環境変数による署名設定 ===== 環境変数を使用して署名設定を行うことも可能である。<br> <br> <syntaxhighlight lang="sh"> # 環境変数を設定 export TAURI_SIGNING_PRIVATE_KEY="private-key-path" export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="password" # ビルド実行 pnpm tauri build </syntaxhighlight> <br> ===== 署名確認方法 ===== <syntaxhighlight lang="powershell"> # PowerShellで署名を確認 Get-AuthenticodeSignature "path/to/app.exe" ## または signtool verify /pa "path/to/app.msi" </syntaxhighlight> <br> ==== MacOS署名 ==== MacOSでは、codesignとnotarizationが必要である。<br> <br> ===== codesignの基本 ===== Apple Developer IDで署名を行う。<br> <br> * 必要なもの ** Apple Developer Account ** Developer ID Application 証明書 ** Xcode Command Line Tools <br> ===== tauri.conf.jsonファイルでの設定例 ===== <syntaxhighlight lang="json"> { "bundle": { "MacOS": { "signingIdentity": "Developer ID Application: Your Name (TEAM_ID)", "hardenedRuntime": true, "entitlements": "entitlements.plist", "providerShortName": "TEAM_ID" } } } </syntaxhighlight> <br> ===== entitlements.plistファイルの作成 ===== <u>entitlements.plist</u> ファイルでアプリケーションの権限を定義する。<br> <br> <syntaxhighlight lang="xml"> <?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> </syntaxhighlight> <br> ===== Notarization (公証) ===== MacOS 10.15以降、Gatekeeperを通過するためにNotarizationが必須である。<br> <br> # 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> <br> ===== 環境変数による署名設定 ===== <syntaxhighlight lang="sh"> # 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 </syntaxhighlight> <br> ===== 署名確認方法 ===== # 署名を確認 codesign --verify --deep --strict --verbose=2 "MyApp.app" # Notarizationを確認 spctl --assess --verbose --type exec "MyApp.app" <br><br> == CI/CD連携 (GitHub Actions) == GitHub Actionsを使用して、複数プラットフォームの自動ビルドを行える。<br> <br> ==== tauri-apps/tauri-action の使用方法 ==== Tauri公式のGitHub Actionを使用することで、簡単にCI/CDパイプラインを構築することができる。<br> <br> ==== マトリックスビルド設定例 ==== <u>.github/workflows/build.yml</u> ファイルの設定例を以下に示す。<br> <br> <syntaxhighlight lang="yaml"> 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 }} </syntaxhighlight> <br> ==== MacOS署名用の証明書インポート例 ==== MacOSでコード署名を行う場合、証明書をGitHub Secretsに登録して、ワークフローでインポートする必要がある。<br> <br> <syntaxhighlight lang="yaml"> # 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 </syntaxhighlight> <br> ==== Windows署名用の証明書インポート例 ==== Windowsでコード署名を行う場合の設定例を以下に示す。<br> <br> <syntaxhighlight lang="yaml"> # 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 </syntaxhighlight> <br> ==== 必要なGitHub Secrets ==== 下表に、CI/CDでコード署名を行うために必要なGitHub Secretsを示す。<br> <br> <center> {| class="wikitable" |+ GitHub Secrets 一覧 ! Secret名 !! 説明 !! プラットフォーム |- | <code>APPLE_CERTIFICATE_BASE64</code> || Base64エンコードされた.p12証明書 || MacOS |- | <code>APPLE_CERTIFICATE_PASSWORD</code> || 証明書のパスワード || MacOS |- | <code>APPLE_ID</code> || Apple ID (メールアドレス) || MacOS |- | <code>APPLE_PASSWORD</code> || App-specific password || MacOS |- | <code>APPLE_TEAM_ID</code> || Apple Developer Team ID || MacOS |- | <code>WINDOWS_CERTIFICATE_BASE64</code> || Base64エンコードされた.pfx証明書 || Windows |- | <code>WINDOWS_CERTIFICATE_PASSWORD</code> || 証明書のパスワード || Windows |} </center> <br><br> == 出力先とファイル構造 == ビルド完了後、成果物は特定のディレクトリに出力される。<br> <br> ==== ビルド成果物の場所 ==== <center> {| class="wikitable" |+ プラットフォーム別ビルド成果物の場所 ! プラットフォーム !! 成果物の場所 !! 生成されるファイル |- | Linux || <u>src-tauri/target/release/bundle/</u> || <u>deb/</u>, <u>rpm/</u>, <u>appimage/</u> |- | Windows || <u>src-tauri/target/release/</u> || <u>.exe</u>, <u>bundle/msi/</u> |- | MacOS || <u>src-tauri/target/release/bundle/</u> || <u>macos/</u>, <u>dmg/</u> |} </center> <br> ==== プロジェクト構造図 ==== ビルド後の典型的なプロジェクト構造を以下に示す。<br> <br> 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 <br> ==== プラットフォーム別出力例 ==== 各プラットフォームで生成されるファイル名の例を以下に示す。<br> <br> ===== 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 <br> ===== 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 <br> ===== 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 <br><br> == トラブルシューティング == ==== よくある問題と解決方法 ==== <center> {| class="wikitable" |+ トラブルシューティング一覧 ! 問題 !! 原因 !! 解決方法 |- | ビルドが失敗する || 依存関係の不足 || 必要なライブラリをインストールする。 |- | アイコンが表示されない || アイコン形式/サイズの不一致 || 正しい形式とサイズのアイコンを用意する。 |- | ファイルサイズが大きい || 最適化不足 || Cargo.tomlファイルで最適化設定を確認する。 |- | MacOSでアプリが起動しない || 署名 / Notarizationの問題 || codesign と notarytool を確認する。 |- | WindowsでSmartScreen警告 || コード署名なし || Authenticode署名を行う。 |- | LinuxでWebViewエラー || WebKit依存関係の不足 || libwebkit2gtkライブラリをインストールする。 |} </center> <br> ==== 依存関係の問題 ==== ===== 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 <br> または、Tauriが提供するスクリプトを使用してインストールする。<br> <br> curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh <br> ===== MacOS ===== # Xcode Command Line Tools をインストール xcode-select --install # Rust をインストール curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh <br> ===== Windows ===== まず、Microsoft Visual C++ Build Toolsをインストールする。<br> * https://visualstudio.microsoft.com/visual-cpp-build-tools/ <br> 次に、Rustをインストールする。<br> * https://rustup.rs/ <br> ==== アイコンが表示されない問題 ==== アイコンが正しく表示されない場合の確認事項を示す。<br> <br> * ファイルパスが正しいか確認する *: <u>tauri.conf.json</u> ファイルの <code>icon</code> 設定を確認する。 *: <br> * アイコンサイズが適切か確認する。 *: 1024x1024以上のソース画像を使用する。 *: <br> * ファイル形式が正しいか確認する。 *: Windows: ICO *: MacOS: ICNS *: Linux: PNG <br> ==== ビルドエラーの対処法 ==== ===== Rustコンパイルエラー ===== # 詳細なエラー情報を表示 RUST_BACKTRACE=1 pnpm tauri build # Cargo の詳細ログ CARGO_LOG=cargo::core::compiler::fingerprint=info pnpm tauri build <br> ===== フロントエンドビルドエラー ===== フロントエンドを単独でビルドして確認する。<br> <br> pnpm build <br> または、キャッシュをクリアして再ビルドする。<br> <br> rm -rf node_modules dist pnpm install pnpm build <br> ===== 依存関係の問題 ===== Cargo.lockファイルを削除して再ビルドする。<br> <br> rm -rf src-tauri/Cargo.lock src-tauri/target pnpm tauri build </syntaxhighlight> <br> ==== 診断コマンド ==== 問題の診断に使用できるコマンドを以下に示す。<br> <br> # 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 <br><br> == 参考リンク == * [https://tauri.app/v1/guides/building/ Tauri公式ドキュメント - Building] * [https://tauri.app/v1/guides/distribute/ Tauri公式ドキュメント - Distributing] * [https://tauri.app/v1/guides/building/sizes/ Tauri公式ドキュメント - Reducing App Size] * [https://github.com/tauri-apps/tauri-action tauri-action (GitHub Actions)] * [https://tauri.app/v1/guides/distribute/sign/ Tauri公式ドキュメント - Code Signing] * [[Tauriの基礎 - プロジェクト構造]] * [[Tauriの基礎 - 設定ファイル]] <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Tauri,Rust,Desktop Application,Build,Bundle,Distribute,msi,dmg,deb,AppImage,Code Signing,CI/CD,openSUSE,Leap,Linux |description={{PAGENAME}} - Tauriアプリケーションのビルドと配布に関する設定・手順ガイド | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Rust]]
Tauriの基礎 - ビルドと配布
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse