Laravelでミドルウェアを作成する方法を徹底解説!初心者でも理解できるmake:middleware入門
生徒
「Laravelでミドルウェアという言葉を聞いたんですけど、どうやって作るのかわかりません…。」
先生
「ミドルウェアはリクエストの通り道に置く仕組みなんだ。例えば、部屋に入る前に身だしなみをチェックするみたいな役目だよ。」
生徒
「なるほど…でも、ミドルウェアってどうやって作るんですか?」
先生
「Laravelには便利なコマンドがあって、簡単に作れるよ。それでは作り方を一緒に見ていこう。」
1. ミドルウェアを作成するための基本知識
Laravelでは、リクエストという情報がアプリに届く前に特定の処理を挟みたいときにミドルウェアを使います。ミドルウェアという名前は、英語で「middle(中間)」と「ware(機能)」が合わさった言葉で、流れてくる情報の途中に立つ仕組みです。例えば、特定のページを見る前にログインしているかを確認したり、サイトにアクセスするときの言語設定を自動で切り替えたりする場面で使われます。日常で例えると、学校の玄関で名札を確認する先生のような存在です。
Laravelでは、こうしたミドルウェアを自分で作成することができ、アプリの安全性や使いやすさを高めるために非常によく使われます。特に大きなアプリになるほどリクエストの制御は重要になるので、ミドルウェアの仕組みを理解しておくと開発がよりスムーズになります。
2. make:middlewareコマンドでミドルウェアを作成する
Laravelでミドルウェアを作成する最も基本的な方法が、make:middlewareというコマンドを使う方法です。このコマンドは、Laravelに備わっているアーティザンコマンドという便利なツールのひとつで、新しいファイルを自動生成してくれる仕組みです。手作業でファイルを作る必要がなく、開発を効率よく進められます。
以下のコマンドをターミナルに入力すると、新しいミドルウェアが作成されます。
php artisan make:middleware CheckSample
このように名前を指定すると、Laravelが自動でapp/Http/Middlewareというフォルダにミドルウェアのファイルを作ってくれます。ファイルの内部には、リクエストを処理するためのメソッドが用意されており、この中に自分の処理を書き足していく流れになります。プログラムの細かい構文を知らなくても、Laravelが用意した枠に処理を入れていくだけで動かせるため、初心者でも取り組みやすい仕組みです。
3. 作成されたミドルウェアの中身を理解しよう
作成されたミドルウェアのファイルを開くと、handleという名前のメソッドが用意されています。このメソッドには、リクエストを受け取って次の処理に渡す役割があり、必要に応じて条件を追加したり、処理を変更したりすることができます。ここに自分のチェック処理を書き足すことで、アクセスの前に実行したい内容を自由に設定できます。
public function handle($request, Closure $next)
{
return $next($request);
}
この形はLaravelのミドルウェアで共通して使われる基本形です。特別な設定がなくても動作するため、最初は必要な処理を書き足して動作を確認する流れがおすすめです。ここに例えば時刻によってページのアクセスを制限したり、送られてきたリクエストの内容をログとして保存したりする処理を加えることができます。
4. ミドルウェアをルートに登録する方法
ミドルウェアを作っただけでは機能しないため、どのページで使うかをLaravelに登録する必要があります。そのための場所がKernelというファイルで、ミドルウェアを一覧として管理しています。ここに登録すると、ルートで指定できるようになり、必要なページやグループに適用できるようになります。
protected $routeMiddleware = [
'checksample' => \App\Http\Middleware\CheckSample::class,
];
登録ができたら、ルーティングでミドルウェアを指定します。これにより、ページへアクセスするときに先ほど作った処理が必ず通過するようになります。
Route::get('/sample', function () {
return 'サンプルページ';
})->middleware('checksample');
このように指定することで、アクセス前にチェック処理を実行できるため、アプリの安全性や利用制限を簡単に実装できます。コードのどこに書いてもよいわけではなく、ルートに明示的にミドルウェアを設定することで、制御が正しく働きます。
5. ミドルウェアを使って実現できること
ミドルウェアはさまざまな用途に使えるため、Laravelの中でも重要な機能とされています。例えば特定の時間帯だけページを表示したい場合や、特定の文字列が含まれているかをチェックしたり、アクセスログを残したりと応用範囲は広いです。こうした処理はコントローラに書くこともできますが、アクセス前に必ず実行されるミドルウェアのほうが適している場合が多くあります。
ミドルウェアを使い分けることで、アプリ全体の構造がすっきりまとまり、あとから修正しやすい形になります。同じ処理を何度も書かずに済むという点でも、ミドルウェアは非常に効率の良い仕組みです。
まとめ
今回の記事では、Laravelでミドルウェアを作成し、活用する方法について詳しく解説しました。まず、ミドルウェアはリクエストの通過時に特定の処理を挟む機能であることを学びました。これは、ログインチェックやアクセス制限、言語切替など、アプリの安全性や利便性を高めるために重要な仕組みです。Laravelのmake:middlewareコマンドを使うと、自動でミドルウェアの雛形を生成できるため、初心者でも手軽に導入できます。
作成されたミドルウェアの中には、handleメソッドがあり、ここにアクセス前に実行したい処理を自由に追加できます。例えば、特定の時間帯にページを表示させたり、送信されたリクエストの内容をログとして残したりすることも可能です。次に、作成したミドルウェアをルートに登録し、どのページやグループに適用するかをKernelで管理する方法も学びました。登録後は、ルーティングで明示的にミドルウェアを指定することで、リクエストが通る前に必ず処理が実行されます。
ミドルウェアの活用により、アプリ全体のコード構造が整理され、共通処理を繰り返し書く必要がなくなるため、保守性が向上します。また、アクセス制御やログ管理、条件付き表示など、さまざまな応用が可能となり、Laravelの開発において不可欠な技術であることも理解できました。
ここで、簡単なサンプルとしてアクセス時間をチェックするミドルウェアの例を示します。平日の特定時間以外はアクセスを制限する処理をhandleメソッドに追加しています。
public function handle($request, Closure $next) { $hour = date('H'); if ($hour < 9 || $hour > 17) { return response('アクセスは平日9時から17時までに制限されています', 403); } return $next($request); } この例では、PHPのdate関数で現在の時間を取得し、条件分岐によってアクセス制限を実装しています。ミドルウェアを通じてこの処理をルートに適用することで、特定の時間帯以外のアクセスを自動で制御することができます。
Laravelのミドルウェアは、アクセス制御だけでなく、リクエストのログ取得、入力値の検証、言語やテーマの自動切り替えなど、多彩な用途に利用可能です。アプリケーションの安全性や利便性を高めるために、ミドルウェアを活用して共通処理を整理することは、開発効率の向上にもつながります。初心者でも、まずはmake:middlewareで雛形を作り、handleメソッドに処理を追加する手順を実践することで、実際のアプリに即した理解が深まります。
生徒
「先生、今回の記事でミドルウェアの作り方とルートへの登録方法がよくわかりました。handleメソッドの中に処理を書くだけで、アクセス制御やログ取得ができるのは便利ですね。」
先生
「その通りだよ。特にLaravelでは、make:middlewareコマンドを使うと雛形が自動で作られるので、初心者でも簡単に導入できるんだ。最初はサンプルを作って動作確認をするのが理解を深めるコツだね。」
生徒
「なるほど。ルートに登録するのを忘れると、せっかく作ったミドルウェアも機能しないんですね。」
先生
「そうだよ。Kernelに登録してルーティングで指定することで、リクエストが通る前に必ずミドルウェアが実行されるようになる。アクセス制御や条件付き表示を整理するのにとても役立つんだ。」
生徒
「これで、Laravelで安全にページアクセスを制御したり、ログを管理したりする方法が理解できました。早速、自分のアプリでも試してみたいです。」
先生
「それはいいね。まずは簡単な時間制限やログ保存のミドルウェアを作ってみると、Laravelの仕組みやhandleメソッドの使い方がより実感できるはずだよ。」