ひがやすを技術ブログ

電通国際情報サービスのプログラマ

DRYについてのよくある誤解

WEB+DB PRESS vol.49で、「現場で役立つDRYの基礎知識」が特集されています。とても、良い記事だと思うので、ぜひみなさん、読んでください。
ただ、ちょっと補足をしておきます。


記事の中で、DRYは、「達人プログラマー」の中で、とりあげられ、Railsによって広まったとされています。確かに、Rubyの世界ではそうかもしれないけど、DRY原則というのは、ERモデリング(DOA)の世界では、ずっと「One Fact In One Place」という言葉で知られてきました。
ERモデリングにおける正規化は、「One Fact In One Place」を具体的に実現するための手段です。
DRYという言葉そのものを広めたのは、間違いなくRailsです。しかし、DRYの考え方そのものは、昔からあったし、「One Fact In One Place」という言葉も、昔から有名だったということは知っておいたほうがいいでしょう。


後、今回の記事ではありませんが、DRYについてよくある誤解が、RailsActiveRecordはモデルにカラムの情報を記述しないから、DRYであり、Hibernateなどは、テーブルとエンティティ(モデル)に同じ情報があるから、DRYじゃないというものです。


DRYは、作業そのものを繰り返さないことであり、自動化によって生成されるものは、繰り返していることになりません。
一つのモデル定義から、DDLやエンティティを自動生成している場合は、DDLやエンティティに同じ情報が含まれているように見えますが、作業を繰り返しているわけではないので、DRYに違反しているわけではないのです。
Railsのdb:migrateもmigration用のスクリプトとテーブルの定義が重複しているように見えますが、テーブルの定義は自動生成されているので、DRY原則に違反していません。それと同じことです。


ついでに言っておくと、CoC(Convention over Configuration)も言葉自体は、Railsによって広まりましたが、考え方そのものは、Javaの世界だと「Configuration by Exception(デフォルトの設定を用意しておいて、例外のときのみ設定するようにする)」が、同じような意味だし、きっと他の言語でも同じような考え方があるでしょう。


これは、Railsは画期的なわけではなくて、これまでの概念を焼き直ししただけだといっているわけではありませんよ。
DRYやCoCの方向に、Rubyだけではなく、さまざまな言語のフレームワークを引っ張っていったRailsの功績は偉大です。広めるというのは、考え付くよりも難しいことが多いのです。