Storageでファイル操作マスターLaravelにはファイル操作にStorageという便利な機能が備わっています。Storageを使えばローカルのファイルもクラウドのファイルもFTPサーバのファイルも同じ方法で操作することができます。Storageの操作を覚えてしまえば保存先を意識することなくファイルの操作ができるので、もし使い慣れていないようならばこの機会にStorageの使い方をマスターしておきましょう。ファイルの削除LaravelのStorageとはLaravelのStorageはFlysystemのfilesystemライブラリを利用して作られています。S3もLaravelのアプリケーションから見れば同じものとして扱うこと(各接続デバイスの違いを吸収してくれる)ができ、同じメソッドを使ってファイル操作・ディレクトリ操作を行うことができます。言葉よりも実際にFTPサーバへの接続を通して、Storageがどれほど便利なのか確認していきます。FTPを使ってファイル一覧を取得Storageがどのようなものか理解するためにFTPを使ってFTPサーバ上にあるファイルの一覧を取得します。Storageはconfig/filesystems.phpを通して設定を行うので、FTPの接続情報をこのfilesystem.phpに記述する必要があります。filesystems.phpのdisksプロパティに新規にftpを追加します。passwordは各環境に合わせたFTPサーバに接続するための接続情報を設定します。],これでFTPを利用するための設定は完了です。下記のようにportの設定を含め、オプショナル設定もあります。],tinker上でStorageのfilesメソッドを使ってFTPサーバ上のファイル一覧を取得します。実行すると下記のようにfilesメソッドでFTPサーバ上のファイル一覧を取得することができました。簡易的な動作確認を行うためにtinkerを利用しています。Controllerに記述して動作確認も可能です。Illuminate\Support\Facades\Storageが必要になります。]diskメソッドには、filesystem.phpのdisksプロパティにある値(ドライバ)によって接続先を変えることができます。Laravelのローカルディスクに保存されているファイル一覧を取得する場合は、diskメソッドにlocalを入れるだけでファイル一覧を取得することができます。同じfilesメソッドを使ってファイル一覧を取得することができます。Storageがなければ、FTPサーバに接続する際はftp_connectを記述していたかもしれません。Storageを使えばファイルの保存場所を気にすることなく同じ方法でファイルを操作することができます。Storageの設定についてStorageの設定はfilesystem.phpで行います。先程、diskメソッドを使ってlocalとftpの切り替えを行いましたが、デフォルト値が決まっています。.envファイルでFILESYSTEM_DRIVERが行われていなければ、localが設定されます。デフォルトを変更したい場合は、.envファイルにFILESYSTEM_DRIVERを追加し使用したいドライバ値を設定します。'local'),デフォルト値を使用する場合は、diskメソッドをつける必要がなくファイル一覧を取得する場合は、Storage::files()で実行することができます。Storage::disk(‘local’)->files()と毎回明示しても問題はありません。Laravelインストール直後では3つのドライバの情報がfilesystems.phpに記述されています。localとpublicとs3です。localとpublicはLaravelのローカルディスクのドライバで、s3はAmazonのs3を使用する場合に使うドライバです。localではappをルートディレクトリとしてappディレクトリ以下のファイルやディレクトリを操作します。publicは外部からアクセス可能なapp/publicをルートディレクトリとしてそれ以下のファイル、ディレクトリを扱います。ファイルを保存する際にディレクトリパスを設定しますが、もしディレクトリパスを設定しなければ保存したファイルは各ドライバのルートディレクトリの直下に保存されます。env('AWS_URL'),],Storageによるファイル操作FTPサーバ上とローカルのファイルの操作を通して、Storageが非常にパワフルなツールであることが理解できたと思うので、ファイル操作のメソッドを確認していきます。ここから先はdiskの設定のドライバの値には依存しません。localでもpublicでもs3でも同じ操作です。使用したいメソッドはFilesystemAdaper.phpクラスに記述されているので、APIマニュアルから確認できます。使用頻度が高いと考えられるもののみ抜粋しています。ファイルを保存します。指定したPATHにファイルを保存。名前は一意のIDです。指定したPATHにlogo.jpgという名前ファイルを保存します。ファイルが存在するかチェックを行います。あればtrueが返されます。ファイルのコピーを行います。ファイルの移動を行います。ファイルの削除を行います。ディレクトリを作成します。ディレクトリを削除します。ファイルのサイズを確認します。publicディレクトリにあるファイルのみ表示します。publicディレクトリ以下のすべてのファイルとディレクトリを表示します。ファイル、ディレクトリがたくさんある場合は時間がかかります。ファイルのフルパスを表示します。ファイル名をfalseにするとrootパスが表示されます。メソッドだけでは使用方法がわからないので、ファイルの保存と削除を通してメソッドの使用方法を確認します。ファイルの保存アップロードしたファイルをStorageを使用して保存します。保存には、名前がLaravelでユニークなIDが自動で振られるputFileとファイル名を指定できるputFileAsがあります。$file_name);ファイルの保存先(root設定)localドライバとpublicドライバの保存場所はfilesystems.phpで設定されており、各ドライバのrootの設定で確認することができます。localはappでpublicはapp/publicディレクトリ下に保存されます。'public',],ftpドライバの場合は、ftpで接続した先のディレクトリが保存先になります。visibilityとは(権限の設定)filesystems.phpのpublicドライバの設定でvisibilityという設定値があります。visibilityによりパーミッションの設定を行うことができます。publicとprivateの2つの値を取り、MAC環境ではpublicでは644の設定、privateでは600の設定になります。'public',],パーミッションとはファイルに対する読み、書き、実行の権限を設定することです。644はファイルの所有者に読み書きの権限、所有者が属するグループに読みの権限、その他に読みの権限を与えてします。600だと所有者のみに読み書きの権限を与えており、所有者以外はアクセスすることができません。publicでは644なので誰でも読み込むことができ、privateは600で所有者のみ読み込むことができます。読みには4、書きには2、実行には1が割り当てらています。ファイルを保存する時には、下記のようにpublicとprivateを設定することができます。Storage::putFile('',$request->file('file'),'private');urlとはfilesystems.phpのpublicドライバの設定でurlという設定値があります。Storage::url($file_path)で利用することができ、指定したファイルのURLを表示させることができます。'public',],例えばapp/publicディレクトリの下にimagesディレクトリを作成し2つのファイルを保存します。filesメソッドでファイルの一覧を取得した後にurlメソッドを使うと外部からアクセス可能なURLを取得することができます。Laravelではapp\publicディレクトリの下が外部からアクセス可能な場所です。どのディレクトリにファイルを保存しても外部からアクセスできるわけではありません。Storage::disk('public')->url($file).'';}一覧の処理で画像が保存されているURLをurlメソッドによって表示させることができます。http://localhost/storage/images/Laravel_send_email.pnghttp://localhost/storage/images/Laravel_storage.pngファイルの削除ファイルの削除は削除したいファイルのパスを設定します。複数の場合は配列を使って削除することができます。