Laravelの詳細設計書で、MVCモジュール構成図を書いていきたい

### Laravelでの詳細設計の項目検討
– MVCモジュール構成図
– シーケンス図
– controller処理ロジック
– クロスサイトスクリプティング、SQLインジェクション対策
– 環境構築手順
– デプロイ・リリース手順
– テスト手順
– コーディングルール、その他

### LaravelのMVCモジュール構成図
モデル、コントローラ、ビューだけだと説明不足のように感じるので、Middleware、Eventなど、アプリケーションに使用しているclassも書いていくイメージか?

「開発工程は、要件定義→基本設計→詳細設計→プログラミング→単体テスト→結合テスト→総合テスト→運用テスト→本番移行」を鵜呑みにして、詳細設計書は実装の前に書くものかと思ってましたが、実際の実務では、ベテランエンジニアを除けばある程度実装してから書かないと、かなり手直しが発生するんなんじゃないかと思ってしまいます。

Laravel : http requestからルーティングまでのkernel処理の流れ

ユーザがアクセスしてきた時に、requestからresponseまでの処理がどうなっているのか?
1. /public/.httaccess が読み込まれる
2. RewriteCond %{REQUEST_FILENAME}により、該当ディレクトリ、該当ファイルが読み込まれる
3. /public/index.php が呼ばれる
4. index.phpにより、カーネル処理が登録される
5. ルーティング処理

### 1,2 /public/.httaccess
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
-> RewriteCondで、該当ディレクトリ、該当ファイルが読み込まれる
-> RewriteCond に記述した条件が満たされた時のみ RewriteRule に記述したURLの書き換えと転送が実行される

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

### 3~4./public/index.php
– autoload.php、bootstrap/app.phpが読み込まれる
 (controllerのuse classを使用する為)
– アプリケーションインスタンスの生成
 (Illuminate\Foundation\Applicationのインスタンス)
– カーネル処理
 (app/Http/Kernel.phpに渡される。その際に「環境設定」「エラーハンドラー」「ミドルウェア」「サービスプロバイダ」などが読み込まれる)
 HTTPカーネルがサービスプロバイダを登録する際に、web.phpファイルが読み込まれる
– リクエストのディスパッチ

require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);

### 5. Illuminate\Contracts\Http\Kernel

public function bootstrap();
public function handle($request);
public function terminate($request, $response);
public function getApplication();

### 6. ルーティング
– ファサードを使い、Illuminate\Routing\Routerクラスの各メソッドを使う

vendor/laravel/framework/src/illuminateに機能が揃ってますね。