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