Laravelのファイル徹底図鑑【後編】|ミドルウェア/サービスコンテナ/ジョブ/イベント/認証/運用まで

Laravel

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:Authenticatable
  • app/Policies/*AuthServiceProvider でポリシー登録
  • config/sanctum.php(APIトークン)/Fortify導入時の設定
// AuthServiceProvider(抜粋)
protected $policies = [
  \App\Models\Post::class => \App\Policies\PostPolicy::class,
];

例外処理とロギング

  • app/Exceptions/Handler.phprender()/report() のカスタム
  • config/logging.php:チャネル(stack, single, daily, slack 等)
  • storage/logs/laravel.log:アプリログ

ストレージとファイルシステム

  • config/filesystems.php:ローカル/公開/S3 など
  • storage/app, storage/app/publicpublic/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に晒す

カテゴリ:Laravel|タグ:Laravel, サービスコンテナ, ミドルウェア, キュー, 認証, テスト

コメント

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