building-tauri-with-github-actions について
Tauri アプリ向けに GitHub Actions の CI/CD を設定するためのスキルです。開発者が tauri-apps/tauri-action を使い、複数プラットフォームのビルドや検証、リリースを自動化する際に役立ちます。
主な機能
- 01複数プラットフォームのビルドマトリクス
- 02リリースと成果物のワークフロー
- 03Rust と Node.js のキャッシュ
- 04署名と権限の設定ガイド
活用シーン
- 01ブランチやタグを起点にした Tauri アプリのリリース自動化
- 02プルリクエストのビルドと検証
- 03署名付き macOS・Windows リリースの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dchuk/ claude-code-tauri-skills --skill building-tauri-with-github-actionsインストール後、Claude Code で/building-tauri-with-github-actionsを入力して読み込まれたか確認します。
詳細
GitHub Actions で Tauri アプリをビルドする
このスキルでは、GitHub Actions と公式の tauri-apps/tauri-action を使用して、Tauri アプリケーションの CI/CD パイプラインを設定する方法を説明します。
概要
GitHub Actions を使用すると、Windows、macOS、Linux の各プラットフォームにおける Tauri アプリケーションのビルド、テスト、リリースを自動化できます。tauri-action は、クロスプラットフォームビルドとリリース管理の複雑さを処理します。
ワークフローのトリガー
リリースブランチへのプッシュ
name: 'publish'
on:
workflow_dispatch:
push:
branches:
- release
タグベースのリリース
name: 'publish'
on:
push:
tags:
- 'app-v*'
プラットフォームマトリックスの設定
標準的なマルチプラットフォームマトリックス
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest'
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest'
args: '--target x86_64-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
ARM Linux のサポートを追加する場合(パブリックリポジトリのみ)
ネイティブ ARM64 Linux ビルドを行うには、マトリックスに ubuntu-22.04-arm を追加します(パブリックリポジトリのみ)。
ワークフローの完全な例
name: 'publish'
on:
workflow_dispatch:
push:
branches:
- release
jobs:
publish-tauri:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest'
args: '--target aarch64-apple-darwin'
- platform: 'macos-latest'
args: '--target x86_64-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- 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 libappindicator3-dev librsvg2-dev patchelf
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'npm'
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Install frontend dependencies
run: npm ci
- name: Build and release
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
パッケージマネージャーの種類
pnpm
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: latest
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'pnpm'
- name: Install frontend dependencies
run: pnpm install
Yarn
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'yarn'
- name: Install frontend dependencies
run: yarn install --frozen-lockfile
キャッシュ戦略
Rust 成果物のキャッシュ
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
Node.js 依存関係のキャッシュ
actions/setup-node@v4 の cache パラメーターで設定します:'npm'、'yarn'、または 'pnpm'。
Linux の依存関係
Ubuntu では、WebKit と関連ライブラリが必要です。
- 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 libappindicator3-dev librsvg2-dev patchelf
リリースの自動化
tauri-action の設定
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__
releaseName: 'App v__VERSION__'
releaseBody: 'See the assets to download this version and install.'
releaseDraft: true
prerelease: false
args: ${{ matrix.args }}
バージョンのプレースホルダー
このアクションは、tauri.conf.json のアプリバージョンで __VERSION__ を自動的に置き換えます。
リリースオプション
| オプション | 説明 |
|---|---|
tagName | リリースの Git タグ(__VERSION__ プレースホルダーをサポート) |
releaseName | リリースの表示名 |
releaseBody | リリースノートの内容 |
releaseDraft | ドラフトリリースとして作成するかどうか(true/false) |
prerelease | プレリリースとしてマークするかどうか(true/false) |
成果物のアップロード
リリースせずにビルド成果物をアップロードする
- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
id: tauri
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: tauri-build-${{ matrix.platform }}
path: src-tauri/target/release/bundle/
GitHub トークンの設定
GITHUB_TOKEN には、リリース作成のための書き込み権限が必要です。
リポジトリの設定
- Settings > Actions > General に移動します
- 「Workflow permissions」で
- 「Read and write permissions」を選択します
- 保存します
ワークフローの権限
jobs:
publish-tauri:
permissions:
contents: write
ルート以外にあるプロジェクトの設定
Tauri がリポジトリのルートにないプロジェクトの場合:
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
projectPath: './apps/desktop'
tagName: app-v__VERSION__
releaseName: 'App v__VERSION__'
ARM ビルドのエミュレーション(代替方法)
プライベートリポジトリで ARM ビルドを行う場合や、ネイティブ ARM ランナーを使用できない場合:
jobs:
build-arm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build ARM64
uses: pguyot/[email protected]
with:
base_image: dietpi:rpi_armv8_bullseye
commands: |
apt-get update
apt-get install -y curl build-essential libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt-get install -y nodejs
npm ci
npm run tauri build
注:新規プロジェクトの ARM エミュレーションビルドには、約 1 時間かかります。
コード署名の統合
macOS 署名の環境変数
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
Windows 署名の環境変数
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
CI 専用ワークフロー(リリースなし)
リリースを作成せずにプルリクエストを検証する場合:
name: 'CI Build'
on:
pull_request:
branches:
- main
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- platform: 'macos-latest'
args: '--target aarch64-apple-darwin'
- platform: 'ubuntu-22.04'
args: ''
- platform: 'windows-latest'
args: ''
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- 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 libappindicator3-dev librsvg2-dev patchelf
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
cache: 'npm'
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Install frontend dependencies
run: npm ci
- name: Build Tauri app
run: npm run tauri build -- ${{ matrix.args }}
トラブルシューティング
リリース作成時の権限エラー
ワークフローに書き込み権限があることを確認し、リポジトリの設定で Actions によるリリース作成が許可されていることを確認します。
jobs:
publish-tauri:
permissions:
contents: write
Linux ビルドの失敗
Ubuntu の依存関係をインストールするステップで、すべての依存関係がインストールされていることを確認します。
macOS ターゲットが見つからない
クロスコンパイル用の Rust ターゲットがインストールされていることを確認します。
- uses: dtolnay/rust-toolchain@stable
with:
targets: 'aarch64-apple-darwin,x86_64-apple-darwin'
キャッシュが機能しない
ワークスペースのパスがプロジェクトの構成と一致していることを確認します。
- uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'