L初めてのLaravel

Laravel 実務Q&A 一覧表

要点だけサッと復習できる、Q&Aチートシート

実務でよく問われる Laravel の質問を、「質問」「回答のポイント」「自分の言葉での一言」の3列で 29 項目、一覧表にまとめました。 じっくり深掘りしたいときは想定Q&A集へ。ここは要点をサッと見返す復習シートとして使ってください。

📝 この表の見方

  • 回答のポイント… 押さえるべきキーフレーズ・要点。丸暗記ではなく理解の軸に。
  • 自分の言葉での一言… そのまま口に出せる言い換え例。自分の言葉に直すとより自然です。

基礎7 問

MVC・ルーティング・Blade など、まず押さえる土台

Q. MVCとは何ですか?

回答のポイント

アプリを Model(データ)・View(画面)・Controller(仲介)の3つの役割に分ける設計。責務を分離して保守性を上げる考え方。

自分の言葉での一言

「Modelがデータ、Viewが表示、Controllerがその仲介で、役割を分けて保守しやすくする設計だと理解しています。」

Q. ルーティングの役割は?

回答のポイント

「どのURLに来たら、どの処理を呼ぶか」の対応づけ。routes/web.php や routes/api.php に定義する。

自分の言葉での一言

「URLとコントローラの処理を結びつける入口で、web.php や api.php に書きます。」

Q. コントローラの責務は?

回答のポイント

リクエストを受け取り、必要な処理へ振り分け、レスポンスを返す交通整理役。業務ロジックは書きすぎず薄く保つ。

自分の言葉での一言

「処理の振り分け役に徹して、ロジックはサービス層に切り出し薄く保つよう意識しています。」

Q. Bladeテンプレートとは?

回答のポイント

Laravel標準のテンプレートエンジン。{{ }} での出力や @if / @foreach、レイアウト継承・コンポーネントが使える。

自分の言葉での一言

「HTMLにデータを埋め込むテンプレートで、継承やコンポーネントで画面を再利用できます。」

Q. マイグレーションとは?

回答のポイント

テーブルの作成・変更を PHP コードで記録・実行する仕組み。バージョン管理でき、チームで同じDB構造を再現できる。

自分の言葉での一言

「DB構造の変更履歴をコードで管理する仕組みで、誰でも同じテーブルを再現できます。」

Q. Artisanコマンドとは?

回答のポイント

Laravel付属のCLIツール。make:controller などの雛形生成、migrate、tinker、キュー実行などを行う。

自分の言葉での一言

「php artisan で雛形生成やマイグレーションなど定型作業を素早く行えるコマンド群です。」

Q. ルートモデルバインディングとは?

回答のポイント

ルートのパラメータから自動でモデルを解決して注入する仕組み。show(User $user) のように受け取れる。

自分の言葉での一言

「URLのIDから対応するモデルを自動で取ってきて渡してくれる仕組みで、find を書かずに済みます。」

Eloquent・DB8 問

ORM・リレーション・N+1 など、データ操作まわり

Q. Eloquent ORMとは?

回答のポイント

テーブルをモデルクラスとして扱う仕組み。SQLをほぼ書かずに User::find(1) のような直感的な操作ができる。

自分の言葉での一言

「テーブルをモデルとして操作できるORMで、SQLを書かずに直感的にデータを扱えます。」

Q. リレーションの種類は?

回答のポイント

hasOne / hasMany / belongsTo / belongsToMany など。モデルにメソッドとして定義し、関連データをたどれる。

自分の言葉での一言

「1対多なら hasMany と belongsTo、多対多は belongsToMany で表現し、関連データを簡単にたどれます。」

Q. N+1問題とは? 対策は?

回答のポイント

一覧取得後に関連を1件ずつ取り、クエリが大量発行される問題。with() の Eager Loading でまとめて取得して解決する。

自分の言葉での一言

「ループ内で関連を都度取ってクエリが増える問題で、with()のEager Loadingで一括取得して防ぎます。」

Q. Eager Loading と Lazy Loading の違いは?

回答のポイント

Eagerは with() で関連を先読み。Lazyはアクセス時に都度取得。一覧+関連表示では Eager が基本。

自分の言葉での一言

「先にまとめて読むのがEager、必要時に都度読むのがLazyで、一覧表示ではEagerを選びます。」

Q. Eloquent とクエリビルダの違いは?

回答のポイント

Eloquentはモデル単位でオブジェクトを返し可読性が高い。クエリビルダは DB::table() でSQL寄り・軽量。大量集計等で使い分ける。

自分の言葉での一言

「可読性重視ならEloquent、大量データや複雑な集計では軽いクエリビルダ、と用途で使い分けます。」

Q. マイグレーションとシーダーの違いは?

回答のポイント

マイグレーションは「テーブルの構造」を作る。シーダーは「中身のデータ(初期・テスト用)」を入れる。役割が別。

自分の言葉での一言

「構造を作るのがマイグレーション、初期データを入れるのがシーダーと役割が分かれています。」

Q. マスアサインメントとは? 対策は?

回答のポイント

リクエスト値を一括代入する機能。意図しない列の書き換えを防ぐため $fillable / $guarded で許可列を制限する。

自分の言葉での一言

「一括代入で余計な列を書き換えられないよう、$fillableで許可する列を明示します。」

Q. ソフトデリートとは?

回答のポイント

物理削除せず deleted_at に日時を入れて論理削除する仕組み。SoftDeletes トレイトで有効化。復元も可能。

自分の言葉での一言

「実際には消さず deleted_at で削除扱いにする仕組みで、あとから復元もできます。」

設計・仕組み7 問

サービスコンテナ・DI・ライフサイクルなど、仕組みの理解

Q. サービスコンテナとは?

回答のポイント

クラスの依存を自動で解決・生成して渡してくれる箱。LaravelのDIの中核で、bind/singleton で登録する。

自分の言葉での一言

「必要な部品(依存)を自動で組み立てて渡してくれる仕組みで、LaravelのDIの中核です。」

Q. 依存性注入(DI)とは?

回答のポイント

依存オブジェクトを自分でnewせず外から受け取る設計。疎結合になり、テスト時にモックへ差し替えやすい。

自分の言葉での一言

「依存を外から渡す設計で、結合を弱くしてテストや差し替えをしやすくします。」

Q. ファサードとは?

回答のポイント

Route:: や Cache:: のように、静的呼び出しの見た目でコンテナ内の実体へアクセスする窓口。実体は解決可能でテストしやすい。

自分の言葉での一言

「コンテナ内のクラスへ静的メソッド風にアクセスできる入口で、短く書けてテストも可能です。」

Q. サービスプロバイダとは?

回答のポイント

アプリ起動時にコンテナへの登録(register)や初期化(boot)を行う場所。各機能はここで組み立てられる。

自分の言葉での一言

「起動時に何をコンテナへ登録するかをまとめる場所で、register と boot の2段階で設定します。」

Q. ミドルウェアとは?

回答のポイント

リクエストがコントローラに届く前後に挟む処理。認証チェック・CSRF・ログなど横断的な関心事をまとめて扱う。

自分の言葉での一言

「処理の前後に挟む関所で、ログイン確認やCSRFなど共通処理をまとめて行います。」

Q. リクエストのライフサイクルは?

回答のポイント

public/index.php → カーネル起動 → ミドルウェア → ルーティング → コントローラ → レスポンス、の流れ。

自分の言葉での一言

「index.phpが入口で、カーネルとミドルウェアを通りルーティングからコントローラへ渡り、レスポンスを返します。」

Q. サービスプロバイダの register と boot の違いは?

回答のポイント

registerはバインド登録だけを行う(他サービス未確定)。bootは全登録後に呼ばれ、実際の初期化処理を書く。

自分の言葉での一言

「registerで登録だけ行い、全部揃った後のbootで初期化する、と順序を分けて理解しています。」

実務7 問

バリデーション・認証・テストなど、現場で使う知識

Q. バリデーションはどう書きますか?

回答のポイント

$request->validate() か FormRequest クラスに rules() を定義。ルールが複雑ならFormRequestで分離するのが定石。

自分の言葉での一言

「軽ければvalidate()、複雑ならFormRequestにrules()を切り出してコントローラを薄く保ちます。」

Q. 認証(auth)はどう実装しますか?

回答のポイント

Breeze / Fortify / Sanctum などのスターターを利用。auth ミドルウェアでルート保護、Auth::user() で取得。

自分の言葉での一言

「BreezeやSanctumを使い、authミドルウェアでルートを保護し、Auth::user()でログイン中のユーザーを扱います。」

Q. CSRF対策はどうしていますか?

回答のポイント

Laravelはトークンで自動対策。Bladeの @csrf でフォームにトークンを埋め込み、ミドルウェアが検証する。

自分の言葉での一言

「フォームに@csrfでトークンを入れ、ミドルウェアが照合するのでCSRFを自動で防げます。」

Q. 環境変数(.env)の役割は?

回答のポイント

DB接続・APIキーなど環境ごとに変わる値・秘密情報を置く。コードに直書きせず config 経由で参照。Gitには含めない。

自分の言葉での一言

「接続情報や秘密の値を環境ごとに.envに分け、config経由で読むことでコードに直書きしません。」

Q. キャッシュとキューの使いどころは?

回答のポイント

キャッシュは重い処理・結果を一時保存して高速化。キューはメール送信等の重い処理を非同期で後回しにする。

自分の言葉での一言

「重い結果はキャッシュで速く、時間のかかる処理はキューで非同期にしてレスポンスを軽くします。」

Q. テスト(PHPUnit)はどう書きますか?

回答のポイント

Feature/Unit に分け、artisan test で実行。RefreshDatabase でDBを毎回初期化し、$this->get() 等で振る舞いを検証。

自分の言葉での一言

「FeatureとUnitに分け、RefreshDatabaseで初期化しつつ、リクエストの振る舞いを検証しています。」

Q. 例外処理・エラー表示はどう扱いますか?

回答のポイント

App\Exceptions\Handler で集中管理。abort() や独自例外を投げ、環境で表示を切替(本番は詳細を隠す)。

自分の言葉での一言

「例外はHandlerで一元的に扱い、本番では詳細を隠して安全なエラー画面を返すようにします。」

用語の意味をもっと詳しく知りたいときは実務用語集、全体像は全体マップでも確認できます。