using-crabnebula-cloud-with-tauri について
CrabNebula Cloudを使ってTauriアプリを配布するためのスキルです。リリース手順、チャンネル管理、CI/CD、Tauriの自動アップデート設定を扱います。
主な機能
- 01リリースの作成、アップロード、公開
- 02stable、beta、nightlyチャンネルの管理
- 03Tauri自動アップデートの設定
- 04GitHub Actionsによるリリース自動化
- 05アプリのダウンロード数の追跡
活用シーン
- 01Tauriアプリのインストーラーや更新の配布
- 02betaとstableの配信チャンネル設定
- 03GitHub Actionsを使ったリリース自動化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dchuk/ claude-code-tauri-skills --skill using-crabnebula-cloud-with-tauriインストール後、Claude Code で/using-crabnebula-cloud-with-tauriを入力して読み込まれたか確認します。
詳細
Tauri で CrabNebula Cloud を利用する
CrabNebula は Tauri の公式パートナーであり、Tauri アップデーターとシームレスに統合するアプリケーション配布プラットフォームを提供しています。このプラットフォームでは、グローバル CDN による配布、リリース管理、組み込みの自動アップデート機能を利用できます。
概要
CrabNebula Cloud では、以下の機能を利用できます。
- グローバル CDN:インストーラーとアップデートを世界中に配布
- リリースチャネル:複数のリリーストラック(安定版、ベータ版、ナイトリー版)をサポート
- 自動アップデート:Tauri のアップデータープラグインと互換性のある、組み込みのアップデートサーバー
- ダウンロード指標:アプリケーションのダウンロードを追跡する分析機能
- CI/CD 統合:リリースを自動化する GitHub Actions のサポート
初期設定
1. CrabNebula Cloud アカウントを作成する
- CrabNebula Cloud にアクセスします
- GitHub または GitLab の認証を使用してサインインします
- 一意のスラッグを持つ組織を作成します
- 組織内にアプリケーションを作成します
2. API キーを生成する
- CrabNebula Cloud の API Keys セクションに移動します
- 読み取り/書き込み権限を持つ新しいキーを生成します
- このキーを安全に保存します(表示されるのは一度だけです)
- GitHub のリポジトリシークレットとして
CN_API_KEYを追加します
重要:環境シークレットではなく、リポジトリシークレットを使用してください。環境シークレットはログに表示される可能性があります。
CLI のインストール
リリースをローカルで管理するために、CrabNebula CLI をインストールします。
# macOS/Linux
curl -L https://cdn.crabnebula.app/install/cn | sh
# Or via cargo
cargo install cn-cli
リリースのワークフロー
リリースプロセスは、ドラフト、アップロード、公開、取得の 4 つのステップで構成されます。
CLI コマンドを手動で実行する
# Create a release draft
cn release draft ORG_SLUG/APP_SLUG VERSION
# Upload assets with Tauri framework detection
cn release upload ORG_SLUG/APP_SLUG RELEASE_ID --framework tauri
# Publish the release
cn release publish ORG_SLUG/APP_SLUG RELEASE_ID
# Fetch latest release info
cn release latest ORG_SLUG/APP_SLUG
アップロードコマンドのオプション
cn release upload ORG_SLUG/APP_SLUG RELEASE_ID \
--framework tauri \
--channel stable \
--update-platform linux-x86_64 \
--file path/to/binary \
--signature path/to/signature
| フラグ | 説明 |
|---|---|
--framework | バンドルを自動検出します(tauri または packager) |
--channel | リリースチャネル(ドラフトのチャネルと一致する必要があります) |
--update-platform | アップデート用のプラットフォーム識別子 |
--file | バイナリアセットへのパス |
--signature | 署名ファイルへのパス(--update-platform を指定する場合は必須) |
GitHub Actions のワークフロー
.github/workflows/release.yml を作成します。
name: Release
on:
push:
branches:
- main
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CN_APPLICATION: "your-org/your-app"
jobs:
draft:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.read-version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Read version from tauri.conf.json
id: read-version
run: |
VERSION=$(jq -r '.version' src-tauri/tauri.conf.json)
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Create draft release
uses: crabnebula-dev/cloud-release@v0
with:
command: release draft ${{ env.CN_APPLICATION }} ${{ steps.read-version.outputs.version }} --framework tauri
api-key: ${{ secrets.CN_API_KEY }}
build:
needs: draft
strategy:
fail-fast: false
matrix:
include:
- platform: ubuntu-22.04
args: ""
- platform: macos-latest
args: "--target aarch64-apple-darwin"
- platform: macos-latest
args: "--target x86_64-apple-darwin"
- platform: windows-latest
args: ""
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: lts/*
- name: Install Rust stable
uses: dtolnay/rust-action@stable
with:
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
- name: Install Linux dependencies
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: Install frontend dependencies
run: npm ci
- name: Build Tauri app
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 }}
with:
args: ${{ matrix.args }}
- name: Upload assets to CrabNebula Cloud
uses: crabnebula-dev/cloud-release@v0
with:
command: release upload ${{ env.CN_APPLICATION }} --framework tauri
api-key: ${{ secrets.CN_API_KEY }}
publish:
needs: [draft, build]
runs-on: ubuntu-latest
steps:
- name: Publish release
uses: crabnebula-dev/cloud-release@v0
with:
command: release publish ${{ env.CN_APPLICATION }} ${{ needs.draft.outputs.version }}
api-key: ${{ secrets.CN_API_KEY }}
自動アップデートの設定
1. 署名キーを生成する
cargo tauri signer generate -w ~/.tauri/myapp.key
以下のファイルが作成されます。
~/.tauri/myapp.key- 秘密鍵(秘密にしてください)~/.tauri/myapp.key.pub- 公開鍵(設定に追加します)
GitHub リポジトリのシークレットに以下を追加します。
TAURI_SIGNING_PRIVATE_KEY:myapp.keyの内容TAURI_SIGNING_PRIVATE_KEY_PASSWORD:パスワード
2. tauri.conf.json を設定する
{
"version": "0.1.0",
"bundle": {
"createUpdaterArtifacts": true
},
"plugins": {
"updater": {
"active": true,
"endpoints": [
"https://cdn.crabnebula.app/update/YOUR_ORG/YOUR_APP/{{target}}-{{arch}}/{{current_version}}"
],
"dialog": true,
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk..."
}
}
}
重要:{{target}}、{{arch}}、{{current_version}} のプレースホルダーは変更しないでください。Tauri は実行時にこれらを動的に置き換えます。
Tauri v1 から移行する場合は、"createUpdaterArtifacts": "v1Compatible" を使用してください。
3. ケイパビリティを設定する
/src-tauri/capabilities/main.json を更新します。
{
"$schema": "../gen/schemas/desktop-schema.json",
"identifier": "main-capability",
"description": "Main capability for the application",
"windows": ["main"],
"permissions": [
"core:default",
"dialog:default",
"updater:default",
"process:default",
"process:allow-restart"
]
}
4. 依存関係をインストールする
src-tauri/Cargo.toml に追加します。
[dependencies]
tauri-plugin-updater = "2"
tauri-plugin-dialog = "2"
tauri-plugin-process = "2"
フロントエンドのパッケージをインストールします。
npm install @tauri-apps/plugin-updater @tauri-apps/plugin-dialog @tauri-apps/plugin-process
5. プラグインを登録する(Rust)
src-tauri/src/lib.rs を更新します。
use tauri::Manager;
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_updater::Builder::new().build())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_process::init())
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
6. アップデートチェックを実装する(TypeScript)
src/updater.ts を作成します。
import { check } from "@tauri-apps/plugin-updater";
import { ask } from "@tauri-apps/plugin-dialog";
import { relaunch } from "@tauri-apps/plugin-process";
export async function checkForAppUpdates(): Promise<void> {
try {
const update = await check();
if (!update?.available) {
console.log("No update available");
return;
}
const proceed = await ask(
`Version ${update.version} is available!\n\nRelease notes:\n${update.body}`,
{
title: "Update Available",
kind: "info",
okLabel: "Update Now",
cancelLabel: "Later"
}
);
if (proceed) {
console.log("Downloading and installing update...");
await update.downloadAndInstall();
await relaunch();
}
} catch (error) {
console.error("Update check failed:", error);
}
}
アプリケーションのライフサイクルの早い段階で呼び出します。
// React example
import { useEffect } from "react";
import { checkForAppUpdates } from "./updater";
function App() {
useEffect(() => {
checkForAppUpdates();
}, []);
return <div>Your app content</div>;
}
リリースチャネル
複数の配布チャネル(ベータ版、安定版、ナイトリー版)を使用する場合:
オプション 1:チャネル引数
# Create draft with channel
cn release draft ORG/APP VERSION --channel beta
# Upload must specify same channel
cn release upload ORG/APP RELEASE_ID --framework tauri --channel beta
オプション 2:アプリケーションを分ける
CrabNebula Cloud で別々のアプリケーションを作成します。
your-org/your-app(安定版)your-org/your-app-beta(ベータ版)
アプリケーションのビルドごとに、チャネル別のアップデートエンドポイントを設定します。
環境変数の概要
| 変数 | 場所 | 説明 |
|---|---|---|
CN_API_KEY | GitHub Secrets | CrabNebula Cloud API キー |
TAURI_SIGNING_PRIVATE_KEY | GitHub Secrets | 署名用秘密鍵の内容 |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD | GitHub Secrets | 署名キーのパスワード |
CN_APPLICATION | ワークフローの環境 | 組織/アプリケーションのスラッグ |
トラブルシューティング
アップデートチェックに失敗する
- エンドポイント URL が組織とアプリケーションのスラッグに一致していることを確認します
- 設定内の公開鍵が生成したキーと一致していることを確認します
createUpdaterArtifactsがtrueに設定されていることを確認します- ケイパビリティに必要な権限が含まれていることを確認します
アップロード時のビルド失敗
CN_API_KEYが環境シークレットではなく、リポジトリシークレットとして設定されていることを確認します- アップロード前にドラフトが正常に作成されたことを確認します
- 署名キーが正しく設定されていることを確認します
署名の不一致
TAURI_SIGNING_PRIVATE_KEYが設定ファイル内の公開鍵と一致していることを確認します- すべてのビルドで同じキーペアが使用されていることを確認します
- v1 から移行する場合は、
"createUpdaterArtifacts": "v1Compatible"を使用します