【Laravel】LaravelにあるBootstrapとは?

Laravel

前提

Laravel固有の機能であって、twitter社が提供しているBootstrapではないです。(初めは関係あるのかと思っていました。名前が同じなのは紛らわしいですね)

↓スタイルをデザインしてくれる、こちらのことではないです

Twitter Bootstrap

Laravelで作成されたプロジェクトには、bootstrapというディレクトリがあります。
その中に、app.phpというファイルがあります。

Laravelを使っている場合、最初ブラウザからアクセスがあると、public/index.phpが実行されます。その次に、こちらのbootstrap/app.phpを通る、という流れになります。

bootstrap/app.phpを見てみましょう

app.phpには色々と記述がありました。こちらを読んでみましょう。(こういうの読まずにハマったりするから自戒も込めて 


| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
//DeepL翻訳
アプリケーションの作成
|--------------------------------------------------------------------------
|
| 最初に行うのは、新しいLaravelアプリケーションのインスタンスを作成することです。
| Laravelのすべてのコンポーネントの「糊」の役割を果たすものであり
| 様々なパーツを束ねるシステムの IoC コンテナです。

コードとしての記述はこちらです:

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

こちら、何を呼び出しているかというと、Illuminate\Foundation\Application.php から、config/app.phpの中にある「providersの配列」を読みに行っています。

「providersの配列」にはAuthServiceProviderなどLaravelで持っている「サービスプロバイダー」の一覧が記述されており、ここで、「サービスプロバイダー」の登録を行なっています。

「サービスプロバイダー」とは何か?という疑問が出てきました。
リーダブルを読んでいると

・Laravelのコアサービスの初期起動処理を行っている
 リーダブルには「Laravelアプリケーションを初期起動するための真の鍵」とまで表現されている!
・「初期起動処理」とは、具体的にサービスコンテナの結合や、イベントリスナ、フィルター、ルートなどを登録する
・「遅延」プロバイダであって、毎回読まれるわけではなく、提供するサービスが実際に必要な場合にのみ読み込まれる仕組みである

ことだと認識します。

こちらの記事はとても参考になりました🙏

Laravel サービスプロバイダーついに理解できた | アールエフェクト
Laravel入門者にとってマニュアルだけを読んでサービスプロバイダーを理解するのは相当難しいです。しかし、簡単なコードを使って動作確認を行なっていくと難しいものではないことがすぐにわかります。今回はEncryptionサービスを使ってサービスプロバイダーを理解したあと、自作のサービスプロパイダーを作成し登録します。

Create The Applicationの次には、Bind Important Interfacesが続きます。

|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
//DeepL翻訳
|--------------------------------------------------------------------------
| 重要なインタフェースをバインドする
|--------------------------------------------------------------------------
|
| 次に、重要なインターフェイスをコンテナにバインドする必要があります。
| 必要なときに解決できるようになります。カーネルは
| ウェブと CLI の両方からこのアプリケーションにやってくるリクエスト。
|

コードとしての記述はこちらです:

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

namespace見る限り、Laravelでの重要ような箇所ですね。
リーダブルには、「通常、これらのクラスは、皆さんが関わる必要のないLaravelの内部設定を処理します。」とあり、そっとしておきます。
最後に、returnがあります。

|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
//DeepL翻訳
|--------------------------------------------------------------------------
| アプリケーションを返す
|--------------------------------------------------------------------------
|
| このスクリプトは、アプリケーションのインスタンスを返します。このインスタンスは
| インスタンスの構築を分離できるように、呼び出し側のスクリプトは
| 実際のアプリケーションの実行やレスポンスの送信とは異なります。
|

最初に定義したappを返しています。

return $app;

結局Bootstrapの役割とは?

bootstrap/app.phpの中身に関する記述が多くなってしまいました。

結局、役割は何なのかというと、「アプリケーションが起動する際に割り込んで実行される処理。具体的には、アプリケーション/サービスコンテナのインスタンスを作成している」と考えております。

コメント

  1. […] 【Laravel】LaravelにあるBootstrapとは?LaravelにあるBootstrapについて解説しますk… […]

タイトルとURLをコピーしました