# PHP Laravel開発者面接質問2026:完全準備ガイド > 2026年のLaravel 13対応。Eloquent ORM、サービスコンテナ、認証パターン、キュー処理、テスト戦略など、Laravelエンジニア面接で問われる重要トピックを網羅的に解説します。 - Published: 2026-09-07 - Updated: 2026-09-07 - Author: Anthony Fillion-Maillet - Reading time: 5 min --- PHP Laravel開発者の面接では、フレームワークの知識とソフトウェア設計原則の両方が問われます。2026年3月にリリースされたLaravel 13では、AI SDK、PHP Attributes、Passkey認証が導入されており、面接官は最新機能の理解とコア基礎知識の両方を求めています。 > **面接の重点分野** > > Laravel面接では通常、5つの柱がカバーされます:Eloquent ORMのリレーションシップとパフォーマンス、サービスコンテナと依存性注入、認証・認可パターン、キューとジョブ処理、テスト戦略です。シニアポジションでは、アーキテクチャの決定とパッケージエコシステムの知識も加わります。 ## Eloquent ORMとデータベースに関する質問 EloquentはLaravel面接で最も議論されるトピックです。面接官は、候補者が遅延ロードと即時ロード、リレーションシップの種類、クエリ最適化を理解しているかを評価します。 **Q: N+1問題とは何ですか?Laravelはどのように解決しますか?** N+1問題は、コードがコレクションを取得するために1つのクエリを実行し、その後、各アイテムの関連データをロードするためにN個の追加クエリを実行する場合に発生します。Laravelは`with()`による即時ロードでこれを解決します。 ```php // app/Http/Controllers/PostController.php // N+1問題: 投稿用に1クエリ + 著者用にNクエリ $posts = Post::all(); foreach ($posts as $post) { echo $post->author->name; // 投稿ごとにクエリが発生 } // 解決策: with()で即時ロード $posts = Post::with('author')->get(); // 合計2クエリ foreach ($posts as $post) { echo $post->author->name; // 追加クエリなし } ``` Laravel 13では開発環境でストリクトモードが維持されており、遅延ロードが発生すると例外がスローされ、N+1問題を早期に発見できます。 **Q: `hasOne`、`hasMany`、`belongsTo`、`belongsToMany`の違いを説明してください。** | リレーションシップ | 外部キーの位置 | 例 | |--------------|---------------------|----------| | hasOne | 関連モデル上 | User hasOne Profile (profiles.user_id) | | hasMany | 関連モデル上 | User hasMany Posts (posts.user_id) | | belongsTo | 現在のモデル上 | Post belongsTo User (posts.user_id) | | belongsToMany | ピボットテーブル | User belongsToMany Roles (role_user テーブル) | **Q: ソフトデリートの処理方法とその影響について説明してください。** ```php // app/Models/Post.php use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use SoftDeletes; // ソフトデリートされたレコードはデフォルトで除外される // 含めるには: // Post::withTrashed()->get(); // 削除済みのみを取得: // Post::onlyTrashed()->get(); } ``` ソフトデリートは`deleted_at`カラムを追加します。明示的に要求しない限り、クエリはソフトデリートされたレコードを自動的に除外します。これはユニーク制約に影響し、最適なパフォーマンスのために`deleted_at`を含む複合インデックスが必要になります。 ## サービスコンテナと依存性注入 [サービスコンテナ](https://laravel.com/docs/13.x/container)はLaravelの中核です。バインディング、解決、コンテキスト注入の理解が、ジュニアとシニア候補者を区別します。 **Q: サービスコンテナとは何ですか?なぜ重要ですか?** サービスコンテナはクラスの依存関係を管理し、依存性注入を実行します。クラスを自動的に解決し、疎結合とテスタビリティを実現します。 ```php // app/Providers/AppServiceProvider.php public function register(): void { // インターフェースバインディング $this->app->bind( PaymentGatewayInterface::class, StripePaymentGateway::class ); // シングルトン: 毎回同じインスタンス $this->app->singleton(ReportGenerator::class, function ($app) { return new ReportGenerator($app->make(Cache::class)); }); } ``` **Q: `bind()`、`singleton()`、`instance()`の違いは何ですか?** - `bind()`: クラスが解決されるたびに新しいインスタンスを作成 - `singleton()`: 1つのインスタンスを作成し、以降の解決で同じインスタンスを返す - `instance()`: 既存のオブジェクトインスタンスをコンテナにバインド ```php // app/Providers/AppServiceProvider.php // bind: 毎回新しいインスタンス $this->app->bind(Service::class, fn() => new Service()); // singleton: リクエストライフサイクル全体で1つのインスタンス $this->app->singleton(Cache::class, fn() => new RedisCache()); // instance: すでにインスタンス化されたオブジェクトをバインド $config = new Config(['debug' => true]); $this->app->instance(Config::class, $config); ``` サービスコンテナの概念については、[サービスコンテナ&DIモジュール](/technologies/laravel/interview-questions/service-container-di)で練習できます。 ## 認証と認可パターン Laravel 13では、既存の方法に加えてPasskey認証が導入されました。面接官はSanctum、Passport、ポリシー、ゲートの知識を期待します。 **Q: SanctumとPassportはどのような場合に使い分けますか?** | 機能 | Sanctum | Passport | |---------|---------|----------| | ユースケース | SPA、モバイルアプリ、シンプルなAPIトークン | OAuth2サーバー、サードパーティアクセス | | トークンタイプ | シンプルなAPIトークン、セッションベース | OAuth2アクセストークン、リフレッシュトークン | | 複雑さ | 最小限のセットアップ | 完全なOAuth2実装 | | トークンスコープ | アビリティ(よりシンプル) | OAuthスコープ | Sanctumはほとんどのアプリケーションに適しています。Passportは、アプリケーションがサードパーティクライアント向けのOAuth2プロバイダーとして機能する必要がある場合に必要です。詳細な比較については[Laravel Sanctum vs Passport](/blog/laravel/laravel-sanctum-vs-passport-api-authentication)を参照してください。 **Q: ポリシーとゲートの違いは何ですか?** ゲートはクロージャベースの認可チェックです。ポリシーは特定のモデルの認可ロジックをグループ化するクラスです。 ```php // app/Policies/PostPolicy.php class PostPolicy { public function update(User $user, Post $post): bool { return $user->id === $post->user_id; } public function delete(User $user, Post $post): bool { return $user->id === $post->user_id || $user->hasRole('admin'); } } // コントローラーでの使用 public function update(Request $request, Post $post) { $this->authorize('update', $post); // PostPolicyを使用 // ... 更新ロジック } ``` [認可&ポリシーモジュール](/technologies/laravel/interview-questions/authorization-policies)では、高度な認可パターンをカバーしています。 ## キューとジョブ処理 キューはスケーラブルなLaravelアプリケーションに不可欠です。面接官はジョブ設計、失敗処理、キュードライバーの理解を調べます。 **Q: Laravelで失敗したジョブをどのように処理しますか?** ```php // app/Jobs/ProcessPodcast.php class ProcessPodcast implements ShouldQueue { use Queueable; public int $tries = 3; public int $backoff = 60; // リトライ間の秒数 public int $timeout = 120; public function handle(): void { // ジョブロジック } public function failed(Throwable $exception): void { // 管理者に通知、外部サービスにログ Log::error('ポッドキャスト処理が失敗しました', [ 'podcast_id' => $this->podcast->id, 'error' => $exception->getMessage() ]); } } ``` 失敗したジョブは`failed_jobs`テーブルに保存されます。`php artisan queue:retry`で特定のジョブを再試行するか、`queue:retry all`で一括再試行できます。 **Q: `dispatch()`と`dispatchSync()`の違いは何ですか?** - `dispatch()`: 非同期処理のためにジョブをキューにプッシュ - `dispatchSync()`: キューをバイパスして、現在のプロセスでジョブを即座に実行 `dispatchSync()`はテストや結果がすぐに必要な場合に便利です。本番環境では、リクエストをブロックしないように、ほとんどのジョブは`dispatch()`を使用する必要があります。 ## Pestを使用したLaravelテスト Laravel 13はデフォルトのテストフレームワークとして[Pest](https://pestphp.com/)を同梱しています。面接官は機能テスト、ユニットテスト、モック、データベーステスト戦略の理解を評価します。 **Q: 外部APIに依存するコントローラーをどのようにテストしますか?** ```php // tests/Feature/PaymentTest.php use App\Services\PaymentGateway; use App\Services\FakePaymentGateway; test('支払いが正常に処理される', function () { // テスト用にフェイク実装をバインド $this->app->bind( PaymentGateway::class, FakePaymentGateway::class ); $response = $this->postJson('/api/payments', [ 'amount' => 1000, 'currency' => 'usd' ]); $response->assertStatus(200) ->assertJson(['status' => 'completed']); }); test('支払いがゲートウェイエラーを処理する', function () { $mock = Mockery::mock(PaymentGateway::class); $mock->shouldReceive('charge') ->once() ->andThrow(new PaymentFailedException('カード拒否')); $this->app->instance(PaymentGateway::class, $mock); $response = $this->postJson('/api/payments', [ 'amount' => 1000, 'currency' => 'usd' ]); $response->assertStatus(422); }); ``` **Q: `RefreshDatabase`と`DatabaseTransactions`の違いは何ですか?** - `RefreshDatabase`: テストクラスごとに1回データベースをマイグレーションし、各テストをトランザクションでラップ - `DatabaseTransactions`: データベースがすでにマイグレーション済みであることを前提とし、各テストをトランザクションでラップ `RefreshDatabase`はCI/CDパイプラインでより安全です。`DatabaseTransactions`はスキーマが安定している場合のローカル開発で高速です。 テストのベストプラクティスについては、[Pestを使用したLaravelテスト](/blog/laravel/laravel-testing-pest-mocking-best-practices)を参照してください。 ## Laravel 13固有の質問 面接官は[Laracon EU 2026](https://laraveldaily.com/post/laravel-13-laracon-eu-taylor-otwell)で発表されたLaravel 13の機能についてますます質問するようになっています。 **Q: Laravel AI SDKとは何ですか?いつ使用しますか?** [Laravel AI SDK](https://laravel.com/docs/13.x/ai)は、AI操作のための統一APIを提供します:テキスト生成、埋め込み、ツール呼び出しエージェント、オーディオ、画像生成。OpenAI、Anthropic、その他のプロバイダー間の違いを抽象化します。 ```php // config/ai.phpでデフォルトプロバイダーを定義 // アプリケーションコードでの使用 use Illuminate\Support\Facades\AI; $response = AI::text('この記事を開発者向けに要約') ->withContext($articleContent) ->generate(); // セマンティック検索用の埋め込み $embedding = AI::embeddings($searchQuery)->generate(); $results = Post::query() ->nearestNeighbors('embedding', $embedding, 10) ->get(); ``` SDKは、複数のプロバイダーSDKを管理せずにAI機能を必要とするアプリケーションに適しています。 **Q: Laravel 13でPHP Attributesはどのように機能しますか?** Laravel 13では、コンポーネント設定のクラスプロパティの代替として、PHP 8 Attributesが導入されました。これは非破壊的変更であり、プロパティベースの設定は引き続き機能します。 ```php // 従来のアプローチ class SendWelcomeEmail implements ShouldQueue { public $queue = 'emails'; public $tries = 3; } // AttributesによるLaravel 13 use Illuminate\Contracts\Queue\Attributes\Queue; use Illuminate\Contracts\Queue\Attributes\Tries; #[Queue('emails')] #[Tries(3)] class SendWelcomeEmail implements ShouldQueue { // よりクリーンなクラス本体 } ``` AttributesはIDEサポートが向上し、設定をクラス定義レベルで可視化できます。 ## 2026年Laravel面接の重要ポイント - `with()`による即時ロードをマスターし、開発環境でN+1クエリをキャッチするストリクトモードを理解する - サービスコンテナのバインディングを説明できるようにする:一時的なものには`bind()`、共有インスタンスには`singleton()`、インターフェース解決にはコンテキストバインディング - SanctumとPassportの使い分けを知る:ファーストパーティアプリにはSanctum、OAuth2プロバイダーシナリオにはPassport - `$tries`、`$backoff`、`failed()`メソッドによるキュー失敗処理を実演できる - Pestでテストを書き、外部依存にはモックを使用し、`RefreshDatabase`と`DatabaseTransactions`の違いを理解する - Laravel 13の機能に精通する:統一AI操作用のAI SDK、よりクリーンなコンポーネント設定用のPHP Attributes、Passkey認証 - 実装だけでなくトレードオフを説明する練習をする:面接官は暗記よりも推論を重視する --- Source: SharpSkill (https://sharpskill.dev), tech interview preparation for your real stack. HTML version of this page: https://sharpskill.dev/ja/blog/laravel/php-laravel-developer-interview-questions-2026