Laravelのライフサイクル
更新日 : 2020年02月04日
ライフサイクルとは「生まれてから死ぬまで」の一生を表す言葉ですが、プログラムやITの用語としても使われ、単純に「プログラムのスタートから終わりまで」を表します。Laravelフレームワークがリクエストを受け付け、レスポンスをクライアントに返すまでの流れ(ライフサイクル)を学ぶことで、Laravelの動きを把握しておきましょう。
今回の内容はhttps://readouble.com/laravel/6.x/ja/lifecycle.htmlのドキュメントから確認できます。
リクエストからレスポンスまで
下の図を順番に解説します。
HTTPリクエストの受け付け
Laravelのディレクトリ構造について説明した際、Laravelを動作させるときにWEBサーバーで公開するべきディレクトリ(ドキュメントルート)はpublic
ディレクトリだけでした。その他のディレクトリは公開されません。その他のPHPファイルはどのように実行されるのでしょうか。
実は、PHPファイルをロードすることにより他のPHPファイルは実行されます。
Laravelへのリクエストはすべてpublic/index.php
へ送られます。これはWEBサーバーの設定で実現しています。
Laravelアプリケーション配下へのHTTPリクエストであればpublic/index.php
が必ず最初に実行されます。このindex.php
がLaravelのエントリーポイント(処理の始まり)です。
Laravelアプリケーションのインスタンス作成
public/index.php
ではComposerでインストールしたライブラリを読み込んだあと、bootstrap/app.php
を読み込みます。このapp.php
ではLaravelアプリケーションのインスタンスを作成しています。インスタンスを生成することにより、Laravelの各種機能を実行することができる準備が整います。
HTTPカーネルの読み込み
カーネルとは、機能の中枢という意味です。Laravelフレームワークは多機能なため、HTTPリクエストを処理するHTTPカーネルやサーバー内処理をおこなうConsoleカーネルなどいくつかのカーネルが存在します。
public/index.php
でLaravelアプリケーションインスタンスを生成後、HTTPカーネルを読み込みます。
HTTPカーネルからhandleの実行
HTTPカーネルはhandleメソッドを持っています。車のハンドルと同じような意味で、HTTPのリクエストをコントロールするメソッドです。handleメソッドの引数にHTTPリクエストのオブジェクトを入れることで、実行結果としてHTTPレスポンスのオブジェクトが返却されます。
handleの中身
handleメソッドではHTTPリクエストオブジェクトを受け取り、様々な処理のあとHTTPレスポンスオブジェクトを返却します。
レスポンスが返却されるまでの「様々な処理」では何が行われているのでしょうか。
- サービスプロバイダの登録
サービスプロバイダとは、Laravelの様々な機能を部品化したものを提供する機能です。これを登録することによりLaravelの様々な機能を利用できます。 - ルーターへの橋渡し
サービスプロバイダの登録が完了したあとは、ルーターへリクエストを渡します。ルーターはURLに基づき、どのコントローラーを起動するかを決定します。コントローラーは最後にビューを返します。
handleメソッドでルーターに橋渡しをすると、最後にレスポンスが返却されます。ルーターの処理自体もサービスプロバイダで定義されています。
また、handleメソッドでルーターに橋渡しをする前に、ミドルウエアの処理も行います。
handleの実行結果をユーザーに送信
handleメソッドの実行が完了すると、HTTPレスポンスオブジェクトが返却されました。
あとはこのHTTPレスポンスオブジェクトをHTTPレスポンスとしてクライアントに送るだけです。オブジェクトをHTTPレスポンスとして送信するため、$response->send()
メソッドを実行し、ライフサイクルは終了です。
まとめ
ライフサイクルについて説明しましたが、図のイメージだけでもしっかり理解しておきましょう。Laravelはそれぞれの機能が疎結合(結びつきが弱く、機能が独立していて改修やテストがしやすい)で作られているため、コードを理解するのは大変です。
大変ですが、理解できればかなり開発のしやすいフレームワークなので、柔軟性が高く、様々な機能を開発しやすいフレームワークとして人気です。
最後に特に大事な点をいくつか再度説明します。
public/index.php
がすべてのリクエストを受け付ける(エントリーポイント)- HTTPカーネルからhandleメソッドを実行し、ルーターやコントローラの処理へ移る
- コントローラー内のメソッドがビューを返却し、最後にHTTPレスポンスを作成
タグ
-
前の記事
Laravelのディレクトリ構造
-
次の記事
LaravelでHelloWorld