公開日: 2026 年 11 月 10 日
最新のウェブアプリは、JavaScript フレームワーク、ゲームエンジン、AI モデルなどの大規模なアセットに依存することがよくあります。サイトが同一のアセットを使用しているにもかかわらず、各サイトはそれぞれのアセットのコピーをダウンロードして保存する必要があります。
提案されている クロスオリジン Storage API(略して COS)では、クライアントは探しているコンテンツをハッシュで指定し、任意の URL から取得して、指定されたサイト(またはすべてのサイト)で共有します。つまり、正確で既知のリソースを、アセットの提供とは無関係にサイト間で共有できます。この提案には、セキュリティ上のメリットと安全性に関する課題があります。
ユースケース
キャッシュ モデルの重要性と、Cache Storage API を使用したアセットのキャッシュ保存については、これまで詳しく説明してきました。Cross-Origin Storage API はさらに一歩進んでおり、複数の関連する(または関連しない)ウェブサイトが同じリソースにアクセスする必要がある場合に役立ちます。
- AI モデル: Gemma や Llama のバリアントなどのモデルは、約 1 GB から数十 GB のサイズになります。COS を介して 1 つのコピーを保存して取得することで、大量の重複ダウンロードを回避できます。これが、この提案の主な動機です。
- Wasm モジュール: Flutter などのフレームワークは、数千の異なるオリジンから 1 日に数百万回リクエストされる Wasm ファイルを、常にバイト単位で同一の状態で提供します。
- 一般的な JavaScript ライブラリとフレームワーク: ベンダーコードを個別に、かつ全体としてバンドルする(完全な、ツリーシェイキングされていない React ライブラリなど)ことで、複数のアプリが COS を介して 1 つのキャッシュされたコピーを共有できます。
- ゲームエンジン: Godot や Unity などのエンジンで構築されたブラウザゲームは、COS を介してエンジン ランタイムを共有し、ゲーム固有のアセットのみをネットワーク経由で取得できます。さまざまなオリジンまたは iframe で多くのカジュアル ゲームをホストするゲームポータルが、最も大きなメリットを得られます。
- 大きなウェブフォント: アイコン フォント、絵文字フォント、Unicode のカバー範囲が広いフォントは、膨大な数のページでダウンロードされます。COS を通じて一度共有すると、パフォーマンスとサステナビリティの両方に役立ちます。
COS を使用する際の基本的なフロー
COS API には navigator.crossOriginStorage.getFileHandle() メソッドが導入されており、ウェブアプリは、暗号学的ハッシュで識別されるオリジンの境界を越えてファイルを保存、取得できます。説明資料には、API を操作する基本的なフローを示す例が記載されています。
今すぐ試す
現在、COS を試すには次の 2 つの方法があります。
- Chrome ウェブストア、Firefox アドオン、Safari App Store からブラウザ拡張機能をインストールして、API サーフェスとすべての統合をポリフィルします。API フローは任意のブラウザでテストできます。または、ソースコードからパッケージ化されていない拡張機能を読み込む。
- Chromium での試験運用: 試験運用版の Chromium 実装があります。Apple シリコンまたは Linux x86_64 搭載の macOS 用の Chromium を goo.gle/cos-chromium からダウンロードし、
about://flagsを開いて「クロスオリジン ストレージ」を検索し、[Enabled] に設定して、プロンプトが表示されたら再起動します。このビルドには DevTools の統合が含まれています。[Application] タブで [Cross-origin storage] を見つけてください。
エコシステムへの関心
COS は初期段階の提案であり、多くのプロジェクトですでに試験運用版のサポートが提供されています。通常はオプトイン フラグの背後にあり、プログレッシブ エンハンスメントとして階層化されています。
- Emscripten は、生成された Wasm 出力を共有します。
- Flutter は Skia Wasm ランタイムを共有します。
- Transformers.js は、モデルの重みと、それらが依存する Wasm ランタイムを共有します。
- WebLLM はモデルとランタイムを共有します。
- wllama は AI モデルを共有します。
- Nuxt.js は、クロスオリジン ストレージから共有依存関係を読み込み、Vite COS プラグインを維持します。
- Prompt API Polyfill は、WebLLM バックエンドと Transformers.js バックエンド間で AI モデルを共有します。
- Prebid.js には、ヘッダー入札ライブラリの COS 対応 CDN ディストリビューションがあります。
標準化
クロスオリジン ストレージは、WICG の初期段階の提案です。初期の W3C TAG 設計レビューをご覧ください。
- ホスト統合は、それぞれの標準化団体に提出されます。
crossoriginstorage属性とcrossOriginStorageインポート属性を WHATWG HTML 標準に準拠- CSS ワーキング グループとの
cross-origin-storage() - Fetch 標準の
crossOriginStorageリクエスト オプション
- クロスブラウザのウェブ プラットフォーム テスト(進行中)
- Mozilla と WebKit に標準化のポジションをリクエストしています。
API と提案に関するフィードバックをお待ちしています。クロスオリジン ストレージ リポジトリで、問題の報告、サポートの表示、pull リクエストの作成を行うことができます。
リソース
- クロスオリジン Storage API の解説と仕様ドラフトをご覧ください。
- クロスオリジン ストレージのアンブレラ バグとその依存関係にスターを付けて、Chrome での COS の実装をフォローしてください。
- 公開ハッシュリストの説明をご覧ください。
- COS のセキュリティとプライバシーに関するアンケートに回答します。
- プロトタイプ作成の意向と Chrome プラットフォーム ステータスのエントリを確認します。
また、以下のツールとデモもご覧ください。
その他の参考情報
- キャッシュのパーティショニングによるセキュリティとプライバシーの向上
- Transformers.js で提案されているクロスオリジン Storage API をテストする
- HTTP キャッシュ パーティション: 同じ画像が 2 回ダウンロードされる(Joan León 著)
- クロスオリジン Storage API: 2 回ダウンロードしない(Dennis Morello 著)
- ブラウザに jQuery を搭載してほしいと思っていました。クロスオリジン ストレージが救世主となった(Ahmad Alfy 著)
トークとポッドキャスト
- ShopTalk Show 732: Thomas Steiner on New クロスオリジン Storage APIs(ポッドキャスト)
- Working Draft 723: クロスオリジン Storage API(ドイツ語のポッドキャスト)
- WeAreDevelopers: クロスオリジン ストレージとは(ポッドキャスト)
- クロスオリジン ストレージ: ウェブ用の共有キャッシュ(JSNation US 2026)