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


はるか
Laravelのルート、整理が必要。膨らむと、管理が面倒。

ふゅか
そうね!だから、web.phpを分割して管理する方法を解説するのね!
目次
1. Laravelでルート定義を整理・管理する2つの方法
Laravelでルート定義が増えると、web.php
やapi.php
が煩雑・肥大化して、管理が難しくなることがあります。この問題を解決するために、本記事では、以下の2つの方法について詳しく解説します。
- require_onceを活用する方法
- RouteServiceProviderを活用する方法
2. require_onceを利用して分割する方法
Laravelでは、require
またはrequire_once
を使ってルート定義を別ファイルに分割できます。この方法はシンプルで、すぐに導入できるのが特徴です。

ふゅか
「require_once」を使う方法って、どんな感じ?簡単なのかな?

はるか
シンプル。ファイルを分割。
require_once
で読み込むだけ。2.1. 手順
routes
ディレクトリに新しいファイルを作成します(例:custom_routes.php
)。custom_routes.php
にルートを定義します。web.php
でrequire_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. 手順
routes
ディレクトリにカスタムルートファイルを作成します。先ほどのように、custom_routes.phpを利用します。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