SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

人気のPHPフレームワークLaravelを習得しよう

Laravelにおけるミドルウェアを理解しよう

人気のPHPフレームワークLaravelを習得しよう 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 本連載ではPHPフレームワークのひとつであるLaravelを紹介していきます。Laravelは、「Web職人のためのフレームワーク」というキャッチコピーのもと、ここ数年で人気がうなぎ上りのフレームワークです。連載を通して、その人気の秘密を味わっていただこうと思います。第4回である前回は、リクエスト処理をコールバック関数ではなく1つのクラスにまとめる方法として、コントローラクラスを紹介しました。今回は、そのリクエスト処理の前後に処理を挿入できるミドルウェアを紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

ミドルウェアとは

 ミドルウェアとは何かを解説する題材として、「あるURLでのリクエスト処理に対しては、常に接続元のIPアドレスを記録しておく」といった仕様を考えてみます。

 例えば、システムの管理者のみが実行できる機能が/management/以下のURLパターンにまとまっているとします。例として、そのシステムを利用するユーザを追加する機能のURLだと、/management/users/addUserといったものが考えられます。これらの/management/以下のURLにアクセスしてきた場合は、常に接続元のIPアドレスをDBに記録するようにします。

 その場合、どのようなソースコードが考えられるでしょうか。これは、以下のように、このURLパターンを登録したルーティングコールバック関数内の最初にその記録処理を記述するものです。

Route::post("/management/users/addUser", function() {
	ここにIPアドレスの記録処理を記述
	:
});

 あるいは、前回解説したコントローラクラスを使用するならば、以下のように該当するメソッドの最初に同じように記述します。

class UsersController extends Controller
{
	public function addUser()
	{
		ここにIPアドレスの記録処理を記述
		:
	}
	:
}

 とはいえ、該当するすべてのコールバック関数やコントローラクラスメソッドに同じ処理を記述するのは効率が悪いので、通常は、IPアドレスの記録処理を行う関数、あるいはメソッドを作成して、それを呼び出すコードを記述します。すると例えば、以下のコードとなります。

class UsersController extends Controller
{
	public function addUser()
	{
		Functions::recordIPAddress(…);
		:
	}
	:
}

 ここで呼び出しているrecordIPAddress()は、Functionsクラスに記述されたIPアドレスの記録処理メソッドです。これで、比較的メンテナンスしやすいコードになります。それでも、この1行を、該当するすべてのコントローラクラスメソッドに記述する必要があり、記述し忘れるとそれはバグとなります。

 このように、コールバック関数やコントローラクラスメソッドに記述する本来の処理(リクエスト処理)に先んじて何か定型的な処理を行う必要があるケースは、Webアプリ、Webシステムではよくあることです。こういった時に活用できる機能として、Laravelにはミドルウェアがあります。ミドルウェアは、リクエスト処理の前後に処理を挿入できる機能です(図1)。

図1:リクエスト処理の前後に処理を挿入できるミドルウェア
図1:リクエスト処理の前後に処理を挿入できるミドルウェア

次のページ
ミドルウェアの書き方

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
人気のPHPフレームワークLaravelを習得しよう連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook<個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11643 2019/07/31 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング