バックエンドのスタンダード:Laravel入門
■第11話:キャッシュ、セッション、ファイル管理
(最終更新日:2024.07.28)
(絵が小さい場合はスマホを横に)
「キャッシュを上手く活用しよう!」
キャッシュ、セッション、ファイル管理は、Webアプリケーションの性能とユーザーエクスペリエンスに直結する重要な要素だ。
本回では、Laravelを使用したこれらの機能の実装方法を学ぶ。
キャッシュの戦略的活用により、アプリケーションのパフォーマンス向上を図り、セッション管理を通じてユーザーの状態を適切に維持する。
ファイルシステムとストレージの効率的な操作方法を理解し、ユーザーからのファイルのアップロードとダウンロードのプロセスを確立する。
1.キャッシュ戦略
キャッシュは、データベースや外部APIへのアクセスを減らし、アプリケーションのパフォーマンスを向上させるために使用される。
以下に主な内容を説明する。
1.1 キャッシュの基本概念
一時的にデータを保存することで、同じデータを再度取得する際に高速化する仕組みのことをキャッシュという。
キャッシュの利点としては、アプリケーション全体のパフォーマンス向上と、サーバー負荷の軽減、応答時間の短縮などが挙げられる。
1.2 キャッシュの設定
Laravelは複数のキャッシュドライバをサポートしている。
主なものに、file、database、memcached、redisがある。設定はconfig/cache.phpファイルで行う。
ファイルにおけるキャッシュドライバの設定例をしたに示す。下記ではfileキャッシュを設定している。
キャッシュドライバの設定例
1.3 キャッシュの使用
キャッシュをデータに保存する方法、キャッシュを取得する方法、キャッシュの存在を確認する方法は以下の通りです。
キーがある場合の処理としては、print文やechoなどで、その旨を表示させることができる。
キャッシュドライバの設定例
1.4 キャッシュの削除
特定のキーをもつキャッシュの削除と全キャッシュ削除は下記のように行う。
キャッシュの削除
1.5 高度なキャッシュ戦略
キャッシュにタグを付けて、特定のタグを持つすべてのキャッシュを一度に操作する方法がある。
主にredisやmemcachedでサポートされる。
下記では、まずpeopleにタグ付けしたキャッシュを、flushで全て削除している。
次に、remenberで指定したキー(key)が存在しない場合に、キャッシュを自動で生成している。
最後にforeverを用いて、キャッシュを永続化している。
タグ付け、自動生成、永続化
1.6 キャッシュのベストプラクティス
以下の3点を意識することで、Laravelアプリケーションのパフォーマンスを向上できる。
- 頻繁にアクセスされるが、変更頻度が低いデータをキャッシュする。
- キャッシュの有効期限を適切に設定し、古いデータを取得しないようにする。
- アプリケーションの状態に応じて、キャッシュのクリアや再生成を行うロジックを組み込む。
2.キャッシュ、セッション、ファイル管理、セッション管理
第11回では、Laravelにおけるセッション管理について詳しく説明する。
セッションは、ユーザーの状態やデータをサーバー側に保存し、複数のリクエスト間でそのデータを維持するために使用される。
以下にセッション管理の主な内容を解説する。
2.1 セッションの基本概念
ユーザーのブラウザとサーバー間で情報を保持するための仕組みである。
セッションIDがブラウザに保存され、それに対応するデータがサーバーに保存される。
セッションの具体的な活用は、認証情報の保持、ユーザー設定の維持、ショッピングカートの状態保持である。
2.2 セッションの設定
Laravelは複数のセッションドライバをサポートしている。
主なものには file、cookie、database、memcached、redis などがある。
設定は config/session.php ファイルで行う。下記にその設定例を示す。
サーバーのファイルシステムなどに保存したセッションデータと
クライアントのCookieに保存したセッションデータを照合して、認証を行うことができる。
セッションの設定
2.3 セッションの使用
セッションにデータを保存する方法、取得する方法、削除する方法、全削除する方法は以下の通りである。
セッションの操作
2.4 その他、セッションの設定
下記では、一時的に保存するフラッシュデータの設定、セッションの永続化設定、セッションの有効期限を設定している。
セッションの各種設定
2.5 セッションのセキュリティ
下記では、セッションを保存するCookieの設定、セッションデータの暗号化を設定している。
セッションの各種設定
セッションデータの暗号化はサーバーにデータを保存する前に行われ、複合化もサーバー上で行われる。 万が一セッションが盗まれても、内容を保護することが可能になる。 加えて、不要なセッションデータは削除することは、内容の流出とデータの肥大化を防ぐ。 また、定期的な古いセッションデータをクリアすることは、サーバーのパフォーマンスを維持する。 これらの方法を活用することで、Laravelアプリケーションにおいて効果的にセッション管理を行い、 ユーザーのデータを安全かつ効率的に扱うことができる。
3.ファイルシステムとストレージ
Laravelは強力で柔軟なファイルシステムを提供し、ローカルやクラウドストレージへのファイルの保存や管理を簡単に行うことができる。
以下にその内容を詳しく解説する。
3.1 ファイルシステム設定
ファイルシステムの設定は config/filesystems.php にある。
このファイルでは、ディスクの設定やドライバの指定を行う。
下記ではlocalディスクの設定、publicディスクの設定、s3ディスクの設定の例を示している。
publicディスクでは、公開設定および公開されるファイルにアクセスするURLの設定などをしている。
s3ディスクではAmazon S3クラウドストレージを使うことを指定している。
ディスクやドライバーの設定
3.2 ファイル操作
次にファイル操作について説明する。
下記では、ファイルを特定のディスクに保存する方法、ファイルを取得する方法、存在を確認する方法、削除する方法を示している。
複数のリソースを返すUserResourceクラス
3.3 ファイルの公開、アップロード、ダウンロード
ファイルの公開方法について説明する。
public ディスクを使ってファイルを公開するためには、シンボリックリンクを作成する必要がある。
「php artisan storage:link」で作成することができる。
ファイルのアップロードとダウンロードに関しては、次項で詳しく説明する。
3.4 高度な操作
大きなファイルの操作には、ストリームを使用することができる。
また、ディレクトリ内すべてのファイルをリストして使うことができる。
リスト化した変数はforeachなどを用いて、一気に処理することができる。
ページネーション情報をUserCollectionに注入
また、クラウドストレージ(下記はAmazon S3)の設定は.envファイルに記述する。
Amazon S3の設定
そして、クラウドストレージからのファイルアップロードとダウンロードは以下の命令で実行できる。
Amazon S3へのアップロード、ダウンロード
ファイルシステムは、複数のストレージドライバに対応しており、柔軟に対応することができる。 また、一貫したAPIを用いることができるため、開発が容易になる。 さらに、キャッシュやストリーミングを活用することで、高速、効率的にファイルを扱うことができる。
4.ファイルのアップロードとダウンロード
4.1 ファイルのアップロード
ファイルのアップロードは、ユーザーがフォームを使用してファイルをサーバーに送信する際に行われる。
Laravelでは、ファイルのアップロードを簡単に処理するための機能が提供されている。
4.1.1 ファイルのアップロード手順、フォーム作成
アップロード用のフォームを作成し、ファイル入力フィールドを含める。
アップロード用のフォーム
4.1.2 ルートの設定
フォームの送信先となるルートを設定する。
アップロードのルート設定
4.1.3 コントローラの作成
ファイルを受け取り、指定したディスクに保存するコントローラメソッドを作成する。
$request->hasFile('file') は、リクエストに 'file' という名前のファイルが含まれているかどうかを確認する。
そして、$request->file('file') を使用してそのファイルにアクセスできる。
さらに、isValid() メソッドを使用してファイルが正常にアップロードされているかをチェックする。
ファイルの保存処理は store メソッドを使用して行われる。
このメソッドは、指定されたディレクトリ(この場合は 'uploads')にファイルを保存し、保存されたファイルのパスを返す。
第二引数の 'public' は、config/filesystems.php で定義されたディスクの名前を示しており、
この場合はパブリックにアクセス可能なストレージにファイルを保存する。
そのため、アップロードするファイルはリクエストの一部としてクライアントから送信され、サーバー側で処理される。
コントローラの作成
4.2.1 ファイルのダウンロード手順、ルート設定
まずは、ダウンロードリクエストを処理するルートを設定する。
ダウンロードのルート設定
4.2.2 コントローラの作成
ファイルを指定されたディスクから取得し、レスポンスとして返すコントローラメソッドを作成する。
ダウンロード用のコントローラ
4.2.3 セキュリティ
ファイルのアップロードとダウンロードにはセキュリティ上の考慮が必要だ。
ファイルの検証を行い、許可されたタイプのファイルのみを受け入れるようにする。
また、ユーザーがアップロードするファイル名を適切に処理し、パスのトラバーサル攻撃を防ぐためにサニタイズすることが重要だ。
下記では、アップロードできるファイルの種類(jpg,png,pdf)とファイルサイズ上限(2048KB)を設定している。
アップロードできるファイルの設定
このように、Laravelではファイルのアップロードとダウンロードを簡単かつ安全に処理するための機能が豊富に提供されている。 適切な設定とバリデーションを行うことで、安全で効率的なファイル管理が可能になる。
5.まとめ
第11回では、Laravelを使用したキャッシュ、セッション、ファイル管理の方法を学んだ。 キャッシュ戦略を適用してアプリケーションのパフォーマンスを向上させ、セッション管理でユーザーの状態を維持できる。 また、ファイルシステムとストレージの操作方法を学び、ファイルのアップロードとダウンロードの実装方法を理解した。 これにより、Webアプリケーションの効率性とユーザーエクスペリエンスの向上を図ることができる。
▼参考図書、サイト
「改定2版 速習Laravel」 山田祥寛 WINGSプロジェクト
「1週間で基礎から学ぶLaravel入門」 Minatomi