Murasaki
ビルド & 配布

0.54 から 0.55 への移行

本番 Murasaki アプリを更新するための破壊的変更と検証チェックリスト。

Murasaki 0.55 では、ランタイムの権限管理、アップデート、パッケージング、ブラウザデータの識別情報まわりのセキュリティを強化しました。ほとんどのアプリは構造を変更せずにコンパイルできますが、以下は意図的なフェイルクローズの変更です。デスクトップビルドを公開する前に対応してください。

1. レンダラーの環境変数名を変更する

レンダラーの JavaScript に埋め込んでよい値には MURASAKI_PUBLIC_* を使用します。

MURASAKI_PUBLIC_API_ORIGIN=https://api.example.com
DATABASE_URL=postgresql://localhost/private

レンダラーから見えるのは1つ目の値だけです。認証情報にはこのプレフィックスを付けないでください。既存のアプリが別の公開用プレフィックスを使っている場合は、build.envPrefix に明示的に追加してください。空のプレフィックスを公開しないようにしてください。

2. アップデートマニフェストに generatedAt を追加する

murasaki release --manifest で新規作成されるマニフェストには、すでに generatedAt が含まれています。generatedAt を持たない旧形式のマニフェストは、本番環境ではデフォルトで拒否されます。期間を区切った移行期間中に限り、次の設定を行えます。

updater: {
  allowLegacyManifestsWithoutGeneratedAt: true,
}

サポート対象のインストール済みバージョンすべてが最新のマニフェストを読み込めるようになったら、このフラグを削除してください。0.55 では、認証済みマニフェストの最も新しいタイムスタンプとバージョンも永続化されるため、それより古い署名済みマニフェストを公開すると、リプレイ攻撃やロールバックとみなされて拒否されます。

3. 実行可能なリソースを宣言する

sidecar やヘルパーバイナリには、構造化されたリソース形式を使用します。

bundle: {
  resources: [
    { from: 'bin/helper', to: 'sidecars/helper', executable: true },
  ],
}

これにより、Murasaki はアプリやインストーラーを封印する前にヘルパーにも署名するようになります。宣言されていない Mach-O、PE、ELF、shebang 形式のリソースがある場合、後から Gatekeeper や Windows のポリシーに拒否される成果物を生成するのではなく、パッケージング時点で処理を停止します。

4. 永続化されたアプリのオリジンを利用可能に保つ

0.55 では、パッケージ済みアプリの初回起動時にループバックポートを1つ選択し、永続化します。次回以降の起動時にそのポートが使用中の場合、別のオリジンへ移動して localStorage や IndexedDB が空に見えるような動作はせず、起動に失敗するようになりました。アプリが永続化したポートに、無関係なローカルサービスをバインドしないようにしてください。起動時に競合が報告された場合は、競合しているプロセスを停止してください。オリジンの状態を削除する操作は、新しいブラウザデータの識別情報を意図的に作成する操作であり、通常の復旧手順ではありません。

5. ケイパビリティの境界を見直す

  • ネイティブ API と Node Main / API Routes は、それぞれ独立した「デフォルト拒否」の権限領域です。
  • レンダラーのネイティブ権限は capabilities に、Node / API 側の権限は backendCapabilities に、可能な限りウィンドウ単位で宣言します。
  • カメラ、マイク、位置情報のブラウザ API は、フレームワークのレスポンスポリシーによって拒否されます。これらの機能を追加する場合は、アプリ側で管理するネイティブフローを用意してください。同等の境界を定義せずに、ヘッダーをグローバルに緩めないでください。
  • sign.appSandbox: true は拒否されます。サンドボックスに対応した Node ヘルパーモデルが文書化されるまでは、macOS では Hardened Runtime と公証を使用してください。

6. 実際のターゲットでリリースを検証する

最低限、次を実行します。

pnpm typecheck
pnpm test
pnpm exec murasaki build
pnpm exec murasaki bundle --target <platform-arch>
pnpm exec murasaki installer --target <platform-arch> --sign

macOS では、codesign、Gatekeeper、そしてステープルされた公証チケットを検証します。Windows では、Authenticode を検証し、セキュリティ機能を有効にしたままインストール済みのアプリを起動して確認します。Gatekeeper、SmartScreen、Smart App Control を無効化する手順を、利用者向けのインストール手順に含めないでください。

GitHub でこのページを改善

On this page