【Laravel】ストレージの使い方|ファイルの保存・読み込み・削除の基本と注意点

【Laravel】ストレージの使い方|ファイルの保存・読み込み・削除の基本と注意点 Laravel

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/publicpublic/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など様々なディスクを透過的に扱うことができ、実務でも非常に便利です。

初期設定や保存先の管理、公開範囲の意識を忘れずに、ファイル操作を安全に行いましょう。