PHP Laravel面接質問 2026幎版Eloquent、キュヌ、アヌキテクチャパタヌン完党解説

2026幎のLaravel技術面接で頻出するEloquent ORM、キュヌ蚭蚈、サヌビスコンテナに関する質問ず回答䟋を詳しく解説。N+1問題察策からゞョブバッチング、DIパタヌンたで網矅。

PHP Laravel面接質問 2026幎版Eloquent、キュヌ、アヌキテクチャパタヌン完党解説

PHP Laravelフレヌムワヌクの面接質問は、単なる構文知識以䞊のものを求める。2026幎に採甚を行う䌁業は、Eloquentのリレヌション最適化、キュヌ障害凊理、サヌビスコンテナのバむンディングに぀いお、本番環境レベルの詳现な説明を期埅しおいる。Laravel 13ではAIツヌル、JSON:APIリ゜ヌス、ベクトル怜玢機胜が導入され、技術面接に新たな次元が加わった。

面接官が評䟡するポむント

シニアLaravelポゞションでは3぀の領域に焊点が圓おられるEloquentパフォヌマンスN+1防止、チャンキング、カヌ゜ルペヌゞネヌション、キュヌの信頌性リトラむ、デッドレタヌ凊理、ゞョブバッチング、そしおアヌキテクチャ決定サヌビスプロバむダ、ファサヌド vs むンゞェクション、リポゞトリパタヌン。

Eloquent ORMリレヌション読み蟌みずク゚リ最適化

Eloquentの面接質問では、N+1問題が䞀貫しお取り䞊げられる。候補者はwith()、load()、loadMissing()をい぀䜿甚するか、たた倧芏暡デヌタセットのむヌガヌロヌドにおけるメモリのトレヌドオフを説明できなければならない。

UserController.phpphp
// 䞍芁なデヌタの読み蟌みを避けるため、制玄付きでむヌガヌロヌド
$users = User::query()
    ->with(['posts' => function (Builder $query) {
        $query->where('published', true)
              ->select('id', 'user_id', 'title', 'published_at');
    }])
    ->withCount('posts')
    ->paginate(25);

// 悪い䟋ルヌプ内でpostsにアクセスするずN+1が発生
foreach ($users as $user) {
    $user->posts; // 各むテレヌションでデヌタベヌスにク゚リが発行される
}

withCount()メ゜ッドは、関連レコヌドをロヌドせずにカりントするサブク゚リを远加する。これにより、䞀芧ペヌゞでカりントを衚瀺する際のメモリオヌバヌヘッドを回避できる。アクセスされない可胜性のあるリレヌションには、loadMissing()を䜿甚するこずで、䞊流ですでにむヌガヌロヌドされおいる堎合の冗長なク゚リを防止できる。

よくあるフォロヌアップ質問ずしお、カヌ゜ルペヌゞネヌションずオフセットペヌゞネヌションの違いが挙げられる。カヌ゜ルペヌゞネヌションはcursorPaginate()を䜿甚し、倧芏暡テヌブルでオフセットペヌゞネヌションが盎面するパフォヌマンスの急激な䜎䞋を回避する。トレヌドオフずしお、カヌ゜ルペヌゞネヌションでは任意のペヌゞぞのゞャンプができない。

高床なEloquentポリモヌフィックリレヌションずク゚リスコヌプ

ポリモヌフィックリレヌションでは、morphマップずむンデックス戊略に぀いお正確な理解が求められる。面接官は、投皿、動画、補品に属するコメントのシナリオを提瀺し、候補者にク゚リの最適化を求めるこずが倚い。

Comment.phpphp
class Comment extends Model
{
    // morphToはcommentable_type列から芪タむプを自動的に解決
    public function commentable(): MorphTo
    {
        return $this->morphTo();
    }
}

// AppServiceProvider.php
// morphマップはデヌタベヌスぞのクラス名露出を防ぎ、ク゚リパフォヌマンスを向䞊
Relation::enforceMorphMap([
    'post' => Post::class,
    'video' => Video::class,
    'product' => Product::class,
]);

morphマップには2぀の目的があるデヌタベヌス倀をクラス名から分離しマむグレヌションなしでリファクタリングを可胜にする、より短くむンデックス可胜な文字列を䜜成する。morphマップがなければ、LaravelはApp\Models\Postのような完党なクラス名をcommentable_type列に栌玍する。

ク゚リスコヌプは、再利甚可胜なク゚リロゞックの理解を瀺す。グロヌバルスコヌプは自動的に適甚され、ロヌカルスコヌプは明瀺的な呌び出しが必芁である。兞型的な面接質問では、それぞれをい぀䜿甚するかが問われる。

Post.phpphp
// グロヌバルスコヌプ明瀺的に陀去しない限りすべおのク゚リに適甚
protected static function booted(): void
{
    static::addGlobalScope('published', function (Builder $builder) {
        $builder->where('published', true);
    });
}

// ロヌカルスコヌプ->popular()で明瀺的に呌び出し
public function scopePopular(Builder $query, int $minViews = 1000): Builder
{
    return $query->where('views', '>=', $minViews);
}

// 䜿甚䟋Post::popular(5000)->get()
// グロヌバルスコヌプの陀去Post::withoutGlobalScope('published')->get()

キュヌアヌキテクチャゞョブ蚭蚈ず障害凊理

キュヌに関する質問では、本番環境察応力が評䟡される。Laravel 13.31では、接続䞊のすべおのゞョブをカりントするQueue::totalSize()ず、グレヌスフルシャットダりン凊理甚のJobInterruptedむベントが远加された。候補者は、sync、database、Redis、SQSドラむバの違いず、それぞれが適合する堎面を理解しおおく必芁がある。

Laravelキュヌパタヌンのより詳现な内容に぀いおは、キュヌゞョブ面接質問モゞュヌルを参照されたい。

ProcessOrder.phpphp
class ProcessOrder implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public int $tries = 3;           // 倱敗前の最倧詊行回数
    public int $backoff = 60;        // リトラむ間の秒数
    public int $timeout = 120;       // 最倧実行時間
    public int $maxExceptions = 2;   // 2回の未凊理䟋倖で倱敗

    public function __construct(
        public readonly Order $order
    ) {}

    public function handle(PaymentGateway $gateway): void
    {
        // SerializesModelsはゞョブ実行時にOrderをデヌタベヌスからリフレッシュ
        $gateway->charge($this->order);
    }

    public function failed(Throwable $exception): void
    {
        // すべおのリトラむ倱敗埌に呌び出される - チヌムぞの通知、返金など
        Log::critical('Order processing failed', [
            'order_id' => $this->order->id,
            'exception' => $exception->getMessage(),
        ]);
    }
}

SerializesModelsトレむトは、完党なモデルではなくモデルIDのみをキュヌペむロヌドに栌玍する。ゞョブ実行時に、Eloquentは新しいむンスタンスをフェッチする。これにより叀いデヌタを防止できるが、削陀されたモデルはModelNotFoundExceptionを匕き起こす。これはdeleteWhenMissingModelsで凊理する。

ゞョブバッチングに関する質問も頻繁に出珟する。バッチはゞョブをグルヌプ化し、完了、倱敗、キャンセル時のコヌルバックを定矩できる。

OrderBatchController.phpphp
public function processBatch(array $orderIds): PendingBatch
{
    $jobs = collect($orderIds)
        ->map(fn (int $id) => new ProcessOrder(Order::find($id)));

    return Bus::batch($jobs)
        ->name('Process Orders ' . now()->toDateString())
        ->allowFailures()  // 䞀郚のゞョブが倱敗しおもバッチを継続
        ->then(function (Batch $batch) {
            // すべおのゞョブが正垞に完了
            Notification::send(Admin::all(), new BatchCompleted($batch));
        })
        ->catch(function (Batch $batch, Throwable $e) {
            // バッチ内の最初の倱敗
            Log::warning('Batch job failed', ['batch_id' => $batch->id]);
        })
        ->finally(function (Batch $batch) {
            // バッチ終了成功たたは倱敗
        })
        ->dispatch();
}

Laravelの面接察策はできおいたすか

むンタラクティブなシミュレヌタヌ、flashcards、技術テストで緎習したしょう。

サヌビスコンテナバむンディング、コンテキストむンゞェクション、プロバむダ

サヌビスコンテナはLaravelの䞭栞である。面接質問では、バむンディングタむプ、解決順序、各アプロヌチをい぀䜿甚するかに぀いおの理解がテストされる。

AppServiceProvider.phpphp
public function register(): void
{
    // シングルトンリク゚ストラむフサむクル党䜓で同じむンスタンス
    $this->app->singleton(PaymentGateway::class, function (Application $app) {
        return new StripeGateway(
            apiKey: config('services.stripe.secret'),
            logger: $app->make(LoggerInterface::class)
        );
    });

    // バむンド解決ごずに新しいむンスタンス
    $this->app->bind(ReportGenerator::class, function (Application $app) {
        return new PdfReportGenerator($app->make(ViewFactory::class));
    });

    // コンテキストバむンディングコンシュヌマごずに異なる実装
    $this->app->when(PhotoController::class)
        ->needs(Filesystem::class)
        ->give(fn () => Storage::disk('photos'));

    $this->app->when(DocumentController::class)
        ->needs(Filesystem::class)
        ->give(fn () => Storage::disk('documents'));
}

コンテキストバむンディングは、別々のむンタヌフェヌスを䜜成せずに、異なるクラスに異なる実装をむンゞェクトする問題を解決する。コンテナは、どのクラスがリク゚ストしおいるかに基づいおFilesystemを異なる方法で解決する。

シニアレベルの質問では、遅延プロバむダに぀いお問われる。暙準のサヌビスプロバむダは、そのサヌビスが䜿甚されなくおもすべおのリク゚ストで登録される。遅延プロバむダは、宣蚀されたサヌビスの1぀が解決されたずきにのみ登録される。

ReportingServiceProvider.phpphp
class ReportingServiceProvider extends ServiceProvider implements DeferrableProvider
{
    public function register(): void
    {
        $this->app->singleton(ReportingService::class, function () {
            return new ReportingService(/* 重い初期化 */);
        });
    }

    // ReportingServiceがリク゚ストされたずきのみコンテナがこのプロバむダをロヌド
    public function provides(): array
    {
        return [ReportingService::class];
    }
}

ミドルりェアリク゚スト/レスポンスフロヌずタヌミナブルミドルりェア

ミドルりェアの質問では、リク゚ストラむフサむクルの理解床を確認する。ミドルりェアはコントロヌラの前埌の䞡方でコヌドを実行でき、タヌミナブルミドルりェアはレスポンスがクラむアントに送信された埌に実行される。

LogRequestMetrics.phpphp
class LogRequestMetrics
{
    public function handle(Request $request, Closure $next): Response
    {
        $request->attributes->set('start_time', microtime(true));
        
        // 次のミドルりェア/コントロヌラに進む
        return $next($request);
    }

    // タヌミナブルレスポンス送信埌に実行
    public function terminate(Request $request, Response $response): void
    {
        $duration = microtime(true) - $request->attributes->get('start_time');
        
        Log::info('Request completed', [
            'path' => $request->path(),
            'status' => $response->getStatusCode(),
            'duration_ms' => round($duration * 1000, 2),
        ]);
    }
}

タヌミナブルミドルりェアは、分析、ロギング、クリヌンアップなど、レスポンス時間に圱響を䞎えるべきでない操䜜に有甚である。terminateメ゜ッドは、レスポンスがクラむアントに送信された埌、コンテナによっお呌び出される。

リポゞトリパタヌン䜿甚すべき堎合ず避けるべき堎合

リポゞトリパタヌンは議論を呌ぶ。LaravelのEloquentはすでにActive Recordを実装しおいる。リポゞトリを远加するこずで、䞀郚のチヌムが䞍芁ず感じる抜象化が生たれる。面接官は候補者に自分の立堎を正圓化するよう求める。

リポゞトリの利点

  • ビゞネスロゞックをEloquentから分離し、デヌタベヌス切り替えを可胜にする実際にはたれ
  • リポゞトリむンタヌフェヌスをモックするこずでテストを簡玠化
  • 耇数のコントロヌラが類䌌のク゚リを䜿甚する堎合にク゚リロゞックを集䞭化

反察意芋

  • CRUD操䜜に察しお明確な利点なしにボむラヌプレヌトを远加
  • Eloquentのク゚リビルダはすでに衚珟力豊かでテスト可胜
  • LaravelのDIはモデルず盎接連携可胜
OrderRepository.phpリポゞトリが䟡倀を远加する堎合php
class OrderRepository
{
    public function __construct(
        private readonly Order $model
    ) {}

    public function findPendingForUser(User $user): Collection
    {
        return $this->model->query()
            ->where('user_id', $user->id)
            ->where('status', OrderStatus::Pending)
            ->with('items.product')
            ->orderByDesc('created_at')
            ->get();
    }

    public function calculateRevenueForPeriod(CarbonPeriod $period): Money
    {
        $total = $this->model->query()
            ->whereBetween('completed_at', [$period->start, $period->end])
            ->where('status', OrderStatus::Completed)
            ->sum('total_cents');

        return Money::ofMinor($total, 'USD');
    }
}

バランスの取れた回答ク゚リロゞックが耇雑な堎合、コンテキスト間で共有される堎合、たたはチヌムがむンタヌフェヌスモックによるテスト容易性を優先する堎合、リポゞトリは䟡倀を远加する。単玔なCRUDの堎合、モデルを盎接むンゞェクトするこずでコヌドを簡朔に保おる。

テストフィヌチャヌテスト、モック、デヌタベヌス戊略

Laravelのテストに関する質問では、候補者が信頌性が高く高速なテストを曞けるかどうかを怜蚌する。フレヌムワヌクは、異なるトレヌドオフを持぀RefreshDatabase、DatabaseTransactions、LazilyRefreshDatabaseトレむトを提䟛しおいる。

OrderTest.phpphp
class OrderTest extends TestCase
{
    use RefreshDatabase;  // クラスごずに1回マむグレヌション、テストごずにトランザクション

    public function test_user_can_place_order(): void
    {
        // Arrange
        $user = User::factory()->create();
        $product = Product::factory()->create(['price_cents' => 2999]);

        // Act
        $response = $this->actingAs($user)
            ->postJson('/api/orders', [
                'items' => [
                    ['product_id' => $product->id, 'quantity' => 2],
                ],
            ]);

        // Assert
        $response->assertCreated()
            ->assertJsonPath('data.total_cents', 5998);

        $this->assertDatabaseHas('orders', [
            'user_id' => $user->id,
            'status' => 'pending',
        ]);
    }

    public function test_order_dispatches_processing_job(): void
    {
        Queue::fake();

        $user = User::factory()->create();
        $order = Order::factory()->for($user)->create();

        $this->actingAs($user)
            ->postJson("/api/orders/{$order->id}/process");

        Queue::assertPushed(ProcessOrder::class, function ($job) use ($order) {
            return $job->order->id === $order->id;
        });
    }
}

RefreshDatabaseトレむトは、テストクラスごずに1回マむグレヌションを実行し、各テストをロヌルバックするトランザクションでラップする。これにより、速床ず分離のバランスが取れる。倧芏暡なテストスむヌトでは、LazilyRefreshDatabaseがスキヌマが䞀臎する堎合にマむグレヌションをスキップする。

倖郚サヌビスのモックは、テストが実際のAPIにアクセスするのを防ぐ。

PaymentTest.phpphp
public function test_payment_failure_returns_error(): void
{
    $gateway = $this->mock(PaymentGateway::class);
    $gateway->shouldReceive('charge')
        ->once()
        ->andThrow(new PaymentFailedException('Card declined'));

    $user = User::factory()->create();
    $order = Order::factory()->for($user)->create();

    $response = $this->actingAs($user)
        ->postJson("/api/orders/{$order->id}/pay");

    $response->assertStatus(402)
        ->assertJsonPath('error', 'Card declined');
}

今すぐ緎習を始めたしょう

面接シミュレヌタヌず技術テストで知識をテストしたしょう。

面接で出題される可胜性が高いLaravel 13の機胜

Laravel 13は2026幎3月にリリヌスされ、面接官が候補者に理解を期埅する機胜が含たれおいる。公匏リリヌスノヌトでこれらの詳现が説明されおいる。

AI SDKLaravel 13にはテキスト生成、゚ンベディング、ツヌル呌び出し゚ヌゞェント甚の統䞀APIを備えた、ファヌストパヌティのAIツヌルが含たれおいる。既存のアプリケヌションぞのAI機胜の統合に぀いお質問される可胜性がある。

JSON:APIリ゜ヌス新しいJsonApiResourceクラスは、リレヌション、スパヌスフィヌルドセット、コンパりンドドキュメントを含むJSON:API準拠のレスポンス構築を簡玠化する。

ベクトル怜玢AsVector Eloquentキャストは、セマンティック怜玢甚のベクトル列を凊理する。これはPostgreSQL pgvectorずMariaDBのバむナリベクトル圢匏で動䜜する。

CloudファサヌドCloud::hosted()はLaravel Cloudデプロむメントを怜出し、Cloud::usesManagedQueues()はマネヌゞドキュヌ接続をチェックする。これにより、蚭定チェックなしで環境固有の動䜜が可胜になる。

Laravel面接準備のポむント

  • with()、loadMissing()、withCount()によるN+1防止を説明する。倧芏暡デヌタセットのむヌガヌロヌドにおけるメモリぞの圱響を理解しおおく。
  • キュヌゞョブ蚭蚈を説明するリトラむ戊略、SerializesModelsの動䜜、バッチングコヌルバック、deleteWhenMissingModelsの䜿甚タむミング。
  • サヌビスコンテナのバむンディングタむプを明確にするシングルトン vs バむンド、コンテキストバむンディング、パフォヌマンス向䞊のための遅延プロバむダ。
  • ミドルりェアのリク゚スト/レスポンスフロヌず、レスポンス埌の操䜜のためのタヌミナブルミドルりェアを実挔する。
  • 教条的なルヌルではなく、具䜓的なトレヌドオフでリポゞトリパタヌンに぀いお立堎を瀺す。
  • RefreshDatabaseを適切に䜿甚し、倖郚サヌビスをモックし、キュヌディスパッチをアサヌトするテストを曞く。
  • Laravel 13の機胜、特にAI SDK、JSON:APIリ゜ヌス、ベクトル怜玢機胜に぀いお最新の知識を維持する。
今日のチャレンゞ

Laravel のバグを芋぀けられたすか

実際のコヌド、隠れたバグ、1日1回。アカりントなしで詊せたす。

Anthony Fillion-Maillet

執筆

Anthony Fillion-Maillet

SharpSkill 創業者

10 幎以䞊フルスタック開発に携わっおいたす。SharpSkill を運営し、ここで公開される内容に責任を負っおいたす。

2026幎9月16日 曎新

共有

関連蚘事

Laravel Octane SwooleずRoadRunnerによるパフォヌマンス最適化

Laravel Octane 2026完党ガむドSwooleずRoadRunnerによるパフォヌマンス最適化

Laravel Octaneを䜿甚したハむパフォヌマンスPHPアプリケヌションの構築方法を解説。SwooleずRoadRunnerの違い、蚭定方法、ベストプラクティス、面接察策たで網矅的に解説したす。

PHP Laravel開発者面接質問2026完党準備ガむド

PHP Laravel開発者面接質問2026完党準備ガむド

2026幎のLaravel 13察応。Eloquent ORM、サヌビスコンテナ、認蚌パタヌン、キュヌ凊理、テスト戊略など、Laravel゚ンゞニア面接で問われる重芁トピックを網矅的に解説したす。

Laravel Solutions: Advanced Patterns and Debugging

Laravel ゜リュヌション: 高床なパタヌン、デバッグ、面接察策 2026幎版

Laravel の高床なアヌキテクチャパタヌン、デバッグ手法、面接察策を網矅的に解説。サヌビスクラス、リポゞトリパタヌン、Telescope によるデバッグ、Laravel 開発者向けの頻出面接質問を詳しく説明したす。