PHP Laravel開発者面接質問2026:完全準備ガイド
2026年のLaravel 13対応。Eloquent ORM、サービスコンテナ、認証パターン、キュー処理、テスト戦略など、Laravelエンジニア面接で問われる重要トピックを網羅的に解説します。

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()による即時ロードでこれを解決します。
// 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: ソフトデリートの処理方法とその影響について説明してください。
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes;
// ソフトデリートされたレコードはデフォルトで除外される
// 含めるには:
// Post::withTrashed()->get();
// 削除済みのみを取得:
// Post::onlyTrashed()->get();
}ソフトデリートはdeleted_atカラムを追加します。明示的に要求しない限り、クエリはソフトデリートされたレコードを自動的に除外します。これはユニーク制約に影響し、最適なパフォーマンスのためにdeleted_atを含む複合インデックスが必要になります。
サービスコンテナと依存性注入
サービスコンテナはLaravelの中核です。バインディング、解決、コンテキスト注入の理解が、ジュニアとシニア候補者を区別します。
Q: サービスコンテナとは何ですか?なぜ重要ですか?
サービスコンテナはクラスの依存関係を管理し、依存性注入を実行します。クラスを自動的に解決し、疎結合とテスタビリティを実現します。
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(): 既存のオブジェクトインスタンスをコンテナにバインド
// 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モジュールで練習できます。
Laravelの面接対策はできていますか?
インタラクティブなシミュレーター、flashcards、技術テストで練習しましょう。
認証と認可パターン
Laravel 13では、既存の方法に加えてPasskey認証が導入されました。面接官はSanctum、Passport、ポリシー、ゲートの知識を期待します。
Q: SanctumとPassportはどのような場合に使い分けますか?
| 機能 | Sanctum | Passport |
|---|---|---|
| ユースケース | SPA、モバイルアプリ、シンプルなAPIトークン | OAuth2サーバー、サードパーティアクセス |
| トークンタイプ | シンプルなAPIトークン、セッションベース | OAuth2アクセストークン、リフレッシュトークン |
| 複雑さ | 最小限のセットアップ | 完全なOAuth2実装 |
| トークンスコープ | アビリティ(よりシンプル) | OAuthスコープ |
Sanctumはほとんどのアプリケーションに適しています。Passportは、アプリケーションがサードパーティクライアント向けのOAuth2プロバイダーとして機能する必要がある場合に必要です。詳細な比較についてはLaravel Sanctum vs Passportを参照してください。
Q: ポリシーとゲートの違いは何ですか?
ゲートはクロージャベースの認可チェックです。ポリシーは特定のモデルの認可ロジックをグループ化するクラスです。
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を使用
// ... 更新ロジック
}認可&ポリシーモジュールでは、高度な認可パターンをカバーしています。
キューとジョブ処理
キューはスケーラブルなLaravelアプリケーションに不可欠です。面接官はジョブ設計、失敗処理、キュードライバーの理解を調べます。
Q: Laravelで失敗したジョブをどのように処理しますか?
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を同梱しています。面接官は機能テスト、ユニットテスト、モック、データベーステスト戦略の理解を評価します。
Q: 外部APIに依存するコントローラーをどのようにテストしますか?
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テストを参照してください。
Laravel 13固有の質問
面接官はLaracon EU 2026で発表されたLaravel 13の機能についてますます質問するようになっています。
Q: Laravel AI SDKとは何ですか?いつ使用しますか?
Laravel AI SDKは、AI操作のための統一APIを提供します:テキスト生成、埋め込み、ツール呼び出しエージェント、オーディオ、画像生成。OpenAI、Anthropic、その他のプロバイダー間の違いを抽象化します。
// アプリケーションコードでの使用
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が導入されました。これは非破壊的変更であり、プロパティベースの設定は引き続き機能します。
// 従来のアプローチ
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認証
- 実装だけでなくトレードオフを説明する練習をする:面接官は暗記よりも推論を重視する
Laravel のバグを見つけられますか
実際のコード、隠れたバグ、1日1回。アカウントなしで試せます。

執筆
Anthony Fillion-MailletSharpSkill 創業者
10 年以上フルスタック開発に携わっています。SharpSkill を運営し、ここで公開される内容に責任を負っています。
2026年9月7日 更新
共有
関連記事

PHP Laravel面接質問 2026年版:Eloquent、キュー、アーキテクチャパターン完全解説
2026年のLaravel技術面接で頻出するEloquent ORM、キュー設計、サービスコンテナに関する質問と回答例を詳しく解説。N+1問題対策からジョブバッチング、DIパターンまで網羅。

Laravel Octane 2026完全ガイド:SwooleとRoadRunnerによるパフォーマンス最適化
Laravel Octaneを使用したハイパフォーマンスPHPアプリケーションの構築方法を解説。SwooleとRoadRunnerの違い、設定方法、ベストプラクティス、面接対策まで網羅的に解説します。

Laravel ソリューション: 高度なパターン、デバッグ、面接対策 2026年版
Laravel の高度なアーキテクチャパターン、デバッグ手法、面接対策を網羅的に解説。サービスクラス、リポジトリパターン、Telescope によるデバッグ、Laravel 開発者向けの頻出面接質問を詳しく説明します。