本文へ移動
Laravel Tips

リクエストのライフサイクル

リクエストが Laravel に届いてからレスポンスが返るまでの流れを、index.php・カーネル・サービスプロバイダ・ルーティングの順に、やさしく説明します。

道具のしくみを知っていると、安心して使えます。Laravel も同じです。このページでは、ブラウザからのリクエスト(お願い)が届いてから、レスポンス(答え)が返るまでの大まかな流れを説明します。全体が見えると、Laravel が「魔法」のように感じにくくなります。分からない言葉があっても気にしなくて大丈夫です。ほかのページを読むうちに、少しずつ分かってきます。

流れの全体#

流れは、次の5つの段に分けて考えられます。

段 何が起きるか
1. 最初の一歩 public/index.php が受け取り、アプリを作る
2. カーネル リクエストがカーネル(処理の中心になる係)に渡り、ミドルウェアを通る準備が整う
3. サービスプロバイダ 部品の準備が進む
4. ルーティング ルートかコントローラーに届く
5. しあげ レスポンスが戻り、ブラウザに送られる

最初の一歩#

どんなリクエストも、最初に入る玄関は public/index.php です。Web サーバー(Apache や Nginx)の設定で、すべてのリクエストがここへ案内されます。この玄関のコードはわずかです。フレームワークのほかの部分を読みこみはじめるための、出発点だからです。

index.php は、まず Composer が用意した「クラスを自動で読みこむしくみ」を読みこみます。次に、bootstrap/app.php から Laravel のアプリを1つ受け取ります。Laravel が自分で最初にする仕事は、このアプリ本体を作ることです。アプリ本体は、サービスコンテナ(クラスを作って渡してくれる、道具箱のようなしくみ)でもあります。

カーネル#

次に、届いたリクエストは、HTTP カーネルかコンソールカーネルに送られます。カーネルは、すべてのリクエストが通る、処理の中心になる係です。どちらに送るかは、リクエストの種類で決まります。送るときは、アプリの handleRequest か handleCommand というメソッドを使います。ここでは、HTTP カーネル(Illuminate\Foundation\Http\Kernel)に絞って見ます。

HTTP カーネルは、bootstrappers という配列を持っています。リクエストを処理する前に動かす、準備の処理の一覧です。エラーの扱いやログの設定をしたり、アプリの環境(手元か本番か)を調べたりします。どれも Laravel の中の設定なので、ふつうは気にしなくて構いません。

HTTP カーネルは、リクエストを、アプリのミドルウェア(リクエストが処理に届く前に、間に入って確かめる処理)の列に通す役目も持っています。これらのミドルウェアは、セッションの読み書き、メンテナンスモードかどうかの確認、CSRF トークンの確認などを受け持ちます。

HTTP カーネルの handle メソッドの形は、とても簡単です。Request を受け取って、Response を返します。カーネルは、アプリ全体を表す大きな箱で、中は見えないものと考えてください。HTTP のリクエストを入れると、HTTP のレスポンスが出てきます。

サービスプロバイダ#

カーネルの準備の中でも、とくに大事なのが、アプリのサービスプロバイダ(アプリの起動のときに、道具箱へ道具を登録する場所)を読みこむことです。サービスプロバイダは、データベース・キュー・バリデーション・ルーティングなど、フレームワークのさまざまな部品を、立ち上げる役目を持っています。

Laravel は、プロバイダを1つずつ作り、まず全員の register を呼びます。登録がすべて終わったら、全員の boot を呼びます。順番を分けるのは、boot が動くときには、サービスコンテナへの登録が全部そろっているようにするためです。

Laravel の主な機能は、ほとんどすべて、サービスプロバイダが立ち上げて設定します。これほど多くの機能を受け持つので、サービスプロバイダは、Laravel の起動の流れの中でいちばん大事な部分です。

フレームワークの中では、何十ものサービスプロバイダが使われています。自分で作ることもできます。アプリが使っている自作のものや、ほかの人が作ったものの一覧は、bootstrap/providers.php で見られます。

ルーティング#

アプリの起動が済み、すべてのサービスプロバイダが登録されると、Request はルーター(リクエストを振り分ける係)に渡されます。ルーターは、リクエストをルートかコントローラーに振り分けます。そのルートだけに付いたミドルウェアも、ここで動かします。

ミドルウェアは、アプリに入ってくる HTTP のリクエストを、ふるいにかけたり、調べたりするための、便利なしくみです。たとえば、Laravel には、利用者がログインしているかを確かめるミドルウェアがあります。ログインしていなければ、ログイン画面に移します。ログインしていれば、リクエストを先へ進めます。ミドルウェアには、PreventRequestsDuringMaintenance のように、アプリのすべてのルートに付くものもあれば、特定のルートやルートのグループにだけ付くものもあります。くわしくは、ミドルウェアのページにあります。

リクエストが、そのルートに付いたミドルウェアをすべて通ると、ルートかコントローラーのメソッドが動きます。そのメソッドが返したレスポンスは、ルートのミドルウェアの列を、逆向きに戻っていきます。

しあげ#

処理が終わってレスポンスができると、今度はミドルウェアを逆向きに通って戻ります。ここで、出ていくレスポンスを確かめたり、手直ししたりできます。

レスポンスがミドルウェアを戻り終わると、HTTP カーネルの handle メソッドが、そのレスポンスをアプリの handleRequest メソッドへ返します。handleRequest は、レスポンスの send メソッドを呼びます。send が、レスポンスの中身を利用者のブラウザに送ります。これで、Laravel のリクエストの流れをひとめぐりしました。

サービスプロバイダに注目する#

サービスプロバイダは、Laravel のアプリを立ち上げるための、まさに鍵です。アプリのインスタンスが作られ、サービスプロバイダが登録され、立ち上がったアプリに、リクエストが渡されます。流れは、ほんとうにこれだけです。

サービスプロバイダがアプリをどう組み立てて立ち上げるのかを、しっかり分かっておくと、とても役に立ちます。自分で作ったサービスプロバイダは、app/Providers に置きます。

はじめの AppServiceProvider は、ほとんど空です。アプリ自身の立ち上げの処理や、サービスコンテナへの登録を足すのに、ちょうどよい場所です。大きなアプリなら、立ち上げの処理をサービスごとに細かく分けて、サービスプロバイダを複数作るとよいでしょう。

関連するページ#

公式ドキュメント(英語)

2026年10月5日時点の内容をもとに、日本語でまとめています。

ページの一覧