すべての Laravel リクエストは単一のフロントコントローラー public/index.php を通じて入り、HTTP Kernel によって middleware スタックと router を経て controller まで駆動され、 を返します。その後 middleware が実行されます。
Responsepublic/index.php ── autoload + app の bootstrap
▼
HTTP Kernel::handle($request)
▼
Bootstrappers ── env, config, providers (register + boot)
▼
Global middleware ── (TrustProxies, HandleCors, ...)
▼
Router dispatch ── route をマッチ
▼
Route / group middleware ── (auth, throttle, verified, ...)
▼
Controller (または closure) ── あなたのロジック → Response を返す
▼
Response ──▶ client
▼
Kernel::terminate ── terminable middleware (例: session 保存, logging)
index.php が Composer の autoload を読み込み、アプリケーションコンテナを bootstrap します。Request を受け取り、bootstrapper を実行します。env + config を読み込み、service provider を register して boot します(ここでフレームワークとあなたの binding が結線されます)。auth、throttle、verified)が controller の前に実行されます。それぞれがショートサーキットできます。Response(view、JSON、redirect)を返します。middleware の「後」ロジックは、response が外へバブルアップするときに実行されます。Kernel::terminate が terminable middleware を実行し、遅延処理を行います。// app/Http/Middleware/Timing.php → 3/5. middleware
public function handle($request, Closure $next)
{
$request->attributes->set('started', microtime(true));
$response = $next($request); // 次のレイヤー / controller に渡す
$response->headers->set('X-Time', '...'); // 「後」ロジック
return $response;
}
// routes/web.php → 4. routing (+ middleware)
Route::get('/items/{id}', [ItemController::class, 'show'])->middleware('auth');
// app/Http/Controllers/ItemController.php → 6. controller
public function show(int $id)
{
return response()->json(Item::findOrFail($id));
}
Laravel のライフサイクルは service container と middleware pipeline を中心に構築されているため、順序 — bootstrap/provider、次に global middleware、次に routing、次に route middleware、次に controller、次に terminate — を知ることで、auth、レート制限、CORS、クリーンアップがどこに属するかが正確に分かります。なぜ service が inject される前に provider で bind されていなければならないのか、なぜ throttle が controller の実行前にリクエストを拒否するのか、そしてユーザーを待たせないために遅い処理をどのように terminable middleware に遅延させるのかを説明します。
ジュニアからシニアまで、詳細な回答付きのIT面接質問ライブラリ。
寄付する