36
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

お手軽 O/R Mapper `Sequel`

Last updated at Posted at 2014-08-08

# 概要
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に接続する例にします。

sample_with_ar.rb
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で似たような感じで書くと下記のようになります。

sample_with_sequel.rb
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書いてて死ぬ〜って場面)に強力なツールになると思います(自分でも「これをもっと早く知っていれば…」と思っています)。あと、何より使う始めにあたって必要な学習量が少ないので、すぐに使えるようなるのも利点だと思います。

36
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?