【プログラミング学習】 ORMの真のメリット

こんばんは!
昨日の記事がプログラミング学習とは全く関係の無い内容だったので、今日はプログラミング学習らしい記事を書こうと思います。

非常にピンポイントなのですが、ORMについて解説をします。

ORMとは何か

ORMという言葉は聞いたことがあるでしょうか?
ORマッパーと言ったりもします。

ORMは「Object-Rerational Mapping」の略で、アプリケーションのModelとデータベースのテーブルをマッピングする機能のことを言います。

WebアプリケーションフレームワークのLaravelでしたら、EloquentというORMが標準で提供されいます。
また、Node.jsであれば、Sequelizeが良く使われるORMです。

マッピングするとは

「アプリケーションのModelとデータベースのテーブルをマッピングする」とはどういうことでしょうか?

少し詳しく説明をしていきます。

データベースに対して操作をするには、SQL文を書く必要があります。
データ取得であればSELECT文、データ登録であればINSERT文を書かなくてはなりません。

ただ、SQL文を書くのって結構大変で、ミスも多くなってしまいます。
アプリケーションのコードの中にSQL文が書かれていれば、コードの可読性も悪くなってしまいます。

そこで登場するのが、ORMの機能です。
ORMを使えば、アプリケーションのModelとデータベースのテーブルのマッピングさえしてあげれば、SQL文を書かなくてもデータベースの操作ができるようになるのです。

SQL文はORMが勝手に作成して実行してくれます。

具体例で見ていく

Laravelのコードで具体的に見ていきましょう。
Laravelを書いたことが無い人でもわかるように書くので安心して下さい。

データベースにUsersテーブルがあって、Usersテーブルからidが1のデータを取得する実装がしたいとします。

SQLを書くと以下の通りです。

SELECT * FROM users WHERE id = 1;

あまり、このコードをソースコードの中に入れたくないですね。
今回のSQLはシンプルなのでまだ良いですが、複雑なSQLになればなるほど書きたくなくなります。

これをORM(LaravelのEloquent)を使って書くとどうなるかというと、以下の通りになります。

$user = App\User::find(1);

どうでしょうか?
シンプルで直感的ではないでしょうか?
SQLが登場していなくて、PHPのコードだけで完結できているのも良い点です。
(別途、モデル定義のコードは必要になります)

ORMの本質的なメリット

ORMを使うことでSQLを書かなくて良くなるというのが大きなメリットなのですが、本質的なメリットは少し違うところにあります。

本質的なメリットは、アプリケーションがデータベースを意識しなくて良くなるという点なのです。

アプリケーションとデータベースが疎結合になると言ったりします。

簡単に言うと、データベースが何であろうとアプリケーション側の実装に影響が無い、と言うことです。

データベースが変われば、SQL文の書き方が変わります。
なので、SQL文が直接ソースコードに書かれていた場合、仮にデータベースが変わると、SQL文についても全て見直しをしなくてはならなくなります。

例えば、データベースをMySQLからSQLServerに変更する、といった場合ですね。

全てのSQL文の見直しなんて、絶対にやりたくありません…。

もしもORMを使っていれば、データベースが変更になっても、ソースコードの修正は必要ありません。

接続先のデータベースに応じて、ORMが自動でSQL文を作成してくれるためです。
データベースが変われば、生成するSQL文も勝手に変えてくれるのです。

データベースの変更がアプリケーションに影響を与えない状態なので、アプリケーションとデータベースが疎結合になっていると表現します。

システムの設計において、一方の変更が他方に影響を与えない疎結合の状態は良い設計と言えます。

アプリケーションとデータベースを疎結合にできることが、ORMの本質的なメリットになるのです。


今日はシステムの設計に踏み込んだ、少し難しい話しになってしまいました。
いかがでしたでしょうか?
もしわからない点などあれば、お気軽にコメント欄で質問頂けたらと思います!

では、また明日!

サポートは、プログラミング初学者の皆さんのためになることに使おうと思います。どのように使ったかも記事にします!