Ruby の ORM について調べた
先日 Ruby Preserves という ORM を知った(今はメンテされてなくて残念)ので
せっかくなので Ruby の ORM について ActiveRecord 以外にどんなのがあるか調べてみました。
ActiveRecord
Ruby on Rails で採用されているみなさんご存知の ORM。
devise など主要な gem が ActiveRecord 前提で組まれているので
Rails で使うなら基本的にはこれを採用することになると思います。
Rails コードのうち大半を占める超大作で正直全コードを追い切るのはキツめ……。
DB の migration なんかも ActiveRecord で実現されている部分ですね。
一応、 rails new
コマンドに -O
というオプションが用意されており
このオプション付きで rails new
することによって ActiveRecord なしの Rails プロジェクトを作成することも可能です。
- railsコマンド(rails) | Railsドキュメント
- ruby - Disable ActiveRecord for Rails 4 | Stack Overflow
- Active Recordを使わない方法 | ユニコーンリサーチ
Ridgepole
ORM ではないのですが、
ActiveRecord の migration を使わずにスキーマ管理を実現する方法として
Ridgepole というコマンドラインツールがあるので合わせて紹介しておきます。
詳しくは以下記事などを参考にしてみてください。
- クックパッドにおける最近のActiveRecord運用事情 | クックパッド開発者ブログ
- Railsのマイグレーションを使わずRidgepoleを導入してみた | Qiita
- ridgepoleの紹介 | Qiita
- 【Rails】ridgepole導入 | Qiita
- さらば「rails migrate」、よろしく「ridgepole」 | RE:ENGINES
- マイグレーションファイルが増えないridgepoleのすごさ. LaravelやRailsで開発しているとマイグレーションファイルがどんどん増え… | by d yoshikawa | Crunchtimer | Medium
- Rails migration から ridgepole に移行した | DEV
Ruby Object Mapper(ROM)
Ruby Object Mapper(ROM) は Hanami フレームワークで採用されている ORM です。
EntityとRepositoryが分離されていることが特徴で、
ActiveRecord では導入し辛い Repository パターンにも対応できるのが良いところですね。
以下記事の解説がわかりやすかったのでここでは詳しくは説明しません。
- Hanami
- Hanami(Rom)でsqlを実行してカラムにない結果を取得する | Qiita
- ROM(Ruby Object Mapper)の基本的な使い方 | Qiita
- rom-rb / rom-rails | GitHub
- Rails で ROM を使用する gem もあるようです
- https://github.com/rom-rb/rom-rails
Hanami::Model
旧 Lotus::Model
ROM とは別に用意されている Hanami の ROM? ちょっと違いがうまく探しきれませんでした
- Hanami: Simplified Models through Repositories and ROM | by Sekhar Paladugu | Broadlume Product Development | Medium
Sequel
割と昔からある Ruby 用の ORM で、現在も更新されています。
ActiveRecord に比べるとライトな使い心地が特徴です。
パッケージ自体は今も更新されていますが、日本語の情報としてはここ2,3年は少なめです。
- Ruby/DBIの代わりにSequelを使う | Qiita
- Sequelのすすめ | SlideShare
- お手軽 O/R Mapper
Sequel
| Qiita - Sequelと戯れて分かったことをメモ書き | Qiita
- Sequelによるデータベーススキーマのマイグレーション | ぺけみさお
- Ruby Sequel で生 SQL をメインに使う | tech - 氾濫原
- TalentBox / sequel-rails
- Rails で ROM を使用する sequel-rails もあるようです
- https://github.com/TalentBox/sequel-rails
Ruby Preserves
- 今更 RubyConf 2015 の Ruby Preserves by Craig Buchek 冒頭3分を翻訳した
でも紹介した、 Craig Buchek さんが開発していた ORM。
5年まえに公開されたきり更新されていない様子で PostgreSQL にしか対応していませんが
全体のコード量が 350行程度と非常に完結にまとまっているので
ORM の全体像を把握してみたい方はみてみると良いのではないでしょうか。
まとめ
他にも jgaskins / perpetuity など現在はメンテされていない ORM もあったのですが今回は割愛しました。
結局、Rails 使うなら ActiveRecord 使うのがベターなんだなという
当然の結論に落ち着くわけですが、機会を見つけて ActiveRecord+Ridgepole や Hanami は触ってみたいなと思いました。
Discussion