拡張機能の保存先 — 3 つの領域の違い
ブラウザ拡張機能は、chrome.storage という専用の保存先を使えます。Web ページの localStorage とは別で、Web ページのスクリプトからは呼べません。保存先ごとの比較はブラウザの保存先 7 種にあります。ここでは、chrome.storage の 3 つの領域の違いを、公式の説明と測定で書きます。置き場の選び方はどのデータをどこに置くか、消える場面はデータが消えるときにあります。
3 つの領域は、何が違うのか?
local は端末に保存され、拡張機能を削除すると消えます。 出典を開く確認 2026-11-02 出典を開く確認 2026-11-02 出典を開く確認 2026-11-02 出典を開く確認 2026-11-02 出典を開く確認 2026-11-02Chrome for Developers(chrome.storage)原文
Data is stored locally and cleared when the extension is removed.
unlimitedStorage の権限があると増やせます。Chrome for Developers(chrome.storage)原文
The storage limit is 10 MB (5 MB in Chrome 113 and earlier), but can be increased by requesting the "unlimitedStorage" permission.
Chrome for Developers(chrome.storage)原文
If the user enables syncing, the data syncs with every Chrome browser that the user is logged into.
Chrome for Developers(chrome.storage)原文
The quota limitation is approximately 100 KB, 8 KB per item.
Chrome for Developers(chrome.storage)原文
Items in the session storage area are stored in-memory and will not be persisted to disk.
誰から読めるのか?
| 読む側 | local | sync | session(既定) |
|---|---|---|---|
| Web ページのスクリプト | 呼べない | 呼べない | 呼べない |
| 同じ拡張機能のコンテンツ スクリプト | 読めた Chrome for Developers(chrome.storage)原文By default, it’s exposed to content scripts, but this behavior can be changed by calling browser.storage.local.setAccessLevel()出典を開く確認 2026-11-02 |
読めた | 読めない Chrome for Developers(chrome.storage)原文By default, it’s not exposed to content scripts, but this behavior can be changed by calling browser.storage.session.setAccessLevel()出典を開く確認 2026-11-02 |
| 別の拡張機能 | 届かない | 届かない | 届かない |
| ディスクを読む人 | 平文 | 平文 | 書かれない |
session は、setAccessLevel で公開すると、コンテンツ スクリプトからも読めました。測定で分かったことが、さらに 2 つあります。同じ拡張機能のコンテンツ スクリプトが localStorage を読むと、読むのは拡張機能の保存先ではなく、いま開いているページの localStorage です。そして、ホスト権限を持つ別の拡張機能も、ページの localStorage は読めます。chrome.storage は、ページの Web ストレージとは別の保存先なので、この 2 つの読み取りでは見えませんでした。
ディスクの上では、どうなっているのか?
| 保存先 | Chrome のプロファイルの中 | Edge のプロファイルの中 |
|---|---|---|
| local | Default/Local Extension Settings/<拡張機能の ID>/ |
Default\Local Extension Settings\<拡張機能の ID>\ |
| sync | Default/Sync Extension Settings/<拡張機能の ID>/ |
Default\Sync Data\LevelDB\ |
| 拡張機能の IndexedDB | Default/IndexedDB/chrome-extension_<拡張機能の ID>_0.indexeddb.leveldb/ |
同じ形(バックスラッシュ区切り) |
| session | なし(メモリの中だけ) | なし(メモリの中だけ) |
ブラウザを閉じたあとのファイルを検索すると、local・sync・拡張機能の IndexedDB は、書いた文字列がそのまま見つかりました。ファイルを読める人やソフトウェアには、chrome.storage も守りになりません。では、unlimitedStorage の権限があると、何が変わるのでしょうか。
unlimitedStorage の権限で、何が変わるのか?
| 測ったこと | 権限なし | 権限あり |
|---|---|---|
| local に書けた量 | 9 MiB は書け、10 MiB で失敗 | 128 MiB まで失敗しなかった |
| 拡張機能のページの quota | 10 GiB | 空き容量とほぼ同じ(Chrome 156 は 9.65〜9.74 GiB・空きは約 10 GiB/Edge 156 は 14.53〜14.66 GiB・空きは約 14.7〜15 GiB) |
| persist() | 拒否 | 拒否 |
権限があっても persist() は拒否で、閲覧データの削除への強さは変わりませんでした。では、閲覧データを削除すると、拡張機能のデータはどうなるのでしょうか。
閲覧データを削除すると、拡張機能のデータはどうなるのか?
| 保存先 | 拡張機能のオリジンを指定した削除 | 指定しない削除 |
|---|---|---|
| chrome.storage(local・sync・session) | 残った | 残った |
| 拡張機能の IndexedDB・localStorage | 消えた | 残った |
利用者が設定画面から消す場合は、測っていません。測っていないのは、Firefox と Safari の拡張機能、managed(企業の管理者が配る設定)の領域、設定画面からの手動の削除です。