✏️

Laravel9 S3 Storage::disk() の返却値が変わっていた

2022/12/10に公開

先日Laravelのバージョンを8から9にアップグレードする機会がありました。
バージョンアップの差分を見ていたところ、diskにS3を指定している場合のStorage::disk()の返却値が変更されているようでしたのでメモです。
https://github.com/laravel/framework/commit/609516125647e980136e4407042460b1ecf527f3

Storageファサード

LaravelのStorageファサードの実態はFilesystemManagerクラスです。
https://github.com/laravel/framework/blob/9.x/src/Illuminate/Support/Facades/Storage.php#L100-L102
https://github.com/laravel/framework/blob/9.x/src/Illuminate/Filesystem/FilesystemServiceProvider.php#L51-L61

FilesystemManagerクラスのdiskメソッドを見たところ、指定したdiskdrivers3の場合はFilesystemManagerクラスのcreateS3Driverメソッドが実行されるようです。

createS3Driver

バージョン9以前はこのメソッド内でFilesystemAdapterクラスが返却されていました。
https://github.com/laravel/framework/blob/0bb7fe4758d617b07b84f6fabfcfe2ca2cdb0964/src/Illuminate/Filesystem/FilesystemManager.php#L197-L216

https://github.com/laravel/framework/blob/0bb7fe4758d617b07b84f6fabfcfe2ca2cdb0964/src/Illuminate/Filesystem/FilesystemManager.php#L276-L285

バージョン9では、FilesystemManagerを継承したAwsS3V3Adapterクラスが新しく作成され、このクラスを返却するように変更されたみたいです。
https://github.com/laravel/framework/blob/609516125647e980136e4407042460b1ecf527f3/src/Illuminate/Filesystem/FilesystemManager.php#L205-L230

FilesystemManagerクラスはメンバ変数に\Aws\S3\S3Clientのインスタンスを持っており、
getClientメソッドでこのインスタンスを取得できます。
https://github.com/illuminate/filesystem/blob/master/AwsS3V3Adapter.php#L98-L106

周辺のコードを読む機会があり、調べたことを残したメモでした。

Discussion