📖

RailsとORM機能、ActiveRecordについて

2023/05/21に公開3

ORM(Object-Relational Mapping)機能とは

ORM(Object-Relational Mapping)は、
データベースとオブジェクト指向プログラミング言語の間のデータの変換や関連付けを
自動化するための機能

ORMは、データベースのテーブルやレコードをオブジェクトとして表現し、
プログラミング言語のオブジェクトとデータベースの間で直接的な相互作用を可能にする。

■ ORMの主な機能

ORMは、DBとオブジェクト指向プログラミングの間のインターフェースとして機能し、
開発者にとってデータベース操作の煩雑さを軽減する。

ORMを使用することことで、データベースとの相互作用が簡素化され、
効率的な開発や保守が可能になる。

いかに主な機能について記述する。

1. オブジェクトとテーブルのマッピング:
ORMは、DB内のテーブルやカラムとプログラミング言語のオブジェクトとの間で
マッピングを行う。
(※マッピング: 異なるデータモデルやデータ構造間の対応関係を定義すること。)
これにより、オブジェクト指向プログラミングのコードを使用してデータベースにアクセスし、
データの読み書きが容易になる。

2. 自動クエリ生成:
ORMは、オブジェクト指向プログラミングのコードを使用してデータベースクエリを生成する。
開発者はSQLクエリを直接記述する必要がなくなり、簡潔で直感的なコードでDB操作が可能になる。

用語:クエリ、データベースクエリ
  • クエリ(Query)
    一般的には情報を取得するための質問や要求のこと。
    クエリは、SQL(Structured Query Language)などの特定のクエリ言語を使用して記述されます。
  • データベースクエリ(Database Query)
    DBからデータを取得したり、データを変更したりするために使用される要求や命令のこと。

3. リレーションシップの管理:
ORMは、オブジェクト間のリレーションシップ(関連)を自動的に管理する。
オブジェクトの関連性や依存関係を設定することで、関連するデータを
取得したり更新したりすることが容易になります。

4. データベースアクセスの抽象化:
ORMは、DBの特定の実装の詳細を隠蔽し、DBへのアクセスを抽象化します。
これにより、異なるデータベースシステムへの移植性が向上し、コードの再利用性が高まります。

5. データのバリデーションとバージョン管理:
ORMは、データのバリデーションルールを定義し、データの整合性を保証する。
また、データのバージョン管理をサポートして、データの変更履歴を追跡したり、
競合を解決したりする機能も提供する。

O/Rマッピング(Object-Relational Mapping)とは

O/Rマッピング(Object-Relational Mapping)は、
オブジェクト指向プログラミング言語とリレーショナルデータベースの間で
データのマッピングを行うプロセスやパターンのことを指す。
O/Rマッピングは、データベースのテーブルやカラムとオブジェクトやクラスの間の関連付けを定義し、
オブジェクト指向のコードでデータベースの操作を行うための手法や原則を提供する。

O/Rマッパー(Object-Relational Mapper)とは

ORMを実現する具体的なツールやフレームワークのことを指す。
O/Rマッパーは、ORMの原則やアプローチを具体的な実装として提供し、
データベースとオブジェクト指向のコードとの間でのマッピングやデータ操作を自動化する。
O/Rマッパーは、テーブルとオブジェクトの間の関連付けやクエリ生成、データの永続化、
リレーションシップの管理などの機能を提供する。

O/Rマッパー プラットフォーム
Hibernate Java
Entity Framework .NET
Django ORM Python
Sequelize JavaScript/Node.js
Ruby on Rails ActiveRecord Ruby on Rails
SQLAlchemy Python

ActiveRecordとは

Active Recordは
RubyonRailsフレームワークの一部として提供されるO/Rマッパー

簡単に言えば、モデルとDBの間のSQL翻訳機! とも言えるし、
モデルとDBの間の仲介役であり、オブジェクト指向プログラミングのアプローチを
データベース操作に適用するためのツール
とも言える!!!

Active Recordはこのモデルとデータベースの間で、
モデルの操作やクエリをデータベースに対応するSQL文に変換して実行するものだ。

Active RecordとMVCパラダイムの親和性について

MVCについて

MVCアーキテクチャは、
アプリケーションを3つの役割に分割し、
それぞれの役割に対応するコンポーネントを定義するもの

それぞれの役割に分離し、各コンポーネントが疎結合になることで、
変更や拡張に柔軟に対応できるため、保守性と拡張性に優れている。

MVCは、アプリケーションを
モデル、ビュー、コントローラの3つの役割に分けて設計するパターン。
モデルはデータの管理やビジネスロジックを担当し、ビューはデータの表示やユーザーインターフェースを担当し、コントローラはユーザーアクションの受け付けや処理の制御を担当する。

Active Recordは、MVCのモデル層に相当する。
Active Recordは
DBとのインタラクションを担当し、データの永続化や操作をモデルクラスを通じて行う。

Active Recordは、データベーステーブルと対応するモデルクラスを定義し、
データベースの操作をオブジェクト指向的なインターフェースで行うことができる。

MVCとActive Recordの組み合わせにより、DB操作とビジネスロジックの分離が実現される
モデルはデータベースのテーブルと密接に関連付けられており、
DBへのアクセスやクエリの作成などの処理はActive Recordに委譲される。
ビューとコントローラはモデルのインターフェースを通じてデータにアクセスし、
必要な情報を取得して表示や操作を行う。

Active Recordの親和性の高さは、
データベースの操作をオブジェクト指向的な方法で行えるため、
モデルの設計やデータの管理が簡単になるという点にある。
また、MVCの設計原則に基づいて、アプリケーションの各層を疎結合に保つことができる。

したがって、Active RecordとMVCは、
DBとモデルの間のマッピングとデータの管理を効果的に行うために組み合わせられることが多く、
お互いに親和性がある。


https://railsguides.jp/active_record_basics.html#active-recordについて

Discussion

がんもがんも

ORMについての記事を書こうと思って検索していたらこの記事がでてきました!
さすがと思わず声がでました笑
勉強になりました♪

AirichanAirichan

あら、嬉しい。笑
これ受講中の3月4月当初は理解に苦しみました...笑
がんもさんの記事見たら、すごいわかりやすいですし
理解してそうで素晴らしいです...!!! ♡

(関係ないけど、DMM生にだいぶZENNアウトプットの習慣が広まってきてますね🌟素敵)

がんもがんも

浅い視点でしか書かなかったので、、、笑
この記事はO/Rマッパーとか深く掘り下げて書いてくれていて、他のプラットフォームも載っているしほんと参考になりました!

(関係ないけど、DMM生にだいぶZENNアウトプットの習慣が広まってきてますね🌟素敵)

これ話したかったです!Qiitaを書いている人もいるようですし、増えてきているのがとても嬉しい♪