Laravelでは、画像やPDF、CSVなどのファイルを扱うためのストレージ機能が用意されています。これにより、ファイルの保存・取得・削除などを簡潔なコードで実装できます。この記事では、Laravelのストレージ操作の基本から注意点までをまとめて解説します。
ストレージとは?
Laravelにおけるストレージとは、ローカルやS3などのファイル保存先にファイルを保存・読み込み・削除するための仕組みです。主にstorage/app
以下に保存されます。
Laravelでは、Storage
ファサードを使ってさまざまな操作が可能です。
use Illuminate\Support\Facades\Storage;
ファイルを保存する
アップロードされたファイルを保存するには、store()
やput()
メソッドを使用します。
フォームからのアップロードを保存
public function upload(Request $request)
{
$path = $request->file('image')->store('images');
return $path; // images/filename.jpg
}
store()
は自動でユニークなファイル名を生成し、指定ディレクトリに保存します。保存先はデフォルトでstorage/app
です。
内容を直接保存(put)
Storage::put('text/sample.txt', 'これはサンプルの内容です。');
文字列やファイルストリームなどを指定して直接ファイルを保存できます。
保存先の公開(public)設定
保存したファイルをWeb経由でアクセスできるようにするには、「パブリックディスク」を使います。
$path = $request->file('image')->store('images', 'public');
このとき、php artisan storage:link
を実行して、storage/app/public
とpublic/storage
をシンボリックリンクで接続する必要があります。
php artisan storage:link
ファイルを読み込む
保存済みファイルの内容を取得するには、get()
メソッドを使います。
$content = Storage::get('text/sample.txt');
ファイルが存在するかどうかの確認も可能です。
if (Storage::exists('text/sample.txt')) {
// 処理を実行
}
ファイルのURLを取得する
public
ディスクに保存したファイルのURLを取得したい場合は、url()
を使います。
$url = Storage::url('images/filename.jpg');
// 出力例:/storage/images/filename.jpg
これでブラウザから直接アクセスできるようになります。
ファイルを削除する
不要になったファイルはdelete()
で削除できます。
Storage::delete('images/filename.jpg');
複数ファイルをまとめて削除することも可能です。
Storage::delete(['images/a.jpg', 'images/b.jpg']);
ディスクの切り替え
Laravelではconfig/filesystems.php
で定義された「ディスク」を切り替えることで、S3などの外部ストレージにも対応できます。
Storage::disk('s3')->put('folder/file.jpg', $fileContents);
ローカル、S3、FTPなど用途に応じて切り替えが可能です。
よくある注意点
- publicアクセスを想定する場合は、必ず
public
ディスクを指定し、storage:link
を実行する。 - ファイル名の衝突を防ぐには
store()
の使用を推奨。 - S3等を使う場合は、
.env
の設定を忘れずに。
まとめ
Laravelのストレージ機能は、ファイルの保存から読み込み、削除までを簡潔な記述で実現できます。Storage
ファサードを使うことで、ローカルやS3など様々なディスクを透過的に扱うことができ、実務でも非常に便利です。
初期設定や保存先の管理、公開範囲の意識を忘れずに、ファイル操作を安全に行いましょう。