プロになるためのWeb技術入門を読みました O/Rマッピングフレームワークの目的

 先月、基本情報技術者試験をうけました。(受かってるといいな) 

午後の問題は現代文の試験かな?というのもありましたが、CPU、メモリ、仮想メモリページングとかアルゴリズム秘密鍵、公開鍵、プロトコルあたりは基礎体力をつけるのにいい内容が範囲に含まれていたかなと思っています。

その流れでWebサービスの技術のあやふやが多いな〜と感じたのでこちらの本を読みました。

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

 

HTTPやCookie、Sessionといった基本的なことについても丁寧に書かれていたのですが特に関心を持ったのは、O/Rマッピングフレームワークについての部分です。

日々O/RマッピングフレームワークとしてActive Recordを利用しているくせに、そもそもなんでO/Rマッピングフレームワークってあるの?というのはあやふやでした…

O/Rマッピングフレームワークの目的

本書ではRDBオブジェクト指向での表現をイメージで示したあとに

このようなリレーショナル・データベース上の表現と、オブジェクト指向言語におけるオブジェクトによる表現の違いを「インピーダンス・ミスマッチ」と呼んでいます。 

(中略)

このインピーダンス・ミスマッチを解決することが、「O/Rマッピングフレームワーク」の最大の役割になります。

として、RDBオブジェクト指向設計の構造上のミスマッチを解決するためにO/Rマッピングフレームワークを使っていると書かれています。 

オブジェクト指向での構造の表現は基本的に階層構造です。 オブジェクトは主従関係を持っています。対して、RDBの表現はというと、ちょっと自分ではうまく言語化できなかったので、こちらの記事から引用します。

インピーダンスミスマッチについて本気出して考えてみた - 酔いどれ設計ナイト2019 - Qiita

  • リレーショナルモデルは言うなれば項中心の世界で、その項が何者であるかはその定義域(ドメイン、データ型)によってのみ決まり、項の間に優劣や主従はない。
    • 項の間の関係はリレーショナル演算によって見出され、逆に言うとそれによってのみ項間の関係は決まる。

外部キー制約とかありますが、確かにRDBの表それ自体には明確な主従性はないですね。 

この表現のミスマッチを防ぐために登場したのがO/Rマッピングフレームワークということです。データベースとオブジェクトの対応を定義して、本来オブジェクト指向での表現で扱いづらいRDBのデータをオブジェクト指向に落とし込んでくれているんですね。

そもそもこの2つの表現の差異について考えたこともなかったので、自分はRDBに階層的なイメージを持っていたと思います。O/Rマッピングフレームワークを通してしかRDBのことをみていなかったとも言えますね…

Active RecordはO/Rマッピングフレームワークとしてなにが優れているのか

本書とは直接関係ないですが、Railsエンジニアが常に意識しているActive Recordというフレームワークは何が優れているのでしょう。

「プロになるためのWeb技術入門」ではO/RマッピングフレームワークとしてiBATISというフレームワークが紹介されています。SQLマップファイルというDBのデータとオブジェクトの対応と実際に発行するSQLを書いています。SQLを明示的に書くことで細かい注文にも対応できるよう設計されています。  

それに対してActive Recordは命名ルールやスキーマのルールに従う必要がありますが、設定用コードは最小限ですみます。レールにのっていればSQLをそれほど意識しなくてもO/Rマッピングフレームワークの恩恵に預かれるということなんですね。

まさに設定より規約を重視した設計でRailsらしいと言えます。*1もちろんこれに甘えずSQLおよびRDBの知識は絶対に必要だとは思いますが。

 

最後に

今回のブログではO/Rマッピングフレームワークについての部分だけ取り上げましたが「プロになるためのWeb技術入門」は様々なWebアプリケーション開発の技術が”なぜ”あるのかを丁寧に説明してくれる本でした。Webアプリケーションの歴史やHTTPからアプリケーションのアーキテクチャ、セキュリティにまで幅広く一冊で言及している本はなかなかないのではないでしょうか。根本の仕組みと考え方が大事ですね。なんでもそうですけど。