前提
Laravel固有の機能であって、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アプリケーションを初期起動するための真の鍵」とまで表現されている!
・「初期起動処理」とは、具体的にサービスコンテナの結合や、イベントリスナ、フィルター、ルートなどを登録する
・「遅延」プロバイダであって、毎回読まれるわけではなく、提供するサービスが実際に必要な場合にのみ読み込まれる仕組みである
ことだと認識します。
こちらの記事はとても参考になりました🙏
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の中身に関する記述が多くなってしまいました。
結局、役割は何なのかというと、「アプリケーションが起動する際に割り込んで実行される処理。具体的には、アプリケーション/サービスコンテナのインスタンスを作成している」と考えております。
コメント
[…] 【Laravel】LaravelにあるBootstrapとは?LaravelにあるBootstrapについて解説しますk… […]