# 自動アップデート

Oleafly が、クロスプラットフォームのアップデーターのフィードを、どのようにビルド、署名、検証、公開するかを説明します。

Oleafly は Tauri のアップデータープラグインを使います。起動時にアプリが最新の GitHub リリースを確認し、新しいバージョンがあれば、専用のアップデートウィンドウを開きます。アプリケーションメニューや **Oleafly について → アップデートを確認** から確認することもできます。

## リリースフィード

各プラットフォームのビルドは、署名付きのアップデーターの成果物と、`latest.json` のフラグメントを作ります。リリースのワークフローは、4 つのビルドがすべて終わるまでそれらのフラグメントを別々に保ち、その後、各ターゲットが持つエントリを 1 つの正規のマニフェストにマージします。

最終的なマニフェストには、macOS Apple Silicon、Windows x64、Linux x64、Linux ARM64 のエントリが含まれている必要があります。メンテナーが保護された公開ワークフローを実行するまで、マニフェストはドラフトのリリースに添付されたままです。インストール済みのアプリには、ドラフトは見えません。

アプリは、GitHub Releases から `latest.json` をダウンロードします。インストールの前に、Tauri は、`src-tauri/tauri.conf.json` に埋め込まれた公開鍵に対して、アップデーターの署名を検証します。欠けている、署名のない、または改ざんされた成果物は拒否されます。

リリースノートは、`CHANGELOG.md` の該当するセクションから取られます。ワークフローがそのセクションを抜き出し、GitHub のリリース本文とアップデートウィンドウの両方で使います。

## 署名鍵

アップデーターの公開鍵は、`src-tauri/tauri.conf.json` にコミットされています。秘密鍵を置いてよいのは、GitHub Actions のシークレットだけです。

- `TAURI_SIGNING_PRIVATE_KEY`
- `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`

秘密鍵は絶対にコミットしないでください。漏えいした場合は、新しい鍵ペアを生成し、リポジトリのシークレットを更新して、埋め込まれた公開鍵を置き換えます。既存のインストールは、埋め込まれた鍵を信頼しているため、鍵のローテーションには、計画された手動のアップデート経路が必要です。

OS の署名は、アップデーターの署名とは別です。macOS のビルドは、リリース用のシークレットがあれば、Apple のコード署名と公証を使います。Windows のビルドは、認証情報があれば、Azure Artifact Signing を使います。

## 失敗とロールバック

確認やダウンロードに失敗しても、インストール済みのアプリは変更されません。署名の検証に失敗すると、インストールはブロックされます。アプリが再起動するのは、検証済みのダウンロードが正常にインストールされたあとだけです。

Oleafly は、完了したアップデートを自動ではロールバックしません。以前のバージョンに戻すには、アプリを閉じ、大切なプロジェクトをバックアップし、以前の公式インストーラーをダウンロードして検証し、現在のバージョンの上にインストールします。

ドラフトと公開の手順は、[Oleafly をリリースする](/docs/engineering/releasing/)を参照してください。
