ブラウザ内でファイル処理は「どこまで」できるか — 2026 年の現在地
ブラウザだけで画像・PDF・動画を扱うには、どんな技術を使いどこまでできるのか。Canvas / Web Worker / WebAssembly / File System Access API の採用ポイントと、率直な限界を整理します。
「ファイルをサーバーに送らずに処理する」は、2026 年のブラウザでかなりの範囲が実現可能です。ただし万能ではありません。Zerosend が採用している技術と、その限界を正直に整理します。
なぜ「ブラウザだけで処理する」選択を採るのか
送らないので漏れない、という直球の設計
サーバー送信を伴わない構造そのものが、個人情報漏洩・誤操作・第三者共有 のリスクを原理的にゼロにします。「漏れない仕組み」を語るより、漏れる場所をなくすほうが検証しやすい設計です。
設定や権限に依存しない単純さ
サーバー側で暗号化キーを守る / ログを消す / バックアップから除外する、という細かい運用は継続的な手間がかかります。ブラウザ内で完結するなら、そもそもその運用自体が発生しません。
使っている技術スタック
Canvas API — 画像の基礎処理
2D 描画と画像ピクセル操作の標準 API。Zerosend の画像圧縮・リサイズ・形式変換はすべて Canvas 経由です。drawImage() で任意の描画、toBlob() で指定フォーマットに書き出せます。
Web Worker — メインスレッドを止めない
重い処理をメインスレッドで回すと UI がフリーズします。Web Worker で別スレッドに逃がすことでスムーズな UX を維持します。browser-image-compression のように Worker を内包しているライブラリは、そのまま使うだけでメインスレッドを解放してくれます。
WebAssembly — ffmpeg / pdf 系ライブラリの移植
C / C++ で書かれたネイティブライブラリを WASM 化することで、ブラウザで直接実行できます。Zerosend では ffmpeg.wasm (動画・音声) と pdfjs-dist (PDF レンダリング) が WASM ベースです。
File System Access API / Blob — 入出力
モダンブラウザは showOpenFilePicker() / showSaveFilePicker() で OS のファイル選択ダイアログを呼べます。非対応の環境でも <input type="file"> + Blob + URL.createObjectURL でダウンロードできるため、互換性の最低ラインは広いです。
できること
数 MB 〜数十 MB のファイル処理
現代のブラウザは 100MB 級のファイルでも (メモリ次第で) 安定して扱えます。JPG/PNG 画像の圧縮・リサイズ・一括 ZIP 生成は問題なく動作します。
バッチ処理 (ZIP 生成を含む)
jszip を使えば複数ファイルの圧縮まとめもブラウザ内で完結します。100 ファイル程度の一括処理は実用範囲です。
逆圧縮・形式変換
JPG → WebP、HEIC → JPG、PDF → PNG、MP4 → GIF などの変換は、すべてブラウザ内で実行できます。
苦手なこと・できないこと
数 GB 級の動画処理はメモリが持たない
ブラウザのプロセスメモリ上限はだいたい 2〜4 GB 程度。それ以上の動画をまるごと処理するのは困難です。1 GB を超える動画はデスクトップツール (ffmpeg CLI 等) のほうが安定します。
機械学習推論は遅い (ONNX Runtime Web は軽量モデル限定)
ONNX Runtime Web や TensorFlow.js で推論は可能ですが、数 GB 級のモデルはブラウザで回すとかなり遅く、UX が実用的ではありません。軽量モデル (数百 MB) に限定するか、サーバー推論と割り切るのが現実的です。
OS ネイティブ機能への直接アクセス
ブラウザはサンドボックス内で動くので、OS のファイルシステム全体を書き換えるような処理・プロセス起動はできません。セキュリティの観点からも妥当な制約です。
Zerosend での実装のコツ (開発者向け)
ドメイン層を UI から分離する
domain/processors/ 配下に純粋関数を置き、Vue / DOM API に依存させない設計にしています。テストが書きやすく、将来的に CLI 化・API 化もしやすくなります。
Web Worker に重い処理を分離する判断基準
目安は 100 ms を超える処理はすべて Worker。メインスレッドがそれ以上ブロックすると、ユーザー操作への応答 (クリック・スクロール) が目に見えて遅延します。
CSP を破らずに WASM を読み込む
CSP (Content Security Policy) に wasm-unsafe-eval を追加する必要があります。Zerosend では meta と _headers の両方に設定し、本番でも正しく動作することを確認しています。
Content-Security-Policy: script-src 'self' 'wasm-unsafe-eval'
今後の展望
WebGPU / OPFS の成熟
- WebGPU: GPU を直接使える API。機械学習推論や 3D レンダリングで大きく速度改善が見込まれます
- OPFS (Origin Private File System): Origin ごとにブラウザが管理する高速ファイル領域。大容量ファイル処理時の中間ストレージに使えます
これらが広く使える前提になれば、現状「苦手」としている領域の多くがブラウザだけで片付くようになります。
まとめ
ブラウザ内ファイル処理は Canvas / Web Worker / WebAssembly / File System Access API の組み合わせで、日常的な軽作業のほぼ全域をカバーできます。GB 級や重い ML 推論は依然として苦手ですが、Zerosend が対象とする画像・PDF・音声・短い動画の範囲では実用レベルです。
この設計の結果、Zerosend のツール群 はサーバーに何も送らずに動作し、DevTools で自ら検証できる透明性を持っています。
Zerosend Editorial
Zerosend の制作チームによる記事です。ファイルがデバイスの外に出ないことを設計の中心に置き、WASM・Web Worker をベースとするブラウザ完結ツールを開発しています。
Zerosend Editorial について →関連記事
QRコードをカメラなしで読み取る方法|画像ファイルから即解析
スマホカメラが使えない状況でもQRコードを読み取る方法を解説。画像ファイルをブラウザにアップロードするだけで、サーバー送信なしにURLや文字列を取得できる手順を紹介。
ファイルをアップロードする前に知るべきプライバシーリスクとブラウザ処理という選択肢
オンラインツールへのファイルアップロードが抱えるプライバシーリスクを解説。ブラウザ内処理との違いや、PDF圧縮を安全に行う具体的な方法を紹介します。
オンラインツールへのファイルアップロードが危険な理由と安全な使い方
オンラインツールにファイルをアップロードするリスクを解説。プライバシーを守りながら画像圧縮などを行う安全な方法を具体的に紹介します。