データベースの用語一覧へ
このページの目次

ORMとは?

読み方:おーあーるえむ

最終更新:2026/08/18

3秒でわかる

データベースの行をプログラムのオブジェクトとして扱う仕組み。SQL を直接書かずに取得や保存ができ、の助けも受けられます。

もう少し詳しく

どういうものか

Object-Relational Mapping の略で、テーブルの 1 行をプログラム側の 1 オブジェクトに対応づけるライブラリのこと。users テーブルの行が User オブジェクトになり、カラムプロパティになる。開発者はメソッドを呼ぶだけでよく、実際に発行される SQL は ORM が組み立てる。

代表的なものに Prisma や TypeORM、Java の Hibernate、Python の SQLAlchemy、Ruby の Active Record がある。どれもテーブル定義とクラス定義を結びつける点は同じで、書き味だけが違う。

なぜ必要か

生の SQL を文字列として書くと、カラム名の打ち間違いが実行するまで分からない。値を文字列連結で埋め込めば SQL インジェクションの穴にもなる。ORM を通すと、カラム名の誤りはコンパイルや型検査の段階で見つかり、値は自動でプレースホルダに渡されるため注入も防げる。

さらに、テーブル定義を変更したときに影響範囲を追いやすい。カラムを消せば、そのプロパティを使っている箇所が一斉にエラーになる。

具体例

Prisma で書いた場合と、同じ処理を生の SQL で書いた場合の対比。

// ORM を使う場合 const users = await prisma.user.findMany({ where: { age: { gte: 20 } }, orderBy: { createdAt: "desc" }, take: 10, include: { posts: true }, // 関連する投稿もまとめて取る }); // 生の SQL で同じことをする場合 // SELECT * FROM users WHERE age >= 20 ORDER BY created_at DESC LIMIT 10 // さらに posts を取るために、もう一度クエリを書いて手で結合する

users と posts のような関連を、include のひと言でたどれるのが ORM の分かりやすい利点になる。

つまずきやすいところ

最大の落とし穴が N+1 問題。一覧を 1 回のクエリで取ったあと、各要素の関連データをループの中で取りにいくと、100 件の一覧で 101 回のクエリが飛ぶ。include や join の指定でまとめて取れば 1 回か 2 回に収まる。

もう 1 つは、ORM を使えば SQL を知らなくてよいという誤解。生成された SQL が遅いとき、原因を突き止めるにはインデックスや実行計画の知識が要る。ORM は SQL を隠すのではなく、書く量を減らす道具になる。

似た用語との違い

名前立ち位置
ORM行をオブジェクトに変換する。SQL はほぼ書かない
クエリビルダSQL の構造をメソッドで組み立てる。SQL の形は見える
ドライバSQL 文字列をそのまま DB に送るだけ

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地ORMDB

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

この用語を扱うコース

コース

DB設計入門 ER図・正規化・インデックス

47レッスン
コース

Node.js入門

55レッスン
コース

Spring Boot入門

48レッスン
SQL・データベースコースの全編を見る