mcpField
B
building-tauri-with-github-actions

building-tauri-with-github-actions

github.com/dchukクラウド・DevOps36171 回インストール40 週間前に更新
リポジトリ

building-tauri-with-github-actions について

Tauri アプリ向けに GitHub Actions の CI/CD を設定するためのスキルです。開発者が tauri-apps/tauri-action を使い、複数プラットフォームのビルドや検証、リリースを自動化する際に役立ちます。

主な機能

  1. 01複数プラットフォームのビルドマトリクス
  2. 02リリースと成果物のワークフロー
  3. 03Rust と Node.js のキャッシュ
  4. 04署名と権限の設定ガイド

活用シーン

  1. 01ブランチやタグを起点にした Tauri アプリのリリース自動化
  2. 02プルリクエストのビルドと検証
  3. 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 には、リリース作成のための書き込み権限が必要です。

リポジトリの設定
  1. Settings > Actions > General に移動します
  2. 「Workflow permissions」で
  3. 「Read and write permissions」を選択します
  4. 保存します
ワークフローの権限
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'

コメント