Gratias合同会社

トップ › 技術ブログ › Amazon S3 を Windows のドライブにする仕組み

Amazon S3 を Windows のドライブにする仕組み — S3 DriveBridge の中身

クラウドストレージ(S3 DriveBridge)Gratias 開発チーム

この記事は、当社が開発・販売している Windows 向けソフトウェア「S3 DriveBridge」について、開発チームが内部の仕組みを解説するものです。製品の宣伝を含みます。

社内のファイルサーバーをクラウドへ移したい、けれど「保存の仕方」は変えたくない。S3 DriveBridge は、その要望に応えるために作った製品です。Amazon S3 や S3 互換のオブジェクトストレージを Windows のドライブ文字に割り当て、エクスプローラーや業務アプリからふつうのドライブと同じように開いて保存できるようにします。

ただし、S3 はファイルシステムではなく、「一部だけ書き換える」「名前を一瞬で変える」といった操作を持っていません。この記事では、その食い違いをどう埋めているか、埋めきれない所はどこかを、実際のコードと測定の記録をもとに説明します。

S3 DriveBridge の製品ページの冒頭。エクスプローラーで S3 のバケットをドライブとして開いている様子の図
製品ページの冒頭。S3 のバケットがエクスプローラーの 1 つのドライブとして見えます

全体の構成

S3 DriveBridge は、大きく 3 つの部品でできています。

部品役割
ドライブエンジンWindows からのファイル操作を受け取り、S3 への要求に置き換える本体です
設定アプリ接続先のバケット・鍵・キャッシュ・暗号化などをドライブごとに設定し、マウントとアンマウントを行います
ライセンスサーバー利用できる台数と期限を管理します。法人プランでは、お客様の社内に置く「Site ライセンスサーバー」が各 PC へライセンスを配ります

ドライブエンジンは、WinFsp というオープンソースの仕組みの上で動いています。WinFsp は、Windows のファイルシステムへの呼び出し(開く・読む・書く・閉じる など)をふつうのアプリの中で受け取れるようにするもので、私たちはその呼び出しごとに「S3 では何をするか」を書いています。WinFsp は GPLv3 に自由ソフトウェア向けの例外を付けたライセンスのため、当社のインストーラーには同梱せず、別途入れていただく形です(詳しくは製品サイトのWinFsp の解説にまとめています)。

エクスプローラーの 1 操作が S3 の何になるか

S3 にあるのは「キー(名前)と中身の組」だけで、フォルダという入れ物は本来ありません。営業/見積/2026.xlsx のように、スラッシュを含む名前を「フォルダの階層」として見せているのはドライブエンジンの側です。主な対応は次のとおりです。

エクスプローラーでの操作S3 への要求
フォルダを開くそのフォルダ名で始まるキーの一覧(LIST)
ファイルの大きさや日付を見るそのキーの情報だけを取る(HEAD)
ファイルを開いて読む中身を取る(GET)
保存して閉じる中身を丸ごと置く(PUT)
新しいフォルダを作る末尾が / の空のキーを置く
削除するキーを消す(DELETE)
名前を変える新しい名前へ複製してから元を消す(COPY と DELETE)

キャッシュは 2 段

1 段目は、ファイルの有無や大きさといった「情報」のキャッシュで、常に有効です。保持は 10 秒と短くしています。エクスプローラーは、フォルダを開いた直後に、表示した項目 1 つずつについて「あるか」「属性は何か」を問い合わせます。何もしなければ、フォルダを開くだけで、一覧の 1 回に加えて項目の数だけ問い合わせが飛び、ファイルの多いフォルダほど遅くなります。そこで、一覧を取った時点でその結果を情報のキャッシュに入れておき、直後の問い合わせはネットワークに出ずに答えるようにしました。

2 段目は、ファイルの「中身」をローカルディスクに残すキャッシュで、ドライブごとに有効・無効と容量の上限を決められます。中身は S3 の ETag(中身が変わると変わる識別子)と組にして保存し、ほかの PC が書き換えていれば使いません。上限を超えると、最近使っていないものから消します。

開発中に踏んだ落とし穴も 1 つ紹介します。フォルダを眺めるだけでエクスプローラーがサムネイルのために中身を読みに行くのを避けるため、ファイルに「オフライン」の属性を付けました。ところが開いて書き込み中のファイルにまで付けると、Windows のコピー処理が書き込みのたびに「遠くから呼び戻す」遅い扱いをして、極端に遅くなりました。今は一覧に出すときだけ付けています。

保存はいつ、どう上がるか

S3 には「ファイルの途中の数バイトだけを書き換える」要求がありません。中身を変えるには、オブジェクト全体を置き直すしかありません。そのため S3 DriveBridge では、開いている間の書き込みは手元(メモリ、またはキャッシュのファイル)に溜め、アプリがファイルを閉じたときに 1 回の PUT で S3 へ上げます。

上げる直前には、開いたときに覚えた ETag と、いま S3 にある ETag を比べます。

var currentETag = desc.OpenETag is not null ? TryGetCurrentETag(desc.Key) : null;
var hasConflict = desc.OpenETag is not null && currentETag is not null
                  && currentETag != desc.OpenETag;

食い違っていれば、自分が開いている間にほかの誰かが同じファイルを保存したということです。このとき相手の変更を上書きせず、自分の編集を 見積 (conflict 20261020-143000).xlsx のような別名で保存して、利用者に知らせます。どちらを残すかを決めるのは人で、黙ってどちらかが消えることはありません。

保存の瞬間に回線が切れていた場合は、編集内容を PC 内の待ち行列に退避し、つながり次第、自動で送り直します。

ファイルとオブジェクトの食い違い — 4 つの落とし穴

1. 名前の変更は「複製して消す」

フォルダの名前を変えると、その下のファイルすべてを 1 つずつ複製して消すことになります。時間はファイルの数と大きさに比例し、途中で回線が切れると新旧 2 つのフォルダに分かれて残ることがあります。また、バケットのバージョニング(世代管理)が有効だと、削除しても古い世代は残り、保管料の対象になります。

2. 一部の書き換えでも全体を送る

大きなファイルの 1 文字を直しただけでも、閉じたときに全体を送り直します。開いている間はファイル全体を手元に持つため、非常に大きなファイルではその分のメモリも使います。今後の改良の課題です。

3. ほかの PC の変更が見えるまでの時間

Amazon S3 自体は 2020 年 12 月から、書き込み直後の読み取りで新しい内容が返る「強い整合性」を提供しています。一方、情報のキャッシュは最大 10 秒保持するため、ほかの PC で保存したファイルが一覧に現れるまで、その程度ずれることがあります。このずれで上書き事故が起きないよう、保存のたびに ETag を照合しています。S3 互換ストレージの整合性は製品ごとに異なります。

4. 大きなファイル

Amazon S3 では、1 回の PUT で置けるのは 5GB までです。それ以上のファイルや、回線が不安定な環境で大きなファイルを扱う場合のために、ファイルを分割して並行に送る「マルチパート転送」を用意しています。ドライブごとの設定で、既定では無効です。有効にすると、しきい値(既定 100MB、5MB〜300MB で設定可)を超えたファイルを分割し、既定 4 本まで並行に送ります。途中で回線が切れても、送り終えた部分はやり直しません。

注意点は 2 つです。分割して置いたオブジェクトの ETag は、ファイル全体の MD5 ではなくなります。また、回線が切れたまま転送をあきらめると、取り消しの要求も届かないため、送り終えた部分が S3 に残って保管料の対象になります。そのため、未完了の部分を自動で消すライフサイクルルールの設定を必須としています。

回線を切って測ったこと

マルチパート転送を作ったとき、S3 互換ストレージ(MinIO)との間に自作の中継を挟み、わざと回線を切る試験をしました。

条件結果
192MB(16MB × 12 個)の転送中に 15 秒間切断完走。元のデータと SHA-256 が一致。増えた要求はちょうど 13 回で、送り終えた部分の再送は 0
回線が戻らないまま(96MB・6 個・並行 2 本)あきらめて待ち行列へ回すまでの時間を、182 秒 → 142 秒 → 118 秒と縮めた

回線が戻らない試験では、以前からの不具合が見つかりました。同じ 1 回の切断でも、切れた瞬間によって 3 種類の例外の形が出るのに、判定が一番外側の型しか見ておらず、転送中の切断を「通信障害ではない」と誤判定して、待ち行列に退避せずエラーを返していたのです。今は例外の内側まで辿って判定しています。あきらめるまでの時間を縮めたのは、待つ間エクスプローラーの操作が返ってこないためです。この試験の数字は MinIO を相手に測ったものですが、Amazon S3 本体でも同じように動くことを確かめています。

ライセンスの仕組み(概要)

インストール後 30 日間は機能の制限なく試用できます。法人プランでは、各 PC は社内用の Site ライセンスサーバーとだけやり取りし、Site ライセンスサーバーは当社のサーバーと既定 15 分ごとに同期します。つながらない期間も既定 14 日までは直前の状態で動き続けます。やり取りするのはライセンスの情報だけで、ファイルの中身は各 PC から S3 へ直接送られ、当社のサーバーを通りません。

価格は PC 1 台あたりのサブスクリプションで、すべて税込です(2026 年 10 月 20 日時点の製品ページの表示)。

プラン年払い単月契約
個人向けプラン年額 ¥6,600 / 1 台(月あたり ¥550)¥660 / 月・1 台
法人プラン(Site ライセンスサーバ付)年額 ¥19,800 / 1 台(月あたり ¥1,650)¥1,980 / 月・1 台

法人プランは、ご購入後に Site ライセンスサーバーの設置について担当者からご連絡し、設置後にライセンスをお渡しする流れです。

まとめ

S3 DriveBridge は、Windows のファイル操作を S3 の要求の組み合わせに置き換えて動いています。部分書き換えのない S3 に合わせて「閉じたときにまとめて上げる」形をとり、ETag の照合で上書き事故を、待ち行列で回線断を、マルチパート転送で大きなファイルを受け止めています。一方で、フォルダの名前変更が重いことなど、オブジェクトストレージの性質から来る制約は残ります。導入をご検討の際は、30 日間の試用で実際のバケットとファイルでお確かめください。

S3 DriveBridge

Amazon S3 や S3 互換ストレージを Windows のネットワークドライブとして使えるソフトウェアです。いつものエクスプローラーから、クラウドのファイルを直接開いて保存できます。30 日間、無料で試せます。

S3 DriveBridge を見る