Eloquent を使わず Query Builder や生SQLを選ぶのが妥当なのはどれですか。
大量件数のバッチ処理と、複雑な集計クエリです。前者はモデルを1件ずつ生成するコストが効き、後者はウィンドウ関数などを素直に書けません。使い分けの理由を言えるかが見られます。
面接官が見ているのはORM を万能だと思っていないか。
よくある答えと、面談でどう見られるか
- 大量件数のバッチ処理や、ウィンドウ関数を使うような複雑な集計
その通りです。前者はモデル生成コスト、後者は表現力が理由です。 - 単純な1件取得
そこは Eloquent が最も得意な領域です。 - リレーションをたどる処理
リレーションこそ Eloquent の利点です。生SQLにすると保守が重くなります。 - とにかく速度が要るところはすべて生SQLにすべき
速い場面はありますが、保守性を捨てる判断でもあります。「どこが遅いか」を測ってから決めます。
面接官は何を見ているか
- 使わない場面(大量データ / 複雑な集計)を挙げた
- Query Builder や生SQLという選択肢を持っていた
- 判断基準を言語化できた
模範解答
大量件数のバッチ処理と、複雑な集計クエリでは外します。前者は Eloquent がモデルを1件ずつインスタンス化するコストが効いてくるため、Query Builder や toBase() で配列のまま扱います。後者はウィンドウ関数などを使う場合、Eloquent で表現するより生SQLの方が読みやすく速いことが多いです。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
10万件を処理するとき、Eloquent の何がコストになりますか。一部しか触れられなかった場合
生SQLを書くとき、気をつけることは何ですか。