Laravelのファイル徹底図鑑【後編】|ミドルウェア/サービスコンテナ/ジョブ/イベント/認証/運用まで
本稿は後編です。まだの方は前編(プロジェクト構成・MVC・リクエストの流れ)からどうぞ。 ここでは実務で欠かせない裏方の仕組みを、対応するファイルの場所と役割から理解します。
ミドルウェアとHTTPカーネル
app/Http/Middleware/*:認証/CSRF/メンテナンス/トリム等の処理を定義app/Http/Kernel.php:グローバル/グループ(web/api)/ルート単位の登録
// app/Http/Kernel.php(例・抜粋)
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
サービスコンテナ & プロバイダ(依存注入の中心)
app/Providers/AppServiceProvider.php:アプリ全体の登録・ブート処理config/app.php:プロバイダの登録/エイリアス(ファサード)
// app/Providers/AppServiceProvider.php(例)
public function register(): void {
$this->app->bind(\App\Contracts\PaymentGateway::class, \App\Services\StripePayment::class);
}
public function boot(): void {
// View Composer や Validation ルールの拡張など
}
依存注入(DI)はテスタブルで疎結合な設計の鍵。コントローラやジョブのコンストラクタに型宣言すると自動解決されます。
ファサードとヘルパ
ファサード(例:Cache, Log, Storage)はコンテナ登録済みのクラスに静的風APIでアクセスする仕組み。ユースケースに応じて DI と使い分けます。
イベント/リスナ & ジョブ/キュー
app/Events/*:ドメインの出来事を表現(発火)app/Listeners/*:反応を実装(非同期実行も可)app/Jobs/*:時間のかかる処理をキューへconfig/queue.php,.env:ドライバ(database/redis/sqs)設定app/Console/Kernel.php:スケジューラ($schedule)
// スケジューラ例: app/Console/Kernel.php
protected function schedule(\Illuminate\Console\Scheduling\Schedule $schedule): void {
$schedule->job(new \App\Jobs\DailyReportJob)->dailyAt('07:00');
}
メール/通知/ブロードキャスト
app/Mail/*(Mailable)+resources/views/*(メールBlade)app/Notifications/*(Mail/Database/Broadcast等のチャネル)routes/channels.php(Broadcastチャンネル認可)config/mail.php,config/broadcasting.php
認証/認可(Gate/Policy, Sanctum/Fortify)
app/Models/User.php:Authenticatableapp/Policies/*とAuthServiceProviderでポリシー登録config/sanctum.php(APIトークン)/Fortify導入時の設定
// AuthServiceProvider(抜粋)
protected $policies = [
\App\Models\Post::class => \App\Policies\PostPolicy::class,
];
例外処理とロギング
app/Exceptions/Handler.php:render()/report()のカスタムconfig/logging.php:チャネル(stack, single, daily, slack 等)storage/logs/laravel.log:アプリログ
ストレージとファイルシステム
config/filesystems.php:ローカル/公開/S3 などstorage/app,storage/app/publicとpublic/storage(シンボリックリンク)- アップロードは
Storage::disk('s3')->put(...)等で実装
キャッシュとパフォーマンス
config/cache.php:ドライバ(file/redis/memcached)- コマンド:
route:cache/config:cache/view:cache - アプリケーションキャッシュ:
Cache::remember()パターン
テスト(Feature / Unit / Pest)
tests/Feature/*,tests/Unit/*- HTTPテスト、DBリフレッシュ、認証の擬似化、ストレージ偽装など
phpunit.xmlで並列実行・DB設定
Artisan & Composer周辺ファイル
artisan:CLIエントリ(php artisan listで確認)composer.json:依存、PSR-4、scripts(デプロイ自動化も)bootstrap/cache/*.php:キャッシュ成果物(手動編集NG)
運用とセキュリティの要点(ファイル視点)
- .envは絶対に公開しない(CI/CDで環境ごとに注入)
APP_KEYの設定必須、メンテナンスモード、ヘッダ/CSRF/RateLimitの見直し- ログ/キャッシュ/セッションの保存先(パーミッション/容量)
- 公開ディレクトリはpublic/のみをWebに晒す



コメント