Top View


Author yoshino

Laravelのミドルウェア #Laravel輪読会 Vol.6

2021/10/15

チームLIGHTの紹介

チームLIGHTは現在エンジニア5名、デザイナー2名、インターン1名の合計8人のチームです。 チームLIGHTの雑記ブログもありますので、よかったらそちらもそうぞ! こちらは技術的な内容ではなく、メンバーの日常のことをつらつらと書いています。

また、不定期でLIGHT@NOONという配信イベントも開催しています。

Laravel輪読会の紹介

チームLIGHTでは、週に1回1時間、Laravel輪読会を実施しています。

輪読会で読む本はこちらの本です!

2021/6/1に発売されたばかりの本で、Laravel8にも対応しています。

ボリュームもたっぷりな上に、Laravelの設計やテストコードに関する内容も充実しているので、オススメです!

本題

今回読んだページはP.158 ~ P.164 の「4-4 ミドルウェア」についてです。

ミドルウェア

4-4-1 ミドルウェアの基本

Laravelのミドルウェアには

  • グローバルミドルウェア
  • ルートミドルウェア
  • コンストラクタ内ミドルウェア

の3種類があります。

4-4-2 デフォルトで用意されているミドルウェア

たくさんのミドルウェアがデフォルトで用意されていますが、それぞれのミドルウェアの内容は本誌を参照してください。

不要なミドルウェアを除外して、パフォーマンスが向上する場合もあるので、利用するものは精査しましょう。 ただ、チーム内で話した時は、デフォルトで用意されているものを排除することはあまりなさそうだなと感じました。

4-4-3 独自ミドルウェアの実装

$ php artisan make:middleware SampleMiddleware

上記コマンドでMiddlewareのテンプレートを生成できます。

KernelクラスにMiddlewareを登録し、使用します。

チームで話したこと

  • Basic認証のデフォルトのMiddlewareは、ユーザー認証前提でのMiddlewareとなっている。

    • ユーザー認証ではなく、単純にアプリケーション全体での単一ID/PASSのBasic認証をかけたい場合は、https://github.com/olssonm/l5-very-basic-auth などのプラグインを使用するとよさそう。
    • ユーザー認証でのBasic認証の使用例として、BacklogでPDFをブラウザから閲覧する際に使われていることを思い出した。
  • 「不要なミドルウェア除外してパフォーマンスの向上を図るのも手」との記載には同意。

    • throttle の Middleware は DDoS 攻撃対策のためと思われるが、インフラを AWS で構築する場合、 AWS Shield で対応してくれるためアプリケーションレイヤで制御する必要がないはず。
    • アプリケーションレイヤ以外の構成によって不要になるケースは他にもあるのかも。
  • ConvertEmptyStringsToNull が空文字をNULLにするのありがたいけど、ありがた迷惑になるケースはないのか

    • TrimStrings あたりも合わせて、Laravel がデフォルトでそういうことをやっていると頭の片隅に置いておくとトラブルシューティングで役に立つと思われる。
  • コンストラクタ内ミドルウェア使ったことなし 普通に Kernel.php に追記するタイプしかやろうとしたことがないメンバーがいた。

    • 案件では、ユーザーごとの権限管理で使用している。
    • 閲覧ユーザーは、view系のメソッドしか使えない、などの機能の実装時にcanのMiddlewareをコンストラクタ内で使用することで、メソッドごとの権限管理が可能となる。
  • ValidatePostSize ←サーバ側の設定 + php.ini に加えて必要

    • アプリケーション全体でのPOSTサイズが想定を越えそうな際に、ユーザーにメッセージを表示できる点でよさそう。
    • php.iniの設定値よりも低い値で設定する必要がある。

今回は以上となります!

次回はデータベースの章を進めていきます! 最後まで読んでいただき、ありがとうございました。

yoshino

yoshino

Twitter X

Fusicエンジニア。Webアプリケーションやブロックチェーンプログラミングをしています。PHP, Vue.js, Solidity etc..