更新:2024/12/05

【Laravel】web.phpを分割する2つの方法について

はるか
はるか
Laravelのルート、整理が必要。膨らむと、管理が面倒。
ふゅか
ふゅか
そうね!だから、web.phpを分割して管理する方法を解説するのね!

1. Laravelでルート定義を整理・管理する2つの方法

Laravelでルート定義が増えると、web.phpapi.phpが煩雑・肥大化して、管理が難しくなることがあります。この問題を解決するために、本記事では、以下の2つの方法について詳しく解説します。

  1. require_onceを活用する方法
  2. RouteServiceProviderを活用する方法

2. require_onceを利用して分割する方法

Laravelでは、requireまたはrequire_onceを使ってルート定義を別ファイルに分割できます。この方法はシンプルで、すぐに導入できるのが特徴です。

ふゅか
ふゅか
「require_once」を使う方法って、どんな感じ?簡単なのかな?
はるか
はるか
シンプル。ファイルを分割。require_onceで読み込むだけ。

2.1. 手順

  1. routesディレクトリに新しいファイルを作成します(例: custom_routes.php)。
  2. custom_routes.phpにルートを定義します。
  3. web.phprequire_onceを使用してファイルを読み込みます。

2.2. コード例

2.2.1. 新しいルートの定義

まず、routesディレクトリ内にcustom_routes.phpというファイルを作成し、以下のようにルートを定義します。

<?php

use Illuminate\Support\Facades\Route;

Route::get('/custom', function () {
return 'This is a custom route.';
});

このコードでは、/customにアクセスした際に、This is a custom route.というメッセージが表示されるようしています。

2.2.2. web.phpの編集

次に、Laravelの既存ルートが定義されているweb.phpファイルを開き、require_onceを使ってcustom_routes.phpを読み込みます。

<?php

use Illuminate\Support\Facades\Route;

// 既存のルート
Route::get('/', function () {
    return view('welcome');
});

// カスタムルートを読み込む
require_once __DIR__ . '/custom_routes.php';

これで、web.phpの中でcustom_routes.phpに定義したルートも動作するようになります。実際に、ルートに移動すると、

3. RouteServiceProviderを活用する方法

RouteServiceProvider.phpは、Laravelの標準機能でルート管理を効率化します。用途別にルートファイルを登録したり、ミドルウェアや名前空間を簡単に適用できるのが特徴です。

はるか
はるか
次は「RouteServiceProvider」。ミドルウェア適用やprefixの追加も簡単。
ふゅか
ふゅか
へぇ~!用途別に整理できるのね。

3.1. 手順

  1. routesディレクトリにカスタムルートファイルを作成します。先ほどのように、custom_routes.phpを利用します。
  2. RouteServiceProvider.php内のroutes()メソッドでカスタムルートを登録します。

3.2. コード例

3.2.1. routes/custom_routes.php

以下はカスタムルートファイルの例です。

<?php

use Illuminate\Support\Facades\Route;

Route::get('/custom', function () {
    return 'This is a custom route from RouteServiceProvider.';
});

3.2.2. app/Providers/RouteServiceProvider.php

次に、RouteServiceProvider 内で、カスタムルートファイルを登録します。以下のコードでは、web ミドルウェアを適用し、routes/custom_routes.php を新たにグループとして追加しています。

<?php
namespace App\Providers;

use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->routes(function () {
            Route::middleware('web')
                ->group(base_path('routes/web.php'));
            //この部分を追加
            Route::middleware('web') // カスタムルート
                ->group(base_path('routes/custom_routes.php'));
        });
    }
}

PR