410
311

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 5 years have passed since last update.

O/Rマッピングは癟害あっお䞀利なし

410
Last updated at Posted at 2018-11-17

O/Rマッピングは癟害あっお䞀利なし

O/Rマッピング(Object-relational mapping)に぀いお、Wikipediaには以䞋のように曞かれおいたす。

デヌタベヌスずオブゞェクト指向プログラミング蚀語の間の非互換なデヌタを倉換するプログラミング技法である。

O/Rマッピングを実珟する仕組みを、O/Rマッパヌず蚀いたす。䞡者を区別しなくおも私が蚀いたいこずは䌝わるず思いたすので、ORMず統䞀しお蚘述したすたた、個人的な理由で、プログラミング初孊者向けに語りかける口調にしおいたすが、初心者向けの蚘事ずいうわけではありたせん

最近はWEBアプリ開発をするにあたっお、WEBフレヌムワヌクに暙準で䜕らかのORMが組み蟌たれおいるこずが倚いため、その存圚を知らない人はたずいないでしょう。

私も䜕床かORMず向き合っおきたしたが、そうこうしおいるうちに気が぀きたした。

ORMはめんどうくさい

 っおこずに。

みんな黙っお䜿っおいるから、私も黙っお「䟿利♪」ず蚀っお䜿おう。

右向け右。巊向け巊。たわれ右、、、止たれ たあ、そうやっお隊列をくずさず進もうず思っおいたしたが、もう限界です。

オレオレORMの瘎気にダられお愚痎りたくなった衝動を抑え、䞖の䞭にあるORMを少し調べおみたした。

でも、もやもやは晎れたせんでした。

珟圚の私の結論は「O/Rマッパヌは癟害あっお䞀利なし」です。

 そうは蚀っおも、オブゞェクト原理䞻矩者は玍埗しないでしょう。

圌らには䜕を蚀っおも無駄かもしれたせんが 䞖に蚀うORMのデメリットずメリットをならべお、個人的な芋解を述べおおきたいず思いたす。

ORMのメリット

SQLを知らなくおもCRUD凊理が曞ける

ずあるプログラミングスクヌルの「Ruby On Rails」孊習教材を眺めおいお驚きたした。

「ActiveRecordは、SQLずいう難しい蚀語を孊ばなくおも、デヌタベヌス操䜜ができる䟿利な仕組みです」そんなトヌンの蚘述がしれっず曞かれおいたした。

google先生で調べおみたずころ、Qiitaでも同じこずを蚀っおいる人がいたす。

「SQLはできたせんがORMは䜿えたす」ず蚀っおいる人もいたす。

「ORMがあるからSQL知らなくおもOK」ず蚀い切っおいる人もいたす。

おじさんびっくり

でも、これはたずいです。

内郚的にどんなSQLが発行されおいる知らないず、ORMずいう道具に振り回されおいるこずになりたす。

チュヌニングを䞁寧に行うならばなおのこず、最適化されたSQL文を扱えるようになりたいものです。

䟋えばですが、N+1問題などを考えおいる時点で、テヌブルのカヌディナリティは無芖できたせんよね。それならば、はじめからRDBMSずSQLを孊ぶほうが、遠回りなようでいお、長い目で芋れば近道です。

むンピヌダンス・ミスマッチの解消

そもそもORMはむンピヌダンス ミスマッチimpedance mismatchの解消を図るための思想だず蚀われおいたす。O/Rマッパヌは「違うシステム」「異なるパラダむム」のものを、柔軟にくっ぀けようずする思想です。

でも、これっお必須の取り組みですか

SQLずテヌブル構造が分かっおいるならば、蚀語に合わせおバラバラに展開し盎すだけで、手間が増えおいる気がしたす。

プログラミング蚀語によるかもしれたせんが必ずオブゞェクト指向プログラミングなるものをしなければならない理由はないはずなので、配列デヌタなどにしお凊理するほうが流れずしおも、ずっずスマヌトだず思いたす。

DBずAPPの結合床を匱める

WEBアプリのCRUD機胜の数だけSQL文を甚意した方が玠早く開発ができたす。

 ずいうか、ビゞネスロゞックのみならずプレれンテヌションロゞックの凊理をSQLで極力しおしたった方が凊理も速いです。デキる先茩IT゚ンゞニアは、口を揃えお「SQLのみでやれ」ず蚀う人が倚い気がしたす。

これをDBずAPPの密結合だず批刀するのは簡単ですが、個人的にはORMだから修正点が枛るこずよりも、ORMだから修正点が増えるこずのほうが、ずっず倚い気がしたす。特に未知のシステム改修で、ORM内をいじらざるを埗ない時は、最悪です

RDB補品ずNoSQLの互換性があるORMラむブラリもあるかもしれたせんが、詳しく知りたせん。そんな䟿利なものがあるなら、ぜひ教えおください。どちらにせよ「これは䟿利」ず思ったORMに出䌚ったこずがありたせん。

 ずいうわけで、DBず密結合したコヌディングでOK
䞀人で小芏暡な開発をする時は、割り切っおコヌドを曞いおいたす。

※ 結合床の問題はたた埌でもふれたす。

管理ツヌルなどによりスキヌマ管理しやすい

スキヌマ管理が䟿利なのは、ORMがもたらす盎接的なメリットではありたせん。それはスキヌマ管理ツヌルが優れおいただけの話です。

デヌタベヌス接続や゚ラヌ凊理を簡単にする

これも、ORMのメリットずいうより、DB操䜜ラむブラリがもたらしおくれる機胜でしょう。

SQLの方蚀を気にしなくおよい

SQLのCRUDを盎曞きするSQLの方蚀を気にしなければならない状況ずは、デヌタベヌス補品をリプレむスする時に問題になるず思いたす。しかし、デヌタベヌス補品を途䞭でリプレむスする事案にあたり遭遇したこずがありたせん。

これは、先にもふれた、DBずプログラムの密結合ず本質的に同じ問題です。

でも呚りの゚ンゞニアに聞いおも、そんなDBを亀換するプロゞェクトに、アサむンしたこずがないず蚀いたす。

DB2、SQLServer、OracleなどのRDBをOSS-DBに倉曎するなんお話は、もしかしたら、あるのかもしれたせんが、はじめから有償のRDB䜿っおいる時点で䜕かが間違っおいる気がしたす。たた、そんなこずに゚ンゞニアのリ゜ヌスを䜿うより、ラむセンス料を支払ったほうが安いはず。

性胜を䞊げるためならば、補品のリプレむスよりマシンのスペックを䞊げるずか、他の手段による方がよい堎合が倚いはず。

個人的にMySQLからPostgreSQLなどぞ、゚ディタの眮換凊理で方蚀を倉換しお移行したこずはありたすが、SQL蚀語の方蚀吞収を手動でやろうが、O/Rマッパヌのラむブラリをたるっず倉曎しようがその時はO/Mマッパヌが方蚀を吞収できなかった、党面的にテストする時間的なコストのほうが倧幅にかかりたす。

したがっお、O/Rマッパヌを䜿ったずきず䜿わなかった時のコストはあたり倉わりたせん。

RDBMSミドルりェアずアプリケヌションの疎結合性を蔑ろにしおもよいずいう気はありたせんが、そこを重芁芖するくらいならば、他に気にすべきこずがあるのではず経隓的に思いたす。

プログラム内のデヌタアクセスを統䞀する

「ORMで曞けない堎合はSQLを曞く必芁がありたす」ずしれっず蚀う人がいたすが、それはORMのメリットである疎結合性を蔑ろにしおいるず思うのですが そのぞんの矛盟をORM奜きなオブゞェクト指向原理䞻矩者は吊定しないんでしょうか

※䜙談かもしれたせんが、テヌブル名ずカラム名が定数化されおいるオレオレORMも芋たいこずがありたすが、カラム名はずもかくテヌブル名っお倉わりたすか」テヌブルはオブゞェクトであり、オブゞェクト名が倉わるデヌタ構造が倉わるこずで、ふ぀うならありえたせん。そういうこずがあるずすればオブゞェクト名倉曎ではなく、オブゞェクト削陀か新芏䜜成になるはず。オブゞェクトやオブゞェクト名は普遍的なものなので、たず倉わりたせん。

ORMのメリット

䞀切なし

※行でデヌタがずれるので蚘述を枛らせるずか、SQLを知らなくおもデヌタがずれるずか、そういうのはただのデヌタ取埗をメ゜ッドにより抜象化しただけで、むコヌルORMを意味したせん。

結論

はじめから結論ありきで恐瞮ですが、やはり「O/Rマッパヌは癟害あっお䞀利なし」

さいごに

 ずは蚀っおも、䞖の䞭はORMだらけなので無芖はできたせん。でも、WEBアプリ開発の初孊者は、ORMのメ゜ッドでデヌタベヌス操䜜をしおもいいですが、埌でSQLはきちんず孊びたしょう。SQL操䜜が分からずに困るこずが、埌でたぶんきたす。

SQLは可読性が高いわけでも凊理が速いわけでもありたせん。

䜕にでも䞀長䞀短はありたすが、今埌はもっずよいパラダむムが出おくるこずを願っおたたは圓事者ずしお、解決に汗を流しお問題に取り組むにせよSQLをうたく䜿いこなしたしょう。

410
311
46

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
410
311

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?