# 概要
Sequel: The Database Toolkit for Ruby
https://github.com/jeremyevans/sequel
"Sequel has restored my faith in Ruby. It's really amazing. The O/RM I've been hoping for for years."
Sequelは、私を改めてRubyに夢中にさせてくれた。本当に驚くべきツールだよ。
これこそ、私が長らく待ち望んでいた O/R Mapper だ。
-- Sam Smoot(DataMapper の開発者)
http://sequel.jeremyevans.net/
とあるDBの複数あるテーブルから他のDBの複数のテーブルにデータを移す、データパッチをあてる、みたいな不幸せな境遇がたまにあったりします。でSQLを書くのもアレなのでO/R Mapper でスクリプト書きたいなーと思ったりします。そういうときに手軽なrubyのsequelというgemを教えて貰ったのでメモしておきます。(名前がSQLの語源になったIBMのSEQUELと同じなのでアレですね)。rubyのORMだとrailsのactive recordを使う人が多いかと思いますが、sequelはarより楽チンな感じです。
# 用例
面倒なのでローカルにあるsqliteファイル hoge.sqlite3
に接続する例にします。
require 'sqlite3'
require 'active_record'
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3',:database => 'hoge.sqlite3')
class Item < ActiveRecord::Base
has_and_belongs_to_many :warehouses
self.table_name = "items"
end
class Warehouse < ActiveRecord::Base
has_and_belongs_to_many :items
self.table_name = "warehouses"
end
class WarehousesItems < ActiveRecord::Base
belongs_to :item
belongs_to :warehouse
self.table_name = "Warehouses_Items"
end
#例)二ヶ月前以降に作成されたItemのレコードを関連するWarehouseと一緒に取得
items = Item.where(:created_at >= Date.today << 2).includes(:warehouses)
#以下テーブル操作の文が続く
...
こんな感じのコードがあったとします。これをsequelで似たような感じで書くと下記のようになります。
require 'sqlite3'
require 'sequel'
DB = Sequel.sqlite('hoge.sqlite3')
#例)二ヶ月前以降に作成されたItemのレコードを関連するWarehouseと一緒に取得
items = DB[:items].where{created_at >= (Date.today << 2)}.join(:warehouse, :id => :warehouse_id)
#以下テーブル操作の文が続く
...
短く書けていい感じですね(まあarでもjoins使えばいいので例としては卑怯かも知れないですが)。構文(http://sequel.jeremyevans.net/rdoc/files/doc/cheat_sheet_rdoc.html )はだいたいarと同じです。
# 使いどころ
arの代用というわけでなく、シンプルなwebアプリでDBに接続したい場合やDB管理者がDBをいじる際(ごりごり生SQL書いてて死ぬ〜って場面)に強力なツールになると思います(自分でも「これをもっと早く知っていれば…」と思っています)。あと、何より使う始めにあたって必要な学習量が少ないので、すぐに使えるようなるのも利点だと思います。