45
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ORMの概念理解

Last updated at Posted at 2023-08-31

目次

  1. ORMとは
  2. NO ORM vs ORM
  3. ORMの利点と欠点

ORMとは?

オブジェクト関係マッピング(ORM、Object-Relational Mapping)は、オブジェクト指向プログラミングと関係データベースの互換性を向上させるために設計されたプログラミング技術です。ORMの基本的な構造は、プログラミング言語のクラスとデータベースのテーブルをマッピングすることから始めます。これにより、エンジニアは直接SQLクエリの作成することなく、ORMを通じてデータベースと相互作用できます。

NO ORM vs ORM

実際、どういう意味なのかは具体的な例を見れば分かりやすいと思います。 まず、簡単な2つの例を見ながら違いを感じてみてください。

ORMを使わない例 - 直接データベース操作
users = Array.new
sql = "SELECT * FROM users"
rows = some_sql_module.query(sql); # `some_sql_module`は簡略化された例
rows.each do |row|
    user = User.new;
    user.id = row[:id] # シンボルがカラム名として使用されると仮定
    user.name = row[:name]
    user.email = row[:email]
    users << user
end

このコードは、Rubyでデータベースからユーザーのリストを取得する例です。
sql 変数にはSQLクエリが格納されており、some_sql_module.query(sql) を使ってデータベースからデータを取得します。取得された各行は、新しい User オブジェクトにマッピングされ、そのオブジェクトの各属性(idnameemail)がデータベースのカラムに対応します。最後に、ユーザーのオブジェクトを users 配列に追加します。このコードは、ORMなしでデータベース操作を行う典型的な例です。

上記のコードをRailsのORM、ActiveRecordを使用すると、同じ操作が極めて簡単になります。クエリの全てが抽象化され、以下の1行で実行できます。次の例を見てください。

ORMを使う例 - RailsのActiveRecord
users = User.all

この1行のコードは、上記のRubyコードで行っていた操作と同じですが、RailsのActiveRecordを使用しています。ここでは、User.all メソッドを呼び出すだけで、データベースから全てのユーザーを取得し、Userオブジェクトの配列として users 変数に格納します。

上記の2つの例を絵で構造化して表現してみましょう。

Screen Shot 2023-08-25 at 20.18.55.png

このシンプルな例からも、ORMを使うことで、データベースとの対話がどれだけ簡単かがわかります。コードの可読性が上がり、保守も容易になります。しかし、ORMはあくまで抽象化のレイヤーなので、特別なケースや最適化が必要な場合は、直接SQLを書く必要があることもあります。

ORMの利点と欠点

今までORMが何なのか具体的に見てきました。 それではここでORMの利点と欠点を簡単に整理します。

利点

  • コードの再利用性: モデルクラスを通じたデータ定義により、コードの再利用と保守が容易になります。
  • 開発効率の向上: 自動化されたクエリ生成により、開発時間の短縮とデータベース操作の簡素化が可能です。
  • データベース独立性: 抽象化されたレイヤーを提供することで、異なるデータベースへの移行が容易になります。
  • オブジェクト指向的なアプローチ: オブジェクト指向プログラミングの特性をそのまま活用できます。

欠点

  • 学習曲線: 特定のORMライブラリの使用法と動作方式を学ぶ必要があります。
  • 複雑なクエリの問題: 非常に複雑なクエリを扱う場合、直接SQLを使用する必要があります。
  • パフォーマンス問題: ORMの内部動作やクエリの最適化失敗などからパフォーマンスの問題が発生することがあります。

まとめ

ORMは開発の効率を向上させ、コードの再利用性を高める重要なツールですが、全てのプロジェクトに適合するわけではありません。その特性と制約を正確に理解し、プロジェクトのニーズと合致するかを慎重に評価することが重要です。この記事が少しでもORMの概念を理解するのに役立つことを願っています。

参考文献

45
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?