ORM何選ぶ問題🗺️
事の発端はGemfileとSQL
あらすじ
1.Ruby会議が2025年は愛媛だから小規模アプリをSinatraで作ろう
2.データベースどれにするか迷うけど簡単なのでMySQLにしようか
3.エラー出たからGemfileがどれかバージョン食い違ってるな、=> Geminiさん
4.なるほどgemはActiveRecordではなくsequelとな!
5.いやいやActiveRecordでMySQLいけるじゃん、SQLiteと今揺れてるけどいけるじゃん(嘘つきめ)
身から出た錆
そもそもgemの役割を本質理解してないところが問題で。
さらにO/R MapperことORMについてや、
そういったもの同士の違いや使い分けを理解できてない🐙が良くない。
ということでそれらについて一度整理しよう
ORMはどういったものか?
RDBとオブジェクト指向プログラミングとの仲人をしてくれるもの。仲人と言ったけど両者の対応づけをするという意味からマッピング。
SQLを直接書かなくてもデータベースデータを管理する仕組みを実現してくれる
CRUD性質を有しているイメージ
- データ量が多く
- 構造が複雑
- 複数の開発者
といった諸条件の際にとても便利なもの
開発規模に応じてORMは選択するらしい。
ただSinatraにActiveRecordはややオーバースペック気味な部分もあるけれど
Railsでの開発を見据えている場合はこれを使うに越したことはないという様子
ActiveRecordは何を実現してる?
Rubyに絶対服従なほんやくコンニャク。
この記事すごくわかりやすい
Sequelの役割もほぼ同じだけどSequelがActiveRecordにない役割を担っている場合もあるらしい
- Rails => ActiveRecord
- Sinatra => Sequel
だけども開発規模によってORMは決める。あとは別のフレームワークでも開発する目処があるなら前述の通りActiveRecordでいいじゃんってなる
正直文献もActiveRecordの方が多そうなのでこっちを採用かな
して今回のアプリのSQLはどうしましょうか?
技術スタックの一部は二転三転するだろうなは予想していたので構わないけれどデータベース理解が甘かったな
データベースごとの違いは他の記事に載せてるのでさておき、今回のアプリ的にはpostgreSQL => MySQL => SQLiteで行こうかとなってます
まだ内部のやり取り理解し切って適材適所で使い分けできたらいいなと思います。
今の所SQLiteで行こうとしてる。
調べたら良書的Qiitaがたくさんあって嬉しい
まとめ
今回のアプリでは
- Sinatra
- SQLite
- gem "ActiveRecord"
を使用していきます
ただ、gemの他との互換性やバージョンエラーにまたビクビク震える可能性大
気長にやる。
Discussion