ORMとは?コードとDBをつなぐ仕組みをわかりやすく解説

まずは、これだけ

ORMは、アプリのコードとDBの表をつなぐ翻訳役。
SQLを毎回そのまま書かなくても、コード上のオブジェクトやメソッドを通してDBを扱いやすくする仕組みです。

コードとDBの間にORMが入り、データのやり取りを翻訳する様子
コード側:オブジェクトとして扱う DB側:表や行として保存する

ORMの役割

ORMは「Object Relational Mapping」の略です。ざっくり言うと、プログラムの中で扱うオブジェクトと、リレーショナルDBの表を対応させる仕組みです。

たとえばコードでは UserPost のような単位で扱い、DBでは users テーブルや posts テーブルの行として保存します。ORMは、その間の変換を助けます。

コードに近い形

データを User のようなまとまりとして扱える。

DBの表へつなぐ

オブジェクトとテーブル、プロパティと列を対応させる。

SQLを組み立てる

内部ではSQLを作り、DBへ問い合わせることが多い。

コードと表の橋渡し

Webアプリのコードでは、ユーザーや投稿を「ひとつのデータのかたまり」として扱いたくなります。一方、リレーショナルDBでは、データは表の行と列で保存されます。

ORMを使うと、コード側の扱いやすい形と、DB側の保存しやすい形を行き来しやすくなります。画面やAPIを作るときに、DBの細かい書き方だけへ意識を取られにくくなるのが利点です。

ORMがUserやPostのようなコード上のデータとDBの表を対応させる図
ORMは、コード上のまとまりとDBの表を対応させ、保存や取得の処理を書きやすくします。

SQLとの関係

ORMを使っても、DBとのやり取りが消えるわけではありません。多くの場合、ORMが内部でSQLを組み立て、DBへ送っています。

そのため、ORMはSQLの代わりというより、SQLを直接書く量を減らし、アプリのコードからDBを扱いやすくする道具と考えると自然です。

SQLを直接書く方法とORMを使ってDBへ問い合わせる方法の比較
SQLはDBへ細かく指示しやすく、ORMはアプリのコードに近い形でDB操作を書きやすくします。
SQLを直接書く

細かい条件や性能を意識して、DBへの指示を自分で書く。

ORMを使う

コード上のメソッドやモデルを通して、DB操作を書きやすくする。

どちらも必要

ORMを使う場合でも、SQLとDBの考え方を知っていると詰まりにくい。

よく出てくるORM

JavaScriptやTypeScriptの開発では、PrismaやDrizzleのようなORMを見かけることがあります。ほかの言語にも、RailsのActive Record、PythonのSQLAlchemy、PHPのEloquentなどがあります。

ORMによって書き味や得意なことは違いますが、共通しているのは「コードとDBの間を扱いやすくする」という役割です。まずは名前を覚えるより、何を楽にしているのかを押さえると理解しやすいです。

Prisma

TypeScript開発でよく使われるORM。型と組み合わせて扱いやすい。

Drizzle

SQLに近い感覚を残しながら、型安全に書きやすいORM。

Active Recordなど

言語やフレームワークごとに、似た役割のORMが用意されている。

ここまでのまとめ

ORMは、アプリのコードとリレーショナルDBの表をつなぐ翻訳役です。コードに近い形でデータを扱いやすくし、内部ではSQLを組み立ててDBへ問い合わせます。

ORMはDB操作を楽にしてくれる道具ですが、裏側にSQLとDBの表があることを知っておくと、エラーや性能の問題にも向き合いやすくなります。