兼容バージョン
| Laravel | Livewire | PHP |
|---|
| 12.x | 3.8+ | 8.4+ |
TL;DR – S3 に保存される Livewire の一時アップロード (livewire-tmp/) を自動でクリーンアップします。
TTL(保存時間)と実行頻度を設定して、毎日古いファイルを削除できます。
何をしてくれるの?
| 機能 | 説明 |
|---|
| 自動クリーンアップ | 指定ディスク(S3)上の livewire-tmp/ フォルダを定期実行で削除します。 |
| 設定ファイル更新 | config/livewire.php に cleanup キーを書き込み、Laravel のスケジューラが利用します。 |
| オプション駆動 | --ttl(時間)や --schedule(cron式)で動作をカスタマイズ可能です。 |
注意 – Livewire の一時アップロードディスクは S3 ドライバである必要があります (livewire.temporary_file_upload.disk が s3 に設定されていること)。
使い方
php artisan livewire:configure-s3-upload-cleanup [options]
主なオプション
| フラグ | 役割 | デフォルト |
|---|
--bucket=VALUE | クリーンアップ対象の S3 バケット名 | config/filesystems.disks.s3.bucket |
--disk=VALUE | 使用ディスク名(S3 ドライバ) | livewire.temporary_file_upload.disk |
--ttl=VALUE | ファイルの保存期間(時間) | 24 |
--schedule=VALUE | Laravel スケジュール(cron式) | 0 3 * * *(UTC 3 AM) |
--region=VALUE | (Vapor など)S3 リージョン | なし(自動判定) |
例
php artisan livewire:configure-s3-upload-cleanup \
--bucket=my-app-uploads \
--ttl=48 \
--schedule="0 0 * * *"
最小構成での設定手順
- Livewire 設定を公開(未実行時)
php artisan livewire:publish --config
- 一時アップロードディスクを S3 に設定
// config/livewire.php
'temporary_file_upload' => [
'disk' => 's3',
],
- コマンド実行
php artisan livewire:configure-s3-upload-cleanup \
--bucket=my-app-uploads
- 確認
S3 コンソールで livewire-tmp/ フォルダを確認。
次回スケジューラ実行時に古いファイルが削除されます。
仕組み
- 設定ファイルを書き換え
'temporary_file_upload' => [
'cleanup' => [
'enabled' => true,
'bucket' => 'my-app-uploads',
'ttl_hours' => 24,
'schedule' => '0 3 * * *',
],
],
- Laravel スケジューラ登録
LivewireServiceProvider が Console::schedule() にコールバックを追加。
$schedule->call(fn () => $this->cleanupBucket())
->cron(config('livewire.temporary_file_upload.cleanup.schedule'));
- クリーンアップ処理
livewire-tmp/ 内のオブジェクトを一覧取得
LastModified を比較
ttl_hours 以上経過したファイルを s3:DeleteObject で削除
- エラーログ
- バケット名が無い、IAM ポリシー不足、リスト取得失敗などでエラーをログへ出力。
よくあるケース
| シナリオ | コマンドのメリット |
|---|
| 大きい画像アップロード | 古い一時ファイルを自動削除し、ストレージ費用を削減 |
| 継続的デプロイ | デプロイ後の残存ファイルをクリーンに保つ |
| サーバーレス環境(Vapor 等) | 一時ファイルが容量上限に達するのを防止 |
トラブルシューティング
| 症状 | 原因 | 修正 |
|---|
Failed to configure S3 bucket … | temporary_file_upload.disk が s3 でない | php artisan livewire:publish --config で設定し直す |
| クリーンアップが走らない | スケジューラが実行されていない | php artisan schedule:run を cron で定期実行、または Vapor のスケジュール設定 |
| ファイルが残る | タイムゾーン不一致 | TTL は UTC で計算。ローカル時間がずれている場合は --schedule を調整 |
403 Forbidden | IAM ポリシー不足 | s3:ListBucket と s3:DeleteObject を付与 |
チェックリスト
- ディスク確認
php artisan config:show livewire.temporary_file_upload.disk
- バケット内容確認
aws s3 ls s3://my-bucket/livewire-tmp/ --region us-east-1
- 手動クリーンアップ
php artisan livewire:cleanup-s3 --bucket=my-bucket
- Laravel ログ確認
tail -f storage/logs/laravel.log
関連コマンド
| コマンド | 用途 |
|---|
php artisan livewire:publish --config | Livewire 設定ファイルを公開 |
php artisan livewire:cleanup-s3 | クリーンアップを即時実行(デバッグ用) |
php artisan livewire:configure-s3-upload-cleanup | 旧バージョン(非推奨) |
速記まとめ
# デフォルト(24h, 3AM UTC)
php artisan livewire:configure-s3-upload-cleanup --bucket=my-bucket
# TTL 48h、毎日深夜(UTC 0:00)に実行
php artisan livewire:configure-s3-upload-cleanup \
--bucket=my-bucket \
--ttl=48 \
--schedule="0 0 * * *"
結果
コマンド実行後、Laravel スケジューラが設定され、指定時間に自動で古い一時アップロードが削除されます。
S3 ストレージを常にクリーンに保ち、手動でファイルを消す手間を省けます。