バージョンの管理

Magdalena Skarbińska
Magdalena Skarbińska
Demián Renzulli
Demián Renzulli

独立したウェブアプリ(IWA)は、ウェブ プラットフォーム上に、信頼性が高く安全で、 バージョンが分離されたランタイム環境を提供します。本番環境、特に管理対象の企業内では、管理者とデベロッパーがソフトウェアのデプロイをきめ細かく制御する必要があります。

これらの要件を満たすため、Chrome は、IWA の包括的なバージョン管理 機能を提供します。これには、更新チャンネルバージョンの固定、および バージョンのダウングレードが含まれます。これらの機能により、デプロイの予測可能性と、ユーザーベース全体での迅速な復旧制御が可能になります。

対象

バージョン管理の動作は、IWA が管理者によって管理されているか、ユーザーによって直接インストールされているかによって異なります。

  • 管理対象の IWA: 管理機能(ポリシー主導の固定とダウングレードを含む)は Chrome 133 以降で利用できます。
  • 管理対象外(ユーザーがインストールした)の IWA: ユーザー向けの機能(手動でのチャンネル選択など)は Chrome 150 以降で利用できます。

セッション タイプの互換性

更新チャンネルやバージョンの固定など、すべてのバージョン管理機能は、すべての ChromeOS セッション タイプと完全に互換性があります。これには以下が該当します。

  • 標準の管理対象ユーザー セッション
  • 管理対象ゲスト セッション(MGS)
  • 専用のキオスクモード 環境

更新チャンネル

デベロッパーは、更新チャンネルを使用して、異なるデプロイとテストの対象ユーザー向けに特定のアプリビルドをセグメント化できます。チャンネルを構成するには、アプリの更新マニフェスト内の各バージョン エントリに、省略可能なチャンネル配列フィールドを追加します。これらのチャンネル名は、固定されたプラットフォーム キーワード(canarystable など)に限定されず、任意のデベロッパー定義の識別子です。小文字の ASCII 英数字文字列(ハイフンやアンダースコアを含めることはできますが、スペースは含めることはできません)としてフォーマットする必要があります。 バージョン エントリでチャンネル フィールドが完全に省略されている場合、Chrome は暗黙的にデフォルトの「default」チャンネルに設定します。最終的に、管理ポリシーで指定されたチャンネル名は、マニフェストで定義された文字列と完全に一致する必要があります。入力ミスや構成の不一致があると、有効なバージョンが特定されず、クライアントの更新が停止します。

マニフェストの構成

チャンネルを構成するには、ウェブアプリ マニフェストの各バージョン エントリに、省略可能な channels 配列を追加します。考慮すべき点は次のとおりです。

  • チャンネル マッピング: バージョン エントリで channels 配列が定義されている場合、そのバージョンは指定されたチャンネルでのみインストールできます。
  • デフォルトのフォールバック: バージョン エントリで channels フィールドが完全に省略されている場合、Chrome はそのバージョンが default チャンネルにのみ属していると想定します。
  • 完全一致: クライアント側のポリシー構成で指定されたチャンネル名は、更新マニフェストで定義された文字列と完全に一致する必要があります(大文字と小文字が区別されます)。ターゲット チャンネル名に一致するバージョンがない場合、アプリは有効な更新を見つけることができません。

更新マニフェストの例

次の例は、複数のリリース チャンネルをサポートする更新マニフェストを示しています。

{
  "versions": [
    {
      "version": "0.1.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.1.0/iwa-sink.swbn",
      "channels": ["delta"]
    },
    {
      "version": "0.2.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.2.0/iwa-sink.swbn",
      "channels": ["delta", "default"]
    },
    {
      "version": "0.3.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.3.0/iwa-sink.swbn",
      "channels": ["beta", "delta"]
    },
    {
      "version": "0.4.0",
      "src": "https://github.com/chromeos/iwa-sink/releases/download/v0.4.0/iwa-sink.swbn"
    }
  ]
}

このマニフェストに基づいて、ターゲット チャンネルごとに次のバージョンが利用可能です。

  • default: 0.2.00.4.0(明示的なチャンネルがなく、デフォルトに設定されています)
  • delta: 0.1.00.2.00.3.0
  • beta: 0.3.0

IWA 更新エンジンは、アプリの更新マニフェスト内のチャンネル フィールドを検索することで、特定のリリース チャンネルをターゲットにできます。

バージョンの固定

コンプライアンス要件が高い企業環境や安定性の高い企業環境では、デバイスでビジネス クリティカルなソフトウェアの正確なバージョンが実行されるようにする必要があります。バージョンの固定により、管理者は IWA を特定のバージョンにロックし、以降のすべてのバックグラウンド更新を停止できます。これにより、企業は安定した構成を維持し、厳格な社内規制や業界規制を遵守するための信頼性の高い方法を確保できます。

独立したウェブアプリ(IWA)を特定のリリースビルドで固定するには、エンタープライズ 管理者は pinned_version プロパティを IsolatedWebAppInstallForceList ポリシー内で構成します。この機能は主に、標準の IWA インストール ワークフローに沿って、Google 管理 コンソールのアプリの詳細パネルのインタラクティブ UI コントロール を使用して管理されますが、 管理者は生の JSON 構成を使用してこれらのポリシー値 を直接デプロイすることもできます。管理者が有効なバージョン文字列を正常にターゲットにすると、Chrome はその明示的なパッケージを取得し、以降のすべての自動フォワード更新をブロックします。

特別な動作と制約

  • 更新の再開(固定解除): 自動更新を復元するには、pinned_version プロパティを削除するか、その値を新しいターゲット バージョンに変更します。
  • デフォルトではダウングレードしない: allow_downgrades が明示的に有効になっていない限り、pinned_version を現在インストールされているバージョンより低いバージョンに設定しても、ロールバックはトリガーされません。
  • 利用できない固定ターゲット: 構成された pinned_version が指定された更新チャンネルにない場合、またはインストールされているバージョンより古い場合(ダウングレードが無効になっている場合)、Chrome は現在インストールされているバージョンを保持し、以降の更新をブロックします。
  • 新規デプロイ: IWA が管理対象デバイスにまだインストールされておらず、指定された pinned_version を取得できない場合や、更新マニフェストにない場合、IWA のインストールは失敗します。

バージョンのダウングレード

新しくデプロイされた更新によって重大なバグや脆弱性が導入された場合、管理者はデバイスを以前の安定した状態にロールバックする必要がある場合があります。Chrome は、すでにインストールされている管理対象 IWA を以前のバージョンにダウングレードすることをサポートしています。以前は、フォワード更新のみが許可されていたため、この機能はプラットフォームでは利用できませんでした。

ダウングレードは、次の両方のポリシー条件が満たされている場合にのみ可能です。

  1. pinned_version が有効な古いバージョンに設定されている。
  2. allow_downgrades が明示的に true に設定されている。

ダウングレードの仕組み

  • トリガー メカニズム: ロールバックは、通常の更新チェック サイクル(4 ~ 6 時間ごとに実行)中に処理されます。
  • 内部処理: Chrome は、更新マニフェストで指定された古いウェブバンドル(.swbn)を使用して、IWA の完全な再インストールを実行します。

チャンネル遷移ロジック

ポリシーを使用してアプリのターゲット チャンネルを切り替える場合、更新エンジンは特定の動作に従います。

シナリオ A: 以前のバージョンのチャンネルに切り替える

  • ダウングレードが許可されている場合: pinned_version がターゲット チャンネルの古いバージョンと一致し、allow_downgrades が true の場合、ロールバックが発生します(ローカル ユーザーデータは消去されます)。
  • ダウングレードが許可されていない場合: ダウングレードは行われません。デバイスは現在インストールされている新しいバージョンのままになり、新しく選択したチャンネルで新しいバージョンが利用可能になった場合にのみ更新されます。

シナリオ B: 同じバージョンのチャンネルに切り替える

  • 変更なし: 新しく選択したチャンネルが現在インストールされているバージョン番号と同じバージョン番号を指している場合、Chrome はインストールされているバンドルを変更しません。
  • バイト単位の同一性原則: デベロッパーは、異なるチャンネルで同じバージョン番号に、バイト単位で一致する同じコード署名が含まれていることを保証する必要があります。チャンネル間で同じバージョン文字列で異なるコードベースをデプロイすると、予期しない不安定なアプリの状態になる可能性があります。

管理ポリシーの構成

エンタープライズ バージョン管理は、IsolatedWebAppInstallForceList ポリシー スキーマを使用して、一元化された Google 管理 コンソール プラットフォームで適用されます。これらの設定は、管理コンソールの UI コントロールから直接管理することも、生の JSON ポリシー構成を使用してデプロイすることもできます。
次の管理ポリシー構成の例では、更新チャンネル、バージョンの固定、ダウングレードを示しています。

ポリシー値の表現

[
  {
    "update_manifest_url": "https://awesome-kitchen-sink.glitch.me/update.json",
    "web_bundle_id": "aiv4bxauvcu3zvbu6r5yynoh4atkzqqaoeof5mwz54b4zfywcrjuoaacai",
    "channel": "beta",
    "pinned_version": "0.7.0",
    "allow_downgrades": true
  }
]

スキーマ パラメータの説明

  • channel (string、省略可) __: 更新マニフェストでこのチャンネルに割り当てられた バージョンのみを評価するように Chrome に指示します。省略した場合、Chrome は「default」チャンネルを評価します。
  • pinned_version (string、省略可) __: デバイスを 指定されたバージョン文字列に明示的にロックします。以降の自動バックグラウンド更新はブロックされます。
  • allow_downgrades (boolean、省略可) __: ロールバック機能を有効にします。 true で、有効な古い pinned_version とペアになっている場合、Chrome はダウングレードの再インストールをトリガーします。警告: このパラメータを true に設定すると、pinned_version フィールドが省略されている場合でも、標準のフォワード更新がすべてブロックされます。

管理対象外(ユーザーがインストールした)の IWA(150 以降)

管理対象外のユーザーがインストールした独立したウェブアプリの場合、バージョン管理はユーザーの手動操作で行われます。

インストール バンドル ──► ユーザーがチャンネルを選択 ──► 選択したチャンネルの自動チェック

自動更新のマニフェストの前提条件

ユーザーがインストールした IWA がバックグラウンドで自動的に定期的な更新をチェックして受信するには、アプリのローカル ウェブアプリ マニフェスト(/.well-known/manifest.webmanifest のバンドル内にパッケージ化されたメタデータ)に有効な update_manifest_url フィールドが含まれている必要があります

この URL がアプリのローカル マニフェスト ファイルから省略されている場合、管理対象外の更新エンジンはバックグラウンド チェックを実行せず、アプリは最初のインストール バージョンで永続的に固定されます。

手動でのチャンネル選択

管理対象外の IWA の初回インストール時に、デベロッパーが複数のチャンネルを構成している場合、ブラウザは更新マニフェストをチェックし、利用可能なチャンネル オプション(「安定版」、「ベータ版」など)をユーザーに直接表示します。

鍵のライフサイクル ルール

  1. 最初のインストール元: インストール時にユーザーが選択したチャンネルに関係なく、最初のインストールでは常に、提供されたインストール バンドル内にパッケージ化されたファイルがデプロイされます。
  2. 以降の更新: インストール後は、選択したチャンネルからのみ今後の更新がクエリされます。アプリは、インストールされているバージョンよりも新しいバージョンがそのターゲット チャンネルに公開された場合にのみ更新されます。
  3. チャンネルの切り替え: インストール後に別の更新チャンネルに切り替えるには、ユーザーは IWA をアンインストールして再インストールし、インストール フローで選択したチャンネルを選択する必要があります。

管理対象デプロイをテストする方法

Chrome Enterprise 管理コンソールからデバイスを管理している管理者、またはポリシーを直接構成している管理者向けの手順は次のとおりです。

  1. 組織の設定の [アプリの詳細] パネルに移動します。
  2. 構成プロパティを適用して、固定とチャンネル ターゲットをテストします。これらのコントロールは、標準のユーザー セッション、管理対象ゲスト セッション(MGS)、キオスクと完全に互換性があるため、すべてのターゲット デプロイ環境で動作を確認できます。
  3. 更新チェックをローカルで検査するには、テスト クライアントで chrome://web-app-internals に移動して、更新チェックを手動で強制し、受信したマニフェスト パケットを分析します。

まとめ

独立したウェブアプリのセキュリティ アーキテクチャは、アプリのライフサイクル動作を厳密に予測して制御しながら、デベロッパーが利用できるように設計されています。デベロッパーと IT 管理者は、Chrome のバージョン管理機能を活用することで、厳格なコンプライアンス基準と運用目標に沿った堅牢なデプロイ パイプラインを構築できます。

アプリの更新方法を設計、管理する際は、次の基本原則を念頭に置いてください。

  • プログレッシブ チャンネルを使用する: 更新チャンネル(betadev、カスタムリングなど)を使用すると、テレメトリーとフィードバックを段階的に収集できます。これにより、デフォルト チャンネルで一般ユーザーに公開される前に、大規模な更新が厳格な検証を受けることができます。
  • 安定性のために固定する: 構造化された企業環境やコンプライアンス主導の企業環境では、重要なエンドポイントを検証済みの正確な pinned_version にロックして、予期しない破損やワークフローの中断から運用を保護します。
  • 緊急事態に備えてダウングレードする: バージョンのダウングレードは、以前は不可能だった強力な修正安全弁であることを認識してください。 ただし、ロールバックでは完全な再インストールがトリガーされ、ローカル クライアント ストレージ(IndexedDB、LocalStorage、Cookie)がすべて消去されるため、重大なセキュリティ修復に厳密に限定する必要があります。通常のパッチの場合、将来を見据えたマイナー アップデートをデプロイすることが常に理想的な方法です。
  • ポリシー フラグを理解する: 管理スイッチに注意してください。ピンがアクティブに定義されていない場合でも、allow_downgrades をオンにすると、すべてのフォワード更新が停止します。
  • バイト単位の整合性を確立する: 異なるチャンネルにデプロイされた同じバージョン番号が、バイト単位で一致する同じバンドルにマッピングされるようにして、クライアントがチャンネル間を移行する際にアプリの状態が不安定にならないようにします。

これらの機能を更新マニフェストとエンタープライズ ポリシー スキーマに直接統合することで、独立したウェブアプリ エコシステムの高い信頼性を維持する、信頼性が高く監査可能な安全な更新フローを確保できます。