トランスポート比較
目的
見出しへのリンクこのページは、拡張モデルに合ったランタイムトランスポートを選ぶためのものです。 すべての選択肢は同じレンダリングチャネルセマンティクスを使いますが、隔離性、運用コスト、本番適性は異なります。
比較マトリクス
見出しへのリンク| モード | 隔離性 | トランスポートの現実性 | 統合の複雑さ | 向いている用途 | 本番での指針 |
|---|---|---|---|---|---|
iframe | 🟢(ブラウザコンテキスト境界) | 🟢(postMessage のライフサイクルや origin モデルが現実に近い) | 🟡 | 厳格な境界が必要な非信頼拡張 | ブラウザホスト拡張の既定値として推奨 |
Window (popup) | 🟡(別ウィンドウ。ポリシーは origin チェックとライフサイクル処理に依存) | 🟢(明示的なウィンドウ間 postMessage 境界) | 🟡 | 独立した可視ワークスペースを必要とするツール型拡張 | popup UX を許容でき、厳格な origin / ライフサイクル制御がある場合に推奨 |
MessagePort | 🟡(ポートで接続されたコンテナコンテキストに依存) | 🟢(structured-clone セマンティクスを持つ明示的な非同期チャネル) | 🟡 | カスタムランタイムハンドシェイクやオーケストレーションブリッジ | 明示的なチャネル制御が必要な場合のトランスポート原語として推奨 |
Web Worker | 🟢(別 worker コンテキスト。リモートに DOM アクセスなし) | 🟢(非同期境界と専用 worker ライフサイクル) | 🟡 | 計算負荷が高い、または DOM 非依存のリモートランタイム | iframe ドキュメントが不要な場合に推奨 |
Desktop IPC | 🟡(デスクトップのプロセス隔離や preload / capability ポリシーに依存) | 🟢(明示的なプロセス間非同期境界) | 🔴 | 分離ランタイムを持つ Electron / Tauri プラグイン基盤 | IPC ポリシーを堅牢化したデスクトップシェルに推奨 |
Socket | 🟡(ランタイム配置とホストポリシーに依存) | 🟢(ネットワークレベルの遅延、再接続、順序が明示的) | 🔴 | マルチプロセス、クロスマシンの拡張ランタイムやライブリモートセッション | 強い認証 / プロトコル統制を持つ高度なプラットフォームに推奨 |
In-memory | 🔴(単一ランタイム) | 🔴(実際のトランスポート境界がない) | 🟢 | 開発ハーネス、統合テスト、高速診断 | 本番隔離には非推奨 |
凡例:
統合の複雑さ:🟢低、🟡中、🔴高。隔離性とトランスポートの現実性:🟢強い、🟡コンテキスト依存、🔴弱い。- これらの評価は典型的な拡張プラットフォームの比較であり、絶対的な保証ではありません。
ざっくりした指針
見出しへのリンク- 保守的なブラウザ隔離を求めるなら、まず
iframeから始める。 - コンテナ間で明示的なカスタムチャネル接続が必要なら
MessagePortを使う。 - リモートコードが document を必要とせず、軽量な隔離が欲しいなら
Web Workerを使う。 - Electron / Tauri のプロセス分離拡張ランタイムには
Desktop IPCを使う。 - ランタイムトポロジーがプロセスやマシンをまたぐなら
Socketを使う。 In-memoryは dev/test の高速化のみに使う。