ブラウザでのファイル操作に関する 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 フラグを [有効] に設定します。これにより、マシンでローカルに機能をテストできます。

謝辞

この記事は、Daseul LeeNathan MemmottRachel Andrew が確認しました。