【Laravel】大規模システムでURLを整理する

大きいシステムになると、それに比例してURLの数も膨大になりますよね。その場合、URLを階層分けして整理すると分かりやすくなります。

階層の分け方

階層はサブシステム毎に作るのが一般的です。サブシステムとはシステムの機能を意味のある単位でまとめて、小さなシステムとして分割したものです。

分割の単位としてよく使われるのが、利用者や、業務です。利用者の場合で考えてみましょう。最も一般的な分け方が管理者と一般ユーザーです。Webアプリケーションの場合も、サービスを使う側と、サービスを管理する側でURLは分かれている場合が多いですよね?これは管理者用のアプリと利用者のアプリが分かれていると言えそうです。

URLを見て、その機能が管理者向けか一般向けか一目で分かると便利です。URLを階層分けして管理してみましょう。管理者向けの機能はadminの階層下に置きます。この場合、管理者向け機能のURLは以下のようになります。

  • admin/login
  • admin/articles
  • admin/comments

管理者向けの機能がadmin配下にまとめられたので大分わかりやすくなりました。

URLの管理は煩雑化

URLが分かりやすくなった一方で、ルーティングの管理は少し煩雑になってしまいます。管理者機能の全てにadminを記入しなければならないからです。

// adminの階層を書かなくてはいけない
Route::get('/admin/login', ...);
Route::get('/admin/articles', ...);
Route::get('/admin/comments', ...);

この煩雑さを取り除く機能がLaravelには用意されています。

グループ化で煩雑さを解消

Route::prefixでルートグループを作ることで、グループ内のURL全てにプレフィックスを付けることができます。adminのプレフィックスを作成するには以下のように記述します。

Route::prefix('admin')->group(function () {
	    // /admin/articles URLに一致
	    Route::get('/articles', function(Request $request){
		      return 'this is admin articles';
	    });
});

これで全てのURLにadminを付ける必要はなくなりました。管理しやすくなったと思います。

まとめ

URLプレフィックスの付け方と、その使いどころを解説しました。ルーティングはある意味のまとまりごとにグループを作成しておくと、グループに対してミドルウェアを適用したりできるので何かと便利です。意味のあるまとまりを見つけたら、今回のようにグループの作成を検討してみましょう。

Laravel

Posted by kobainmac