🧑‍🦱

今更 RubyConf 2015 の Ruby Preserves by Craig Buchek 冒頭3分を翻訳した

2020/12/21に公開

なぜ翻訳したのか

ActiveRecord じゃない Ruby 用のORMって何があるんだろうな〜と探しているときに
この動画を見つけて、ちょっと面白かったので冒頭部分を翻訳しました。
興味が湧いた方は古い動画ですが見にいってみてください。
全文字幕がついてるので、自動翻訳->日本語で日本語字幕つきで視聴できます。
(じゃあ翻訳を掲載する意味とは……?🤔 )

ソース

RubyConf 2015 - Ruby Preserves by Craig Buchek
https://www.youtube.com/watch?v=MZVSK4cjeF4

スライド

https://booch.github.io/presentations/Ruby_Preserves/slides.html

boochtek / ruby_preserves

5年更新されてないので継続してメンテしてるわけではないようです……ぴえん
https://github.com/boochtek/ruby_preserves

登壇者:Craig Buchek

https://github.com/booch

冒頭3分 翻訳

こんにちは、ようこそ。
今日の私の講演は、Ruby Preserves という名前の私が書いたORMについてです。

私は Craig Buchek といいます。 独立系のWeb開発者です。
2006年頃からRailsとRubyをやっています。
私はアジャイルの大ファンでもあります。ポッドキャストをしています。
This Agile Life といいます。チェックしてみてください。

ということで、私は昨年、Ruby の ORM を書き始めました。
そしてそれは驚くほど小さいです。
あなたは これをマイクロORMと呼ぶことができると思います。
ほとんどのORMが持っているであろういくつかの機能が不足しています。
しかし、他のマイクロORMが持っていないいくつかの機能を持っています。

ORMが何であるかを確認したいと思います。
ORMはオブジェクトリレーションマッパーです。
したがって、SQLデータベースはリレーションを扱います。関係と呼ばれるものがあります。
Rubyはオブジェクトを扱います。

したがって、これらの2つのものは実際には異なる動作をします。
ORMは、これら2つのものを統合します。

いくつかの注意点があります。
人々はインピーダンスの不一致と呼びます。

物事がいつも同じように動くとは限らないからです。
一例として、ツリー構造があります。
オブジェクト指向言語の中のツリー構造はかなり簡単です。
ポインタまたはリンクが必要です。
containを含んでいる場合は、関係性があります。

SQLではそう簡単にはできませんね。
いくつかのテクニックがあります。

データベースに保存したり、引き出したりするために、
この2つの異なる手法をマッピングする必要があります。

では、なぜORMを作成するのでしょうか。
なぜ私がそんな大変な仕事に取り組むのか?

第一に、私は既存の Ruby ORM のどれにもあまり満足していません。
探求して学びたいと思いました。ORM を書くことに興味を持ちました。

同僚のアモス・キング が客席にいます。
彼はよく人に「ねぇ、自分で ORM を書くべきです。」と言っています。
そして愚かなことに、私は彼の言うことをききます。

いつか自分の理想の ORM を書くのに十分なことを学ぶことができるかもしれません。

彼らが言うには、何か良いものを書きたいのなら、
1つ書いて、捨てて、新しいものを書いてください。

だから、ある意味では、これがそうなんです。
ということで、私が作ってみようと思うのは 失敗しても、そこから学ぶことができます。
そして、うまくいけば、2回目のトライではより良いアーキテクチャにするにすることにします。

だから、私はただ いくつかの質問に答えたかっただけです。

ORMは本当に複雑です。
なぜなら、必要な場合にどれだけ簡単に作ることができますか?
ORMの本質とは?

ということで、今まで使ってきた全てのORMにはDSLがあります。SQLの記述を支援します。
DSLはドメイン固有の言語です。 通常、問題は、あなたがDSLを使わなくなることです。
自分でSQLを手動で作成する必要があります。 それを漏れのある抽象化といいます。

つまり、抽象化されたが必ずしもうまくいくとは限りません。
時にはより低いレベルの抽象化に降りなければならない

では、抽象化がずっと漏れたまま作るとどうなるのでしょうか?
SQLを使用しているだけで、DSLは使用しませんでした。
SQLの作成に役立ちます。

そこで、私は Data Mapper Pattern に基づいてORMの設計を始めました。
いくつかの強い意見がありました。
ActiveRecordに夢中になるのは物事を2箇所で探す必要があります。
関係はモデルクラスで定義され、
所属しているモデルが定義されています。
属性はデータベーススキーマで定義されています。

モデルがどのように機能するかを理解しようとしているとき、
私はそれらの異なる場所を見なければならないので、いつも見るのがが嫌になる。

(後略)


以上です。
ぜひ元動画を見てみてください!

Discussion