Help us understand the problem. What is going on with this article?

【個人開発】Railsで生SQLを多少マシに書けるgemを作ってみた

More than 1 year has passed since last update.

arelableというgemを作りました。
まだrubygemsで公開してません。近日中にやろうと思います。 :sweat:

下記に公開しました。 :fireworks:
https://rubygems.org/gems/arelable

背景

  • 個人開発で何か作ってみるかな〜と考えていたけれど、webサイト作るのはメンテとか面倒&すぐにはアイデアがなかったのでライブラリー作るか、となりました。
  • 下記の理由から、従来生のSQLを書いていた処理を多少マシにかけるようなラッパーgemを作りました。
    • そういえば、Railsのモデルで比較(>とか<など)やlike を使う場合は生のSQLを書く必要があってイケてないなーと思ってた
      • そのうち、Rails側でサポートしてくれるメソッドができてもいいんじゃない?なんて思ってたけど出てこない...
    • ArelあるけどprivateなAPIだから依存したくないなぁ

実装方法

  • 単純に従来書いている生のSQL文をラップする処理を書きました。大したことはしてません。 :sweat_smile:
  • ActiveRecord::Concernを利用したモジュールを作り、それをActiveRecord::Baseに対してextendしています

使い方

(gem公開してからの話ですが、、) 対象のモデルにArelableをincludeした上でお使いください。

class User < ActiveRecord::Base
  include Arelable #<= これでok
end

gt

User.gt(:age, 35)
# => SELECT COUNT(*) FROM `users` WHERE (age > 35)

gteq

User.geteq(:age, 35)
# => SELECT COUNT(*) FROM `users` WHERE (age >= 35)

lt

User.lt(:age, 35)
# => SELECT COUNT(*) FROM `users` WHERE (age < 35)

lteq

User.lteq(:age, 35)
# => SELECT COUNT(*) FROM `users` WHERE (age <= 35)

bw

User.bw(:age, [35, 40])
# => SELECT COUNT(*) FROM `users` WHERE (age BETWEEN 35 AND 40)

matches

User.matches(:name, "Bo")
# => SELECT COUNT(*) FROM `users` WHERE (first_name LIKE '%Bo%')

所感

  • ショボイなりにゼロから何か作ってみると、けっこう楽しい。
  • もう少し機能のバリエーションとエラー処理とかちゃんとつけたい。
  • テスト/CI環境を作るのが大変だった&勉強になった。
    • active_recordだけ(railsなし)でDB接続したり、マイグレーションしたり、モデル操作とかどうするんだろうという所の知見が多少ついた
    • Railsで普段bin/rails db:migrate とかしててほんと楽だぁなと..
  • ご意見ご感想(こんな機能あったらいいんじゃね?なども)などありましたら、(優しめに)お願いいたします。 :pray:

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした