ひとことで言うと
オブジェクトストレージは「バケット名+オブジェクトキー」の組み合わせでファイルを識別するストレージです。ファイルシステムのような入れ子フォルダ構造は持たず、`my-bucket/reports/2024/index.html` というキー文字列にファイル本体とメタデータをセットで保存します。HTTPのGET/PUTリクエストだけで操作でき、FTPやSMBのようなプロトコルは不要です。
代表的なサービスはAWSのS3で、CloudflareのR2はS3互換APIを実装しています。そのためS3向けに書かれたSDKやライブラリをほぼそのままR2で利用できます。AIが生成したHTMLをオブジェクトストレージに置く際も、`aws s3 cp index.html s3://my-bucket/` と同じ感覚でR2に保存できます。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
HTML共有で関係する場面
HTMLファイルをオブジェクトストレージで公開するときは、バケットの「パブリックアクセス」を明示的に許可する必要があります。S3ではバケットポリシーにAllowルールを追加し、R2ではダッシュボードの「Allow Access」トグルをオンにします。この設定を忘れるとURLにアクセスしても403(アクセス拒否)が返ります。
複数のHTMLファイルと画像・CSSが混在するサイトでは、すべてのアセットを同じバケット(または同一のベースURL)に置く必要があります。たとえば`index.html`が`./assets/style.css`を参照している場合、`style.css`も同じバケットにアップロードされていないと公開後に見た目が崩れます。ギガサイト便のようなサービスはZIPを受け取って内部の相対パス構造ごとオブジェクトストレージに展開することで、この問題を自動解決しています。
よくある誤解
「オブジェクトストレージは遅い」という先入観を持つ人がいますが、Cloudflare R2はCDNと統合されているため世界中に高速配信できます。S3単体はCDNなしだと特定リージョンからの配信になりますが、CloudFrontを前段に置くか、最初からCDN統合型のR2を使えば遅延の問題はほぼ解消されます。
「ファイルを上書きすれば古いURLはすぐ無効になる」という期待も誤りです。CDNキャッシュが残っている場合、同じURLでも古いHTMLが数分〜数時間返され続けることがあります。キャッシュバスティングのためにCloudflareのキャッシュパージAPIを呼び出すか、ファイル名にバージョンハッシュを含める設計が必要です。
安全に使うための注意点
バケット全体をパブリックにするのではなく、公開が必要なオブジェクトだけに署名付きURLを発行するアプローチが安全です。署名付きURLには有効期限(例:1時間後に失効)を設定でき、URLが漏れても期限切れ後はアクセスできなくなります。機密度の高いレビュー資料を共有する場面では署名付きURL一択を検討してください。
バケット名はグローバルに一意である必要があるサービスも多く(S3など)、推測されやすい名前を使うと存在を把握されるリスクがあります。`company-prod-private-docs`のような名前ではなく、UUIDを含むランダムな名前を使うか、バケット自体はプライベートにして署名付きURLで配信する設計にしましょう。
よくある質問
オブジェクトストレージに置いたHTMLから相対パスでCSSを参照できますか?
バケット内の同一プレフィックス下にCSSを配置すれば、相対パスで参照できます。ただしルート相対パス(`/assets/style.css`)を使っている場合はカスタムドメインが必要です。zipを展開してアップロードするサービスを使えばパス構造がそのまま保たれます。
バケットの読み取りログを確認することはできますか?
S3はAWS CloudTrailやS3アクセスログで誰がいつどのファイルを取得したか確認できます。R2はCloudflareダッシュボードのLogpushを有効にするとアクセスログをR2や外部サービスに送れます。どちらも設定は任意のため、機密資料を扱う場合は明示的に有効化してください。
HTMLを差し替えたあと閲覧者のブラウザキャッシュはすぐに更新されますか?
オブジェクトのキャッシュコントロールヘッダーで設定した期間はブラウザが古いバージョンをキャッシュし続けます。即時反映が必要なHTMLには`Cache-Control: no-cache`を設定するか、ファイル名にハッシュを付けてURLを変える方法が有効です。