🛢️

Ruby の ORM について調べた

2020/12/24に公開

先日 Ruby Preserves という ORM を知った(今はメンテされてなくて残念)ので
せっかくなので Ruby の ORM について ActiveRecord 以外にどんなのがあるか調べてみました。

ActiveRecord

Ruby on Rails で採用されているみなさんご存知の ORM。
devise など主要な gem が ActiveRecord 前提で組まれているので
Rails で使うなら基本的にはこれを採用することになると思います。
Rails コードのうち大半を占める超大作で正直全コードを追い切るのはキツめ……。
DB の migration なんかも ActiveRecord で実現されている部分ですね。

https://github.com/rails/rails/tree/master/activerecord

一応、 rails new コマンドに -O というオプションが用意されており
このオプション付きで rails new することによって ActiveRecord なしの Rails プロジェクトを作成することも可能です。

Ridgepole

ORM ではないのですが、
ActiveRecord の migration を使わずにスキーマ管理を実現する方法として
Ridgepole というコマンドラインツールがあるので合わせて紹介しておきます。

https://github.com/winebarrel/ridgepole

詳しくは以下記事などを参考にしてみてください。

Ruby Object Mapper(ROM)

Ruby Object Mapper(ROM) は Hanami フレームワークで採用されている ORM です。
EntityとRepositoryが分離されていることが特徴で、
ActiveRecord では導入し辛い Repository パターンにも対応できるのが良いところですね。
以下記事の解説がわかりやすかったのでここでは詳しくは説明しません。

https://rom-rb.org/

Hanami::Model

旧 Lotus::Model
ROM とは別に用意されている Hanami の ROM? ちょっと違いがうまく探しきれませんでした

https://github.com/hanami/model

Sequel

割と昔からある Ruby 用の ORM で、現在も更新されています。
ActiveRecord に比べるとライトな使い心地が特徴です。
パッケージ自体は今も更新されていますが、日本語の情報としてはここ2,3年は少なめです。

https://github.com/jeremyevans/sequel

Ruby Preserves

https://github.com/boochtek/ruby_preserves

でも紹介した、 Craig Buchek さんが開発していた ORM。
5年まえに公開されたきり更新されていない様子で PostgreSQL にしか対応していませんが
全体のコード量が 350行程度と非常に完結にまとまっているので
ORM の全体像を把握してみたい方はみてみると良いのではないでしょうか。

まとめ

他にも jgaskins / perpetuity など現在はメンテされていない ORM もあったのですが今回は割愛しました。

結局、Rails 使うなら ActiveRecord 使うのがベターなんだなという
当然の結論に落ち着くわけですが、機会を見つけて ActiveRecord+Ridgepole や Hanami は触ってみたいなと思いました。

Discussion