なぜORMを使うの?
SQLを直接書くと文字列結合でSQLインジェクションのリスクがあるし、DB固有のSQL方言に依存してしまう。ORMならUser.findById(1)のようにプログラミング言語のメソッドでDB操作できて安全。型チェックも効くからタイポも防げるよ
ORMのデメリットは?
①N+1問題(関連データ取得で大量のクエリが発行される)、②複雑なクエリが書きにくい、③生成されるSQLが非効率なことがある、④ORMの抽象化に隠れてSQLの理解が浅くなる。特にN+1問題は知らないとパフォーマンスが数十〜数百倍悪化するから要注意だよ
N+1問題って何?
ユーザー一覧と各ユーザーの投稿を取得する場合、①ユーザー一覧取得で1クエリ、②各ユーザーの投稿取得でN回クエリ、合計N+1クエリ。ユーザー100人なら101クエリ。Eager Loading(JOINやINCLUDE)を使えば1〜2クエリで済む。ORMを使うなら必ずSQLログを確認する習慣をつけようね
ORMなしで開発する選択肢は?
クエリビルダー(Knex.js、Kysely)はSQLの構造を活かしつつ型安全に書ける中間的な選択肢。SQLをそのまま書くならsqlcやPrismaのtypedSQLで型安全なSQLが可能。「ORMは不要悪」という過激な意見もあるけど、CRUDが中心のアプリならORMの生産性は高いよ