��������Ruby��Ĥ⤢��Ȥ����Τˡ���������Ƕ�Ruby�����񤤤Ƥʤ�faultier�Ǥ�����Ф����㤢��ϥӥ���ͤƵס���Ramaze�����ͷ��Ǥߤ뤫���Ĥ��Ǥˤ����ø�NoSQL�֡���ˤ��äƤߤ뤫���ߤ����ʴ�����Ramaze+MongoDB+Candy��ͷ��Ǥߤ뤳�Ȥˤ��������ʤߤ˼���ǤϺ�Cassandra���֡���ʤΤ����ɤ⡢Cassandra�Ϥ���ä�ͷ�ӤǻȤäƤߤ�ˤϥ����С����ڥå�����ʡ��Ȥ��פ��ĤĿ������Ƥ��顢Heroku��MongoDB���Ȥ���餷���ΤǤ�������äƤ�MongoDB�����ꡣ

�Ȥꤢ��������Ƥߤ�

apt��õ������mongodb�Υѥå������⤢�������ɡ�2010ǯ5��30�������Ǥ�1.2.2�ȼ㴳�С�����󤬸Ť������θ奪�֥������ȥޥåѡ��򿧡���Ƥߤ��Ȥ���1.4�Ϥ���ʤ���ư���ʤ��ä��ꤷ���Τǡ��ܲȤΥ���������ǿ��ΥС��������Ȥ��Ƥ��롣����ѥ���ѤߤΥѥå������ʤΤ�Ÿ������Ŭ���ʤȤ����֤��Ȥ�������OK���긵�δĶ���Ubuntu 10.04��64bit�ʤΤ�Linux 64bit�äƤ�Ĥ���������ɡ�OSX 32/64 bit�Ȥ�Windows 32/64 bit�Ȥ��⤢�ä���

$ mongo
MongoDB shell version: 1.4.3
url: test
connecting to: test
type "help" for help
>

�դࡣ�Ҥä��Ҥä������Τ������塼�ȥꥢ���Ȥ��ˤ������̤���礳���礳�����äƤߤ����ɤ����ȻȤ���褦����

Ruby����Ȥ�

Ruby��driver��gem���饤�󥹥ȡ���Ǥ���Τ����̤�gem install mongo�Ȥ���롣��¸�⥸�塼���bson�ƤΤ����뤱�ɤʤ󤸤�����Ȼפä�������ɡ�Ruby�Υ��֥������Ȥ�MongoDB��BSON���֥������Ȥ˥��ꥢ�饤������⥸�塼������̤Υѥå������ˤ��Ƥ���餷������ǡ�bson��C��ĥ�����äơ����ä�������Ƥʤ��Ȥ���ʥ�å��������Ф롣

rb(main):001:0> require 'mongo'

**Notice: C extension not loaded. This is required for optimum MongoDB Ruby driver performance.
  You can install the extension as follows:
  gem install bson_ext

  If you continue to receive this message after installing, make sure that the
  bson_ext gem is in your load path and that the bson_ext and mongo gems are of the same version.

=> true

�ޤ���������γ�ȯ�Ķ������̤ˤɤä��Ǥ⤤��������ɡ������Ф��֤��Ȥ��Ϥɤ����Ȥ���������bson_ext������Ƥ�����

# coding: utf-8
require 'mongo'

con   = Mongo::Connection.new # ���⥪�ץ������ꤷ�ʤ��� localhost��28017�ݡ��Ȥ˷Ҥ�
db    = con.db('candy')
udons = db.collection('Udon')
udons.insert({
  'name'  => '�֤ä���',
  'type'  => '�䤿�����ɤ�',
  'price' => 350
})
udons.insert({
  'name'  => '����',
  'type'  => '���������ɤ�',
  'price' => 300
})
udons.insert({
  'name'  => '����',
  'type'  => '���ޤ������ɤ�',
  'price' => 400
})

p db.collection_names  #=> [ 'system.indexes', 'Udon' ]
p udons.count          #=> 3
p udons.find_one       #=> {"_id"=>{"$oid"=>"4c0273712e119e3fd7000001"}, "name"=>"�֤ä���", "type"=>"�䤿�����ɤ�", "price"=>350}
p udons.find('price' => {'$gte' => 350}).count #=> 2

����ʴ����Ǥ����äȻȤ������ۡ������Ȥ�MapReduce�Ȥ���Ƥߤ褦���Ȼפä����ɤޤ�����Ϥ���������

���֥������ȥޥåѡ�

�֤ä��㤱mongo-ruby-driver�����Ǥ⽽ʬ�����Ǥ��뤷��O/R�ޥåѡ��Ĥ�������Relation����ʤ����顢O/D�ޥåѡ�������̵���Ƥ⤤�����ʤȻפä����ɤ⡢Ramaze�Ȥ��ǻȤ����Ȥ�ͤ������äѤꤢ�ä����������ʹ��פ��Ƥ��д�¸�Υإ�ѡ��Ȥ��Ȥ������ʤΤǡˡ���Ǥ�����äȸ��Ƥߤ��顢�빽��������������ɡ��ɤ��AR�äݤ������ʤ����ʤ�Ȥ�����������äȲ��ʤΤǤ�ä������Τ�������������MongoMapper��Mongoid��ActiveSupport�Ȥ�validation�ѤΥ饤�֥��Ȥ�������㤦��Rails�ǻȤ���ʤ餤��������ɡ��Ȥ�����Rails��AR������˻Ȥ��Τ����ꤷ�Ƥ�äݤ��ơ�ActiveModel�äƤΤ��������͡��Ƕ�Rails�������Ƥʤ��Τ��Τ�ʤ��������Rails��Model��ݲ���ή��ʤ󤫤ʡˡ�Ǻ�ޤ������ġ���ActiveSupport������ʤ����ߤ����ʤ��ġ�

�Ŀ�Ū�ˤϰ����κǸ�ˤ��ä�Candy���ɤ����˸��������ʤˤ����֥������ActiveRecord��DataMapper�Υߥ顼����ʤ��פä�README��Ƭ���������Ƥ뤷��mongo-ruby-driver�ʳ��ˤϰ�¸���Ƥʤ��Τ���Ũ���Ȥ�����Candy::Piece��include��������ȥ���ץ롣

# coding: utf-8
require 'candy'

class Udon
  include Candy::Piece
end

kamaage = Udon.new
kamaage.name = '���ޤ���'
kamaage.type = '���ޤ������ɤ�'
kamaage.price = 350

���ʤߤˡ�������ꤷ�ʤ���Ф����localhost��28017�ݡ��Ȥ˷Ҥ��ǡ�candy�Ȥ����ǡ����١�����Udon���쥯�����˥����������롣�Ĥޤꤳ�Υ����ɤ��ȡ�������Υ����ɤ�Ʊ���ǡ����١�����Ʊ�����쥯����󤫤��äƤ��뤳�Ȥˤʤ롣�����Candy���饹��Udon���饹�Υ��饹�᥽�åɤǻ���/�ѹ��Ǥ��롣Candy���饹�����ꤹ������ƤΥǥե��������ˤʤ뤷�����饹�᥽�åɤ����ꤹ��Ȥ��Υ��饹�Υǥե��������ˤʤ롣Ramaze���ä��顢model/init.rb������Ǥ����񤤤Ȥ���

# coding: utf-8

require 'candy'

Candy.host = "mongdb.example.com"
Candy.port = "24423"
Candy.db   = "udonapp"

require __DIR__('udon')

Udon.collection = 'menrui' # ���饹̾����ʤ����쥯�����̾�ˤ��������

����save�᥽�åɤϤʤ����ʤ󤫤����ݥꥷ���餷���ơ����֥������Ȥ�������¨��ȿ�Ǥ���롣method_missing�ǥեå����ƿ�������򤫤��Ƥ�Τǡ��⤷validation�Ȥ����������ϡ��㤨��price�������Ǥʤ���Фʤ�ʤ��ơ�1000��Ķ����褦�ʤ��⤤���ɤ����ä��㤤���ʤ��ݥꥷ���ˤ���Ȥ����顢����ʴ����Υ᥽�åɤ����䤷�Ƥ�롣super���Ρ�

class Udon
  include Candy::Piece

  def price=(val)
    raise '���ʤϿ������äĤäƤ����' unless val.kind_of?(Integer)
    raise '�������襢�ۤ�' unless val < 1000
    super
  end
end

���ʤߤ˥Х�ǡ������Ȥ����顼�ϥ�ɥ�󥰤Ȥ�named scope�Ȥ��δ�ñ�ʼ������Candy�Υɥ�����Ȥ˺ܤäƤ�ΤǸ��Ƥߤ�Ȥ����Ȼפ����ޤ��㴳���ݤǤϤ��뤱�ɡ���ľ����ʤΤǤ�����ʡ��Ȼפä������Ф餯�����ͷ��Ǥߤ褦��

�ĤȤ���������ޤǽ񤤤�������̿Ū�ʤ��Ȥ˵��դ���������ɡ�Candy��1.9�Ϥ���ʤ������ܤ餷���������Heroku�ä�Ruby 1.9�Ϥ��ä��ġ�¿ʬ�㤦��͡ġ������󡢤ޤ������礦�ɼڤ�Ƥ륵���Ф��ӥ�ɤ������Ȥ������Ȥꤢ�������Υ����Ф�ư������Ф������ġ�