IT-Q

Eloquent を使わず Query Builder や生SQLを選ぶのが妥当なのはどれですか。

大量件数のバッチ処理と、複雑な集計クエリです。前者はモデルを1件ずつ生成するコストが効き、後者はウィンドウ関数などを素直に書けません。使い分けの理由を言えるかが見られます。

面接官が見ているのはORM を万能だと思っていないか。

よくある答えと、面談でどう見られるか

  • 大量件数のバッチ処理や、ウィンドウ関数を使うような複雑な集計
    その通りです。前者はモデル生成コスト、後者は表現力が理由です。
  • 単純な1件取得
    そこは Eloquent が最も得意な領域です。
  • リレーションをたどる処理
    リレーションこそ Eloquent の利点です。生SQLにすると保守が重くなります。
  • とにかく速度が要るところはすべて生SQLにすべき
    速い場面はありますが、保守性を捨てる判断でもあります。「どこが遅いか」を測ってから決めます。

面接官は何を見ているか

  • 使わない場面(大量データ / 複雑な集計)を挙げた
  • Query Builder や生SQLという選択肢を持っていた
  • 判断基準を言語化できた

模範解答

大量件数のバッチ処理と、複雑な集計クエリでは外します。前者は Eloquent がモデルを1件ずつインスタンス化するコストが効いてくるため、Query Builder や toBase() で配列のまま扱います。後者はウィンドウ関数などを使う場合、Eloquent で表現するより生SQLの方が読みやすく速いことが多いです。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。