2026年9月30日 · 5分で読めます

S3・R2・B2でファイルを数日後に自動削除する方法

一時的な共有ファイルはたまっていくものです。レビュー用のスクリーンショット、テスター向けのビルド、クライアントに渡すファイル。ライフサイクルルールを使えば、バケットが自分で後片付けをしてくれます。コツは、アップロードする時点で保存期間を決め、ルールを設定したプレフィックスの下にファイルを置くことです。

プレフィックスの設計

保存期間ごとに1つずつ、それぞれのフォルダに限定したルールを作成します。

  • tmp/1d/:1日後に削除
  • tmp/7d/:7日後に削除
  • tmp/30d/:30日後に削除

tmp/7d/2026/09/report.pdfにアップロードしたファイルは、1週間後に消えます。tmp/以外の場所にあるファイルには一切影響しません。

Cloudflare R2

  1. バケットのSettingsを開いてObject lifecycle rulesを探し、Add ruleを選択します。
  2. expire-7dのような名前を付け、プレフィックスをtmp/7d/に設定します。
  3. アップロードから7日後にオブジェクトを削除するよう選択して保存します。

Wranglerを使う場合:

npx wrangler r2 bucket lifecycle add your-bucket expire-7d tmp/7d/ --expire-days 7

Amazon S3

  1. バケットを開いてManagementに移動し、Create lifecycle ruleを選択します。
  2. ルールに名前を付け、Limit the scope using filtersを選んでプレフィックスにtmp/7d/を指定します。
  3. アクションでExpire current versions of objectsを選択し、7日と入力します。バージョニングを有効にしたバケットでは、以前のバージョンの完全削除も設定してください。

AWS CLIを使う場合:

{
  "Rules": [
    {
      "ID": "expire-7d",
      "Status": "Enabled",
      "Filter": { "Prefix": "tmp/7d/" },
      "Expiration": { "Days": 7 }
    }
  ]
}
aws s3api put-bucket-lifecycle-configuration --bucket your-bucket \
  --lifecycle-configuration file://lifecycle.json

このコマンドはバケットのライフサイクル設定全体を置き換えるので、既存のルールも含めてください。

Backblaze B2

バケットのLifecycle Settingsでカスタムルールを選び、ファイル名のプレフィックスがtmp/7d/のルールを追加します。B2は2段階で動作します。アップロードから非表示までの日数と、非表示から削除までの日数です。約1週間で消えるファイルにするなら、それぞれ6と1に設定します。

ファイルが削除されるのは正確にはいつ?

ライフサイクルルールはバックグラウンドで、通常は1日1回実行されます。Amazon S3はアップロード時刻から日数を数え、次の午前0時(UTC)に切り上げたうえで、オブジェクトを削除キューに入れます。期限切れになった時点で料金はかからなくなります。実際には、期限を過ぎてもファイルに最大1日ほどアクセスできる場合があります。決まった時刻にリンクを確実に無効にしたいなら、代わりに署名付きURLを使ってください。

よくある質問

パソコンの電源が切れていても、ライフサイクルルールでファイルは削除されますか?

はい。ルールはバケットに保存され、プロバイダ側で実行されるので、手元で何かを動かしておく必要はありません。

数日ではなく数時間後に削除できますか?

できません。ライフサイクルルールは日単位で動作します。数時間で無効にしたいリンクには、ファイルを非公開のままにして署名付きURLを共有してください。

ライフサイクルルールがプレフィックス外のファイルを削除することはありますか?

いいえ。プレフィックスのフィルタを設定したルールは、そのプレフィックスで始まるキーにしか適用されません。フィルタのないルールはバケット全体に適用されるので、必ずフィルタを設定してください。