ブラウザでのファイル操作に関する API の改善

FileSystemSyncAccessHandle の複数のリーダー / ライターと FileSystemWritableFileStream の排他的なライターをサポートします。

FileSystemSyncAccessHandle の複数のリーダーとライター

オリジンのプライベート ファイル システム(バケット ファイル システムとも呼ばれる)を使用すると、デベロッパーは読み書きのパフォーマンスを最大化するように最適化されたファイルにアクセスできます。これは、FileSystemSyncAccessHandle オブジェクトを介して行われます。現在、同じファイル エントリに対して複数の FileSystemSyncAccessHandle オブジェクトを開こうとすると、NoModificationAllowedError で失敗します。この制約が限定的になるユースケースに対応するため、Chrome 121 では、以下の使用できる文字列値を持つ FileSystemFileHandle.createSyncAccessHandle() メソッドに新しい mode パラメータが導入されています。

  • "readwrite": これが現在のデフォルトです。開くと、FileSystemSyncAccessHandle のメソッドがすべて許可されます。FileSystemSyncAccessHandle のインスタンスは 1 つだけ指定できます。
  • "read-only" : 複数のリーダーを使用できます。開くと、FileSystemSyncAccessHandle の読み取りに似たメソッド(read()getSize()close())のみが許可されます。FileSystemSyncAccessHandle のインスタンスはすべて読み取り専用モードであれば、複数のインスタンスを作成できます。
  • "readwrite-unsafe": 複数のライターを許可します。開くと、FileSystemSyncAccessHandle のメソッドがすべて許可されます。FileSystemSyncAccessHandle のインスタンスは複数作成することができますが、すべてのインスタンスが読み取り書き込み可能 - セーフモードである場合に限ります。

現在の動作を維持するには、"readwrite" オプションをデフォルトのままにしておきます。デフォルトでは、一度に 1 つのインスタンスしか許可されません。サイトで複数の FileSystemSyncAccessHandle オブジェクトを開く必要があり、書き込みを行う必要がない場合は、"read-only" オプションを使用します。最後の "readwrite-unsafe" オプションは、複数のインスタンスと読み取りと書き込みの両方を可能にします。この場合、複数のタブから書き込みが行われると際どいものになり、サイトでは独自のロック スキームを提供する必要があります。

const handle1 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});
// This will succeed:
const handle2 = await handle.createSyncAccessHandle({mode: 'readwrite-unsafe'});

FileSystemWritableFileStream の専用ライター

FileSystemSyncAccessHandle と異なり、現在はファイル エントリごとに FileSystemWritableFileStream の複数のインスタンスを作成できます。欠けているのは、独占的なライターにオプションを提供する方法です。Chrome 121 では、次の値を持つオプションの mode パラメータが FileSystemAccessFileHandle.createWritable() メソッドに追加されました。

  • "exclusive" モード: 同時に存在できるライターは 1 つだけです。
  • "siloed" モード: 現在のデフォルトです。作成されたライターごとに、独自のスワップ ファイルがあります。
const writable1 = await handle.createWritable({mode: 'exclusive'});
// This will fail:
const writable2 = await handle.createWritable();

ブラウザ サポート

どちらの機能(FileSystemSyncAccessHandle の複数のリーダー / ライターおよび FileSystemWritableFileStream の専用ライター)も、Chrome 121 でサポートされています。

開発環境トライアルの開始

デベロッパー トライアルを開始して Chrome 121 のリリース前に機能をテストするには、chrome://flags#file-system-access-locking-scheme フラグを [Enabled] に設定します。これにより、マシン上でローカルでこの機能をテストできます。

謝辞

この記事は Daseul LeeNathan MemmottRachel Andrew によってレビューされました。